Prompt:更好的提示与迭代
欢迎来到啾啾的博客🐱。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。
目录
- 1 引言
- 1.1 引用资料
- 2 更好的提示
- 2.1 情景学习ICL
- 2.1.1 基础指令式Prompt(Zero-shot)
- 2.1.2 少量样本提示的Prompt(Few-shot)
- 2.1.3 QA
- 2.2 Chain of Thought(CoT)
- 2.2.1 零样本思维链(Zero-shot CoT)
- 2.2.2 少样本思维链 (Few-shot CoT)
- 2.2.3 自我一致性(Self-Consistency)
- 2.3 其他
- 3 迭代技巧
- 3.1 直接提问
- 3.2 任务验证
- 3.3 引导反思法
- 4 总结
1 引言
在上一篇中,我们了解了提示词Prompt的构成、评估、优化和抄作业方法。
了解到了可以通过LLM预处理、核心共识等手段优化或写出一个好的提示词,也建立了好的提示词应该是给予LLM引导的认知。
本篇我们继续深入了解Prompt,了解写好Prompt的细节。
1.1 引用资料
《Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine》
https://huggingface.co/docs/transformers/main/tasks/prompting
2 更好的提示
2.1 情景学习ICL
情境学习(ICL)是基础模型的一项关键能力,允许模型仅通过少数任务示例即可解决新任务。例如,可以通过在测试问题前加上几个不同的问题示例和期望结果来创建 ICL 提示。ICL 不需要更新模型参数,但可以提供类似于微调的效果。在少样本提示中使用的示例选择可以显著影响模型性能。
ICL核心思想是给予情景/角色+提供示例+定义输出格式+明确任务边界:
- 给予情景/角色: 开头设定了“专业的数据分析师”角色,引导模型以更专业的标准进行判断。
- 提供范例 (Few-shot Learning): 提供了两个清晰的示例,让模型学习到任务的具体要求和判断标准。
- 定义输出格式: 示例本身就规定了清晰的分类:结果格式,模型会大概率遵循这个格式,确保输出的统一性和规范性。
- 明确任务边界: 使用分隔符—清晰地将引导部分和实际任务分开。
即,创建提示词时给出情景可以引导LLM更好地完成任务。
2.1.1 基础指令式Prompt(Zero-shot)
这个例子直接给出任务,不提供任何背景情景或格式示例。
任务:将以下客户评论总结为“积极”或“消极”两类。评论:
1. “我上周买的这双鞋,穿起来非常舒服,而且款式也很新潮,朋友们都问我在哪买的。”
2. “等了两个星期才到货,结果发现尺码发错了,联系客服也没人理,太失望了。”
3. “这款咖啡机的设计很漂亮,放在厨房里很有格调。磨出来的咖啡豆也很香醇。”
- Qwen3深度思考 时间:20250616
这个 Prompt 很直接,但它依赖于模型自身对“积极”和“消极”的理解,并且没有指定输出格式。模型可能会给出正确的答案,但输出形式可能不统一。
例如这里Qwen3直接给出“[积极,消极,积极]
”列表。我们再次请求(每次请求均新开对话)
可以看到每次输出都不一致。
2.1.2 少量样本提示的Prompt(Few-shot)
这个例子通过提供背景角色、明确的任务指令,并给出几个完整的“问题-答案”范例,来为模型设定清晰的情景和预期的输出格式。
你是一位专业的数据分析师,负责处理电商平台的客户反馈。你的任务是将客户的原始评论精准地分类为“积极”或“消极”。请严格按照我给出的格式完成任务。以下是一些示例:# 示例 1
评论:“这款耳机的音质超出了我的预期,降噪效果也很棒,通勤路上终于可以安静地听音乐了。”
分类:积极# 示例 2
评论:“我订的是套餐A,但送来的是套餐B,而且食物都冷了。”
分类:消极
---现在,请根据以上标准和格式,对以下新的评论进行分类:评论:
1. “我上周买的这双鞋,穿起来非常舒服,而且款式也很新潮,朋友们都问我在哪买的。”
2. “等了两个星期才到货,结果发现尺码发错了,联系客服也没人理,太失望了。”
3. “这款咖啡机的设计很漂亮,放在厨房里很有格调。磨出来的咖啡豆也很香醇。”
- Qwen3深度思考 时间:20250616
再次请求:
这个 Prompt 给予了模型更丰富的上下文和更明确的引导,通常会比第一个 Prompt 获得更准确、更稳定的结果。
2.1.3 QA
Q:怎么稳定LLM每次的输出格式
A:给予示例。少样本学习是最有效的情景学习方法。通过提示方法,通过少量示例,基础模型能够快速适应特定领域,并学会遵循任务格式。
2.2 Chain of Thought(CoT)
思维链(CoT)使用自然语言语句,例如“让我们一步步思考”,明确鼓励模型生成一系列中间推理步骤。该方法已被发现能显著提升基础模型进行复杂推理的能力。大多数思维链方法都集中在使用专家手动编写包含思维链的少样本示例用于提示。
CoT就是引导LLM进行推理、思考。它将一个复杂的任务从 “输入 -> 输出” 的黑盒模式,转变为 “输入 -> 推理步骤 -> 输出” 的白盒模式。
但是自我生成的CoT推理链存在风险,可能包含幻觉或错误的推理链。
2.2.1 零样本思维链(Zero-shot CoT)
不给出推理示例,在prompt后面加:
- “让我们一步步思考。 (Let’s think step-by-step.)”
- “请详细说明你的推理过程。”
- “请分解问题并逐步解决。”
这种方法非常便捷,对于能力较强的大模型(如 GPT-4)在大多数中等难度的推理任务上效果显著。
2.2.2 少样本思维链 (Few-shot CoT)
这是更强大、更可控的方式。引导LLM思考并给出思考示范。
你是一位资深的客户支持主管,需要分析客户投诉的根本原因并提供解决方案。请遵循严谨的逻辑推理过程。# 示例 1
评论:“等了两个星期才到货,结果发现尺码发错了,联系客服也没人理,太失望了。”
分析过程:
1. 识别客户的核心不满点:物流慢、商品错发、客服响应不及时。
2. 问题归因:物流部门延迟发货;仓库部门拣货错误;客服部门人手不足或流程问题。
3. 根本原因:多部门协同流程存在漏洞。
最终结论:这是一个涉及物流、仓储和客服的综合性服务失败案例。---现在,请根据以上分析范例,处理以下新评论:评论:“我买的吸尘器用了一次就充不进电了,申请售后,你们的维修点居然在另一个城市,来回邮费比我买个新的还贵!”
2.2.3 自我一致性(Self-Consistency)
可以通过多次运行和投票来消除单次推理的偶然性错误。
- 不只让模型思考一次,而是让它用多种方式思考多次(例如,使用略有不同的措辞提问,或者让模型以不同的温度参数生成多个回答)。
- 然后检查这些不同的“思维链”最终导向了哪个答案。
- 选择那个出现次数最多、最一致的答案作为最终结果。
2.3 其他
另外,大量研究和实践表明,大型语言模型(LLM)对 Prompt 开头和结尾的信息最为敏感,而处在中间部分的信息则有可能被“遗忘”或忽略。 这种现象被称为“中间忽略 (Lost in the Middle)”效应。
这与模型处理长文本的内部机制(如注意力机制)有关。模型在生成下一个词时,会“回顾”整个输入文本,但它分配给不同位置的“注意力权重”是不均匀的。通常,开头部分为任务设定了基调和目标,结尾部分是它要直接回应的最新指令,这两部分自然会获得最高的权重。
所以,在实战应用中,我们需要:
- 重要指令放两头
将最关键的任务指令、角色设定或输出格式要求,明确地放在 Prompt 的最开始。然后,在所有上下文、示例都提供完毕之后,于结尾处再次重申核心任务或直接提问。
优化前:
请扮演一位营销专家。这里有一些我们产品的背景资料:[...大量背景资料...],以及一些成功的营销案例:[...大量案例...]。请为我们的新产品写一个营销文案。
优化后:
**任务:为新产品撰写一份引人注目的营销文案。**
**角色:你是一位顶级的营销专家。****产品资料:**
[...大量背景资料...]**参考案例:**
[...大量案例...]**输出要求:**
请现在根据以上所有信息,为我们的新产品撰写一份营销文案,要求风格活泼,不超过200字。
3 迭代技巧
我们在持续调整、迭代prompt时,需要确认LLM记住的规则是否跑偏。
所以,我们需要使用一些指令来查询LLM的上下文,总结我们给的指令。
3.1 直接提问
通用模板:
- “请总结一下到目前为止,你被赋予了什么角色,以及需要遵守哪些核心要求?”
- “在我们继续之前,请确认一下你当前的角色设定和任务目标。”
- “你正在扮演什么角色?为了完成我的任务,你需要遵循哪些具体的输出格式或限制?”
3.2 任务验证
设计一个“测试任务”,看模型的行为是否符合你之前的设定。这能更好地检验模型是否真正“理解”并“应用”了规则。
通用模板:
- “作为一个小测试,请用你现在的角色/格式,处理以下这个简单任务:[一个与任务无关的简单输入]”
- “为了确保你已理解,请用你被要求的格式,重新组织一下这句话:[一句话]”
3.3 引导反思法
和CoT思路类似。引导模型在回答前先“自我反思”一遍规则。
通用模板:
- “对于我接下来的问题,请先在内部思考并一步步确认你需要遵循的指令,然后再给出符合所有要求的最终答案。” (这种方式你看不到它的思考过程,但能提升结果的准确性)
- “请先列出你将要遵循的1、2、3条核心指令,然后在分割线下方,再正式回答我的问题。” (这种方式最透明)
4 总结
结合上篇内容,做一些Prompt编写小技巧总结。
https://huggingface.co/docs/transformers/main/tasks/prompting 有总结最佳实践哦
-
清晰结构
至少要有核心公式RPC:规则(Rules)+角色(Persona)+上下文(Context)。 -
给予结果示例(少样本学习)
引导中包含示例 -
要求推理思考
在prompt附带思考示例。 -
调整然后多次运行
调整然后多次运行,以获取偶然性最小的结果。 -
重要指令放两头
将最关键的任务指令、角色设定或输出格式要求,明确地放在 Prompt 的最开始。然后,在所有上下文、示例都提供完毕之后,于结尾处再次重申核心任务或直接提问。 -
格式要求(一种分离解耦)
使用 — 或者 # 分隔符分割划分不同区域,来帮助模型更好地理解结构。 -
多说“做什么”,少说“不做什么”
模型更容易理解和执行正面指令。尽量使用积极、肯定的指令。与其说“不要在回答中使用专业术语”,不如说“请用通俗易懂的语言向初学者解释”。 -
持续迭代
从简短且简单的提示开始,并对其进行迭代以获得更好的结果。 -
写出结果简单开头
通过写出第一个词甚至第一句话来引导模型生成正确的输出。
总结一下就是“给示例、要思考、多尝试”。
另外需要注意的是,虽然提示是处理 LLMs 的强大方式,但在某些情况下,使用微调模型甚至进行模型微调效果更好。
以下是一些使用微调模型是合理的情况。
- Your domain is extremely different from what a LLM was pretrained on, and extensive prompting didn’t produce the results you want.
你的领域与 LLM 预训练的内容极其不同,并且广泛的提示没有产生你想要的结果。 - Your model needs to work well in a low-resource language.
您的模型需要在低资源语言环境中表现良好。 - Your model needs to be trained on sensitive data that have strict regulatory requirements.
您的模型需要在严格监管要求的数据上进行训练。 - You’re using a small model due to cost, privacy, infrastructure, or other constraints.
由于成本、隐私、基础设施或其他限制,你正在使用一个小模型。