【大模型应用开发极简入门】提示工程二:零样本学习、少样本学习与改善提示效果
发布时间:2026/11/3 18:20:00 锦皓数字建站

文章目录一. 逐步思考零样本思维链1. 数学计算推理2. 注意有效的方面二. 少样本学习1. 基于提示词示例的学习2. 单样本学习三. 改善提示效果1.指示模型提出更多问题2.格式化输出3.重复指示4.使用负面提示5. 添加长度限制一. 逐步思考零样本思维链1. 数学计算推理我们知道GPT-4不擅长计算。比如它无法计算369 × 1235promptHow much is 369 * 1235?chat_completion(prompt)模型给出的答案是454965但正确答案是455715。GPT-4不能解决复杂的数学问题吗该模型从左侧开始通过依次预测答案中的每个标记来给出完整的答案。这意味着GPT-4首先生成最左侧的数字然后将其作为上下文的一部分生成下一个数字以此类推直到形成完整的答案。挑战在于每个数字都是独立预测的与最终的正确值无关。GPT-4将数字视为标记它没有数学逻辑。后面的文章将探讨OpenAI如何通过插件来增强GPT-4。一个例子是计算器插件(agent)它可用于进行准确的数学运算。提高语言模型的推理能力有一个诀窍。比如当要求模型计算369 × 1235时我们可以看到模型试图一次性直接回答。考虑到即使是我们自己也很难在没有纸和笔的情况下计算这个乘法算式因此我们可以通过提示词鼓励模型进行中间推理。 就像我们使用纸和笔计算一样如果给模型足够的时间进行推理它也可以解决复杂的问题。在提示词的末尾添加“让我们逐步思考”这样的话已被证明可以使模型解决更复杂的推理问题。这种技术称为零样本思维链策略(zero-shot-CoT strategy)由Takeshi Kojima等人在2022年发表的论文“Large Language Models are Zero-Shot Reasoners”中提出。思维链是指使用提示词鼓励模型逐步模仿推理的技术。零样本这个术语意味着模型不依赖于特定任务的示例来执行这种推理它已经准备好根据其一般的训练结果来处理新任务。与我们稍后就会讨论的少样本学习等技术不同零样本学习试图在不需要特定任务示例的情况下进行泛化。promptHow much is 369 * 1235? Lets think step by step.chat_completion(prompt)模型的输出如下所示Step1:Multiply369by5(the last digit of1235).369*51845Step2:Multiply369by30(the second last digit of1235is3,so multiply by3andadd a0at the end).369*3011070Step3:Multiply369by200(the third digit of1235is2,so multiply by2andadd two 0s at the end).369*20073800Step4:Multiply369by1000(the first digit of1235is1,so multiply by1andadd three 0s at the end).369*1000369000Step5:Add the resultsfromsteps1to4.18451107073800369000455715So,369*1235455,715.模型所用的方法发生了显著的改变。现在它将主要问题分解为更小、更容易管理的步骤而不是试图直接解决问题。2. 注意有效的方面尽管提示模型逐步思考但仍需注意要仔细评估其回答因为GPT-4并非绝对可靠。对于更复杂的算式比如3695 × 123548即使使用这个技巧GPT-4也可能无法算出正确答案。尽管这个技巧对大多数数学问题有效但并不适用于所有情况。论文“Large Language Models are Zero-Shot Reasoners”的作者发现它对于多步算术问题、涉及符号推理的问题、涉及策略的问题和其他涉及推理的问题非常有效。然而它对于模型回答常识性问题没有显著效果。二. 少样本学习1. 基于提示词示例的学习少样本学习(few-shot learning)是由Tom B. Brown等人在论文“Language Models Are Few-Shot Learners”中提出的它指的是LLM仅通过提示词中的几个示例就能进行概括并给出有价值的结果。在使用少样本学习技巧时你可以给模型提供几个示例如图所示。这些示例指导模型输出所需的格式。在本例中我们要求LLM将特定的单词转换成表情符号。很难想象如何通过提示词给模型下达这种“指令”。但是通过少样本学习这变得很容易。给模型一些例子它将自动尝试复制它们的模式我们得到以下输出消息少样本学习技巧提供了具有目标输出的输入示例。然后在最后一行我们提供了想让模型完成的提示词。这个提示词与之前的示例具有相同的形式。模型将根据给定示例的模式执行操作。我们可以看到仅凭几个示例模型就能够复现模式。注意在提示词中提供示例时务必确保上下文清晰且相关。清晰的示例有助于模型匹配所需输出格式并解决问题。相反信息不充分或模棱两可的示例可能导致意外或错误的结果。2. 单样本学习指导LLM的另一种方法是单样本学习(one-shot learning)。顾名思义在单样本学习中我们只提供一个示例来帮助模型执行任务。尽管这种方法提供的指导比少样本学习要少但对于简单的任务或LLM已经具备丰富背景知识的主题它可能很有效。单样本学习的优点是更简单、生成速度更快、计算成本更低因而API使用成本更低。然而对于复杂的任务或需要更深入理解所需结果的情况少样本学习的效果可能更好。请注意你可以将这些技巧提示词、零样本、少样本结合起来使用以获得更好的效果。开发人员的工作是找到最有效的提示词来解决特定的问题。请记住提示工程是一个反复试错的迭代过程。三. 改善提示效果我们已经了解了几种提示工程技巧。采用这些技巧我们可以引导GPT模型的行为以使模型给出的结果更好地满足我们的需求。接下来将介绍更多技巧可以在GPT模型编写提示词时酌情使用。1.指示模型提出更多问题在提示词的末尾询问模型是否理解问题并指示模型提出更多问题。如果你正在构建基于聊天机器人的解决方案那么这样做非常有效。举例来说你可以在提示词的末尾添加如下文本你清楚地理解我的请求了吗如果没有请问我关于上下文的问题。这样一来当我回答时你就能够更高效地执行我所请求的任务。2.格式化输出如果你想要一个JSON输出那么模型往往会在JSON代码块之前和之后写入输出。如果你在提示词中说输出必须被json.loads接受那么模型给出的结果可能更好。这种技巧适用于许多场景。比如使用此脚本prompt Give a JSON output with 5 names of animals. The output must be accepted by json.loads. chat_completion(prompt,modelgpt-4)我们得到以下JSON代码块。{animals:[lion,tiger,elephant,giraffe,zebra]}3.重复指示经验表明重复指示会取得良好的效果尤其是当提示词很长时。基本思路是在提示词中多次添加相同的指令但每次采用不同的表述方式。这也可以通过负面提示来实现。4.使用负面提示在文本生成场景中负面提示是指通过指定不希望在输出中看到的内容来引导模型。负面提示作为约束或指南用于滤除某些类型的回答。对于复杂任务这种技巧特别有用当以不同的表述方式多次重复指令时模型往往能够更准确地遵循指令。Extract the keywordsfromthe following question:{user_question}.Donotanswer anythingelse,only the keywords.没有这个提示词的话模型往往不会遵循指示。5. 添加长度限制限制长度通常是不错的做法。如果你只希望模型回答1个词或者10个句子那么不妨将要求添加到提示词中。如下例子指示模型用100个单词生成一篇内容翔实的新闻稿。利用提示词“如果你能回答问题回答ANSWER如果你需要更多信息回答MORE如果你无法回答回答OTHER。只回答一个词。”如果没有最后一句话模型往往会生成句子而不会遵循指示。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。