Prompt 进阶:思维链与高级技巧
当你已经能写出”把任务说清楚”的基础提示词后,下一步要解决的问题是:模型为什么还会算错、编错、答非所问? 答案往往不在”多写几句话”,而在提示的结构。本文聚焦一组经过论文与工程验证的进阶技巧:从 Zero-shot / Few-shot 起步,到思维链(Chain-of-Thought)、自洽性、角色提示、结构化输出,最后落到”减少幻觉”的实用策略。
从 Zero-shot 到 Few-shot
什么是 Zero-shot
Zero-shot(零样本)指不给任何示例,只描述任务就直接让模型完成。它是绝大多数日常对话的默认形态。
请把下面这句话翻译成英文:"今天天气真好,我们去公园散步吧。"
Zero-shot 简单、成本低,但在需要特定格式、特定风格或强推理的任务上不稳定——模型不知道你心里”标准答案”长什么样。
什么是 Few-shot
Few-shot(少样本)是在提示里塞进几个”输入—输出”范例,让模型从范例中隐式学习模式,无需微调。OpenAI 的提示工程指南把少样本列为核心战术之一:范例要覆盖多样化的输入,并展示理想输出。
任务:判断用户评论的情感,只输出 正面 / 负面 / 中性。
示例1
输入:物流很快,包装也结实,满意。
输出:正面
示例2
输入:客服半天不回消息,太失望了。
输出:负面
示例3
输入:订单已下单,等待发货。
输出:中性
现在请判断:
输入:屏幕有点偏色,但价格便宜,勉强接受。
输出:
经验法则:范例数量从 0 到 3~5 通常收益明显;再多要看任务复杂度,且会占用上下文与成本。范例的质量比数量更重要——一个格式混乱的范例会带歪后续输出。
思维链 Chain-of-Thought(CoT)
CoT 的原理
复杂问题(数学、逻辑、多步推理)的失败,常因为模型”直接跳到答案”。Chain-of-Thought(思维链)由 Jason Wei 等人在 2022 年的论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》提出:让模型在给出最终答案前,先输出一串中间推理步骤。论文表明,在足够大的模型上,仅用 8 个思维链范例就能在 GSM8K 数学题上取得显著提升。
直观类比:你让同事”算一下这个项目赚不赚钱”,他如果直接报一个数字你很难信;若他摊开草稿纸一步步算,你既能验证、正确率也更高。CoT 就是给模型一张草稿纸。
零样本 CoT 与少样本 CoT
- 少样本 CoT:在 Few-shot 范例里,每个范例都带完整推理过程。
- 零样本 CoT:不写范例,只在问题后加一句触发语,例如 “让我们一步一步思考。“(Let’s think step by step)。这是后续研究发现的极简技巧,对许多推理任务有效。
可复制示例
下面是一段可直接使用的少样本 CoT 提示:
你是一位严谨的数学老师。请先一步步推理,再写出"答案:"。
问题:小明有 5 个苹果,妈妈又给了他 3 个,吃掉 2 个后,还剩几个?
推理:
1. 一开始有 5 个苹果。
2. 妈妈给了 3 个,变成 5 + 3 = 8 个。
3. 吃掉 2 个,剩下 8 - 2 = 6 个。
答案:6 个
问题:一班有 12 名男生、9 名女生,转走 4 名男生后,全班还剩多少人?
推理:
零样本 CoT 更短:
请判断下面论证是否有效,并一步一步说明理由。
前提:所有猫都是动物。咪咪是猫。
结论:咪咪是动物。
让我们一步一步思考。
自洽性 Self-Consistency
Self-Consistency 由 Xuezhi Wang 等人在 2022 年论文《Self-Consistency Improves Chain of Thought Reasoning in Language Models》提出。它改进了 CoT 的解码方式:
- 不再”贪心”只走一条推理路径,而是采样多条不同的推理过程;
- 对每条路径得到的最终答案取多数票,选最一致的那个。
直觉:一道难题往往有多种解法,但正确答案通常唯一。多次采样后,错误答案会分散,正确答案会聚集。论文在 GSM8K 上相对普通 CoT 提升了约 17.9 个百分点。
工程实现上,你需要:在 API 调用中把 temperature 设成大于 0(如 0.7)以产生多样性,重复调用 N 次(如 5~10 次),解析每次的答案再做投票。下面是伪代码思路:
answers = []
for _ in range(8):
out = llm(prompt, temperature=0.7) # 每次采样一条带推理的回答
answers.append(extract_final_answer(out))
final = max(set(answers), key=answers.count) # 多数投票
注意:自洽性会成倍增加推理成本,适合对准确率要求高、且能接受延迟的场景(如自动判卷、财务核对)。
角色与人设提示
角色提示(Role prompting)给模型一个身份或视角,引导其语言风格与知识侧重。Anthropic 的提示工程最佳实践也将其列为常用技巧之一。
你是一名有 10 年经验的数据隐私律师,面向不懂技术的产品经理解释《个人信息保护法》。
请用通俗类比,避免堆砌法条编号,每段不超过 80 字。
角色提示的效果来自”锚定”:模型会调用与该角色一致的知识分布与语气。但它不是魔法——一个夸张的人设(“你是史上最聪明的 AI”)不会提升真实能力,反而可能让输出更啰嗦。
结构化输出:JSON / XML / 分步
当你要把模型输出接入程序,必须约束格式。常见三种手法:
| 手法 | 适用场景 | 示例标识 |
|---|---|---|
| JSON | 程序解析、字段明确 | 要求只输出合法 JSON,并给出 schema |
| XML 标签 | 长文分层、区隔多块内容 | 用 <summary>...</summary> 包裹 |
| 分步清单 | 人读、可审计的推理 | 用”第一步/第二步”编号 |
JSON 示例:
请从下面简历中抽取信息,只输出合法 JSON,不要任何解释。
字段:
- name: 姓名
- years: 工作年限(整数)
- skills: 技能数组
简历:张伟,5 年 Python 后端经验,熟悉 Django、PostgreSQL、Redis。
模型应输出:
{
"name": "张伟",
"years": 5,
"skills": ["Django", "PostgreSQL", "Redis"]
}
XML 示例(适合长文档分段):
请阅读下文,分别用标签输出三部分,不要输出标签外的内容。
<summary>一句话摘要</summary>
<risks>三条主要风险</risks>
<action>一条可执行建议</action>
约束与格式控制
把”要求”写成明确的约束清单,比一句”请规范一点”有效得多:
- 长度:每段不超过 N 字 / 总字数在 200~400 之间。
- 语气:客观、不夸张、不使用感叹号。
- 禁止项:不要编造数据、不要使用 emoji、不要输出推理过程。
- 边界:若问题超出你的知识范围,回答”无法确定”。
用 XML 或 Markdown 把约束分组,能显著提升遵从度(OpenAI 指南也建议用 Markdown/XML 组织提示结构)。
减少幻觉的提示策略
幻觉指模型生成看似合理但错误的信息。几条被工程广泛采用的对策:
- 明确告知”不知道”:直接写入”若资料不足,请明确说明你无法确定,不要猜测”。
- 提供参考文本(RAG):把可信资料放进提示,要求模型”仅依据以下资料回答”,并标注引用来源。OpenAI 提示工程指南将此作为核心战术。
- 要求给出出处:让模型每条结论附带来源,便于你核对。
- 分步骤 + 自检:用 CoT 让推理可见,再追加一步”请检查上述结论是否有相互矛盾之处”。
你只能依据下面提供的资料回答问题。如果资料中没有相关信息,请回答"资料未提及",严禁编造。
资料:
<context>
{此处粘贴你的原文}
</context>
问题:{用户问题}
请引用资料中的原句来支持你的每个结论。
小结
- Zero-shot 简单廉价,Few-shot 用范例隐式定义”标准答案”,范例质量比数量重要。
- 思维链(CoT, Wei 2022)让模型先推理再作答,是提升复杂任务正确率的关键技巧。
- 零样本 CoT 只需加一句”让我们一步一步思考”;少样本 CoT 在范例中展示完整推理。
- 自洽性(Wang 2022)通过多次采样 + 多数投票进一步提升准确率,代价是成本与延迟。
- 角色提示锚定风格与知识侧重;结构化输出(JSON/XML/分步)让模型结果可被程序消费。
- 减少幻觉的核心是把”不知道”写进提示、提供可信参考文本并要求注明出处。
参考来源
- OpenAI. Prompt engineering(官方提示工程指南). https://platform.openai.com/docs/guides/prompt-engineering
- Jason Wei 等. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. 2022. https://arxiv.org/abs/2201.11903
- Xuezhi Wang 等. Self-Consistency Improves Chain of Thought Reasoning in Language Models. 2022. https://arxiv.org/abs/2203.11171
- Anthropic. Prompt engineering overview(Claude 提示工程总览). https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview