Prompt Engineering
这条技术线最早的一层:管单条提示怎么写。
后面还有两层叠在它上面:Context Engineering 管一次调用的全部输入怎么组装,Harness Engineering 管工具、权限、验证、状态这些跨轮次生效的东西。三层不是互相替代——单步任务输出含糊改提示,答错方向缺背景调输入组装,多步任务反复崩溃说明问题根本不在提示这一层。完整的对比与诊断判据见 Harness 那篇。
对智能体来说,提示还多一层作用:多智能体之间的分工协作效率,直接由提示设计决定。
三层各管一段,不是互相替代。
┌─────────────────────────────────────────────────────────┐
│ Prompt Engineering 管单条提示怎么写 │
│ 样本数量 / 思维链 / 角色扮演 / 输出格式约束 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Context Engineering 管一次调用的全部输入怎么组装 │
│ 系统提示 / 历史 / 检索结果 / 工具定义 / 记忆 │
│ └─ 它们要抢同一个 token 预算 │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Harness Engineering 管跨轮次生效的东西 │
│ 工具 / 权限 / 验证 / 状态 │
└─────────────────────────────────────────────────────────┘
诊断判据 —— 哪一层出问题,看症状
单步任务输出含糊 ──▶ 改提示
答错方向、缺背景 ──▶ 调输入组装
多步任务反复崩溃 ──▶ 问题根本不在提示这一层
对智能体来说提示还多一层作用:多智能体之间的分工协作效率,
直接由提示设计决定。样本数量:零样本 / 单样本 / 少样本
按给模型提供示例(Exemplar)的数量划分。以情感分类为例:
零样本(Zero-shot) —— 不给任何示例,直接下指令。依赖预训练后的泛化能力。
文本:Datawhale的AI Agent课程非常棒!
情感:正面单样本(One-shot) —— 给一个完整的「问题-答案」对作示范,模型模仿格式补全新样本。
文本:这家餐厅的服务太慢了。
情感:负面
文本:Datawhale的AI Agent课程非常棒!
情感:少样本(Few-shot) —— 给多个示例,覆盖不同情况,帮助模型理解任务的细节、边界和细微差别。
样本数的收益不是线性的:该文里 CoT 用 8-shot;而 Zero-Shot CoT 证明了某些任务上零示例配一句触发语就能拿到大部分收益。
思维链:这一层最重要的一个发现
CoT(Chain-of-Thought) 的做法很朴素:在示例里不只给答案,还给出中间的推理步骤。原本是 (问题 → 答案),改成 (问题 → 分步推理 → 答案)。
Wei, J., et al. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903, NeurIPS 2022
为什么它有效:草稿纸机制
CoT 把一个多步预测转换成一连串更简单的「下一个 token」预测,每一步都以上一步的推理为条件。生成的文本充当「工作记忆」——模型把中间结果存进输出流,而不是依赖内部表示跨多层注意力去保持它们。
换成另一种说法:标准提示要求模型在固定的网络深度内完成从问题到答案的转换,这是一个瓶颈;CoT 把计算量摊到了生成的每个阶段(token-compute allocation)。
这是理解 CoT 全部性质的钥匙——包括它为什么在规模不够时反而有害(下面会讲)。
CoT 有效的原因:它把计算量摊到了生成的每一步。
标准提示(问题 → 答案)
问题
│
▼
┌───────────────────────────────────────────┐
│ 在固定的网络深度内完成全部转换 │
│ └─ 这是个瓶颈:层数定了,可用计算量就定了 │
└───────────────────────────────────────────┘
│
▼
答案
CoT(问题 → 分步推理 → 答案)
问题
│
▼
第 1 步「下一个 token」预测,以上一步的推理为条件
│
▼
第 2 步 …
│
▼
…
│
▼
答案
└─ 生成的文本充当「工作记忆」:模型把中间结果存进输出流,
而不必依赖内部表示跨多层注意力去保持它们
└─ 一个多步预测被转换成一连串更简单的「下一个 token」预测
这是理解 CoT 全部性质的钥匙 —— 包括它为什么在规模不够时反而有害:
推理链要求模型在生成的文本里做组合运算,既需要足够的语言能力,
也需要正确执行中间计算的能力。
规模不够时它写得像在推理,但算不对 —— 多出来的步骤只是多了出错的地方。原始数据(PaLM 540B,8-shot)
| 数据集 | 类型 | Standard | 8-shot CoT | 增益 |
|---|---|---|---|---|
| GSM8K | 数学 | 17.9% | 56.9% | +39 pp |
| SVAMP | 数学 | 69.4% | 79.0% | +9.6 pp |
| StrategyQA | 常识 | 68.6% | 77.8% | +9.2 pp |
| CommonsenseQA | 常识 | 78.1% | 79.9% | +1.8 pp |
| Last Letter | 符号,分布外 | 0.0% | 63.0% | +63 pp |
| Coin Flip | 符号,分布外 | 54.8% | 90.2% | +35.4 pp |
Last Letter 那条最能说明问题:0% → 63%。这是一个分布外的任务——说明 CoT 起作用是因为真的在按步骤算,而不是因为「见过类似的题」。
同时也看出收益极不均匀:GSM8K +39 pp,CommonsenseQA 只有 +1.8 pp。分类清晰、答案直接的任务获益有限。
8-shot CoT 的收益极不均匀(PaLM 540B)。
GSM8K(数学) 17.9 ──▶ 56.9 +39.0 pp
Last Letter(符号,分布外) 0.0 ──▶ 63.0 +63.0 pp ← 最能说明问题
Coin Flip(符号,分布外) 54.8 ──▶ 90.2 +35.4 pp
SVAMP(数学) 69.4 ──▶ 79.0 +9.6 pp
StrategyQA(常识) 68.6 ──▶ 77.8 +9.2 pp
CommonsenseQA(常识) 78.1 ──▶ 79.9 +1.8 pp
└─ 分类清晰、答案直接的任务获益有限
Last Letter 那条最能说明 CoT 的机制
0% → 63%。这是一个分布外的任务 —— 说明 CoT 起作用是因为真的在按步骤算,
而不是因为「见过类似的题」。
零样本 CoT:一句话的力量
MultiArith 17.7 ──▶ 78.7 +61 pp
GSM8K 10.4 ──▶ 40.7 +30 pp
AQuA-RAT 22.4 ──▶ 33.5 +11 pp
└─ 提示只是末尾追加一句 Let's think step by step.
结构化推理的潜在能力已经存在于预训练权重里、处于休眠状态,
需要一句指令偏置把它激活。Zero-Shot CoT:一句话的力量
Kojima et al. Large Language Models are Zero-Shot Reasoners. NeurIPS 2022
不加任何示例,只在提示末尾追加一句:
Q: [问题] A: Let's think step by step.| 数据集 | 零样本 | 零样本 CoT | 增益 |
|---|---|---|---|
| MultiArith | 17.7% | 78.7% | +61 pp |
| GSM8K | 10.4% | 40.7% | +30 pp |
| AQuA-RAT | 22.4% | 33.5% | +11 pp |
一句话,一个数量级。 这说明结构化推理的潜在能力已经存在于大模型的预训练权重里,只是处休眠状态,需要一句指令偏置把它激活。
Self-Consistency:用采样换准确率
Wang et al. Self-Consistency Improves Chain of Thought Reasoning. ICLR 2023
做法:采样 k 条独立推理路径,对最终答案做多数投票。
| 采样路径 k | GSM8K 准确率 | 算力成本 |
|---|---|---|
| 1 | 57.0% | 1× |
| 10 | 66.9% | 10× |
| 40 | 74.4% | 40× |
为什么多数投票有效:通向正确答案的推理路径不止一条,但错误推理产生的错误答案更发散——错的方式比对的路径多得多。所以正确答案会形成众数。
代价是线性的:40 条路径就是 40 倍推理算力。这是典型的「用推理期算力换准确率」,只在该任务值得的时候用。
Self-Consistency:准确率随采样数上升,但算力是线性涨。
准确率
│ ╭──── 74.4%(k = 40)
│ ╭───────────╯
│ ╭──────────╯ 66.9%(k = 10)
│ ╭──────╯
│ 57.0%(k = 1)
└──────────────────────────────────────▶ 采样路径 k
1 10 40
算力:1× 10× 40×
└─ 准确率是次线性的,算力是线性的 ——
典型的「用推理期算力换准确率」,只在该任务值得的时候用
为什么多数投票有效
通向正确答案的推理路径不止一条,但错误推理产生的错误答案更发散 ——
错的方式比对的路径多得多。
└─ 所以正确答案会形成众数规模依赖:低于阈值反而有害
这一条最容易被忽略:
| 模型规模 | CoT 在 GSM8K 上的收益 |
|---|---|
| ~350M | 负(CoT 比标准提示更差) |
| ~8B | 极小 / 可忽略 |
| ~62B | 小的正收益 |
| ~540B | 大(+39 pp) |
低于约 100B 参数时,CoT 一致地等于或劣于标准提示——模型会生成看似合理但错误的推理链。
用草稿纸机制解释得通:推理链要求模型在生成的文本里做组合运算,这既需要足够的语言能力,也需要正确执行中间计算的能力。规模不够时,它写得像在推理,但算不对——多出来的步骤只是多了出错的地方。
这条和 缩放法则 里的能力涌现是同一件事的两面。
同一条 CoT,换个模型规模就换个结论。
~350M 负收益 ← CoT 比标准提示更差
~8B 极小 / 可忽略
~62B 小的正收益
~540B 大(GSM8K 上 +39 pp)
└─ 低于约 100B 参数时,CoT 一致地等于或劣于标准提示 ——
模型会生成看似合理但错误的推理链
用草稿纸机制解释得通
推理链要求模型在生成的文本里做组合运算:既需要足够的语言能力,
也需要正确执行中间计算的能力。
规模不够时它写得像在推理,但算不对 —— 多出来的步骤只是多了出错的地方。
└─ 这一条和缩放法则里的能力涌现,是同一件事的两面
变体全景
Zero-Shot CoT 仅加一句触发语,无示例
Few-Shot CoT 2–3 个带推理步骤的示例,让模型模仿结构
Self-Consistency 采样多条路径 + 多数投票
Tree of Thoughts 把推理当作树而不是线,只展开高分分支
└─ 适合复杂规划与谜题
ReAct 推理 + 行动,think → act → observe → think again变体全景
| 变体 | 做法 |
|---|---|
| Zero-Shot CoT | 仅加一句触发语,无示例 |
| Few-Shot CoT | 2–3 个带推理步骤的示例,让模型模仿结构 |
| Self-Consistency | 采样多条路径 + 多数投票 |
| Tree of Thoughts | 把推理当作树而不是线,只展开高分分支——适合复杂规划与谜题 |
| ReAct | 推理 + 行动,think → act → observe → think again 循环,见 03-ReAct |
什么时候不该用 CoT
| 很有效 | 效果小(只增加延迟) |
|---|---|
| 数学、逻辑谜题、多步推理、复杂决策、代码调试 | 简单分类、情感分析、摘要、翻译——答案本来就是直接的 |
2026 年的变化:前沿模型已经自带 reasoning mode(OpenAI o1 系列、Claude 的 extended thinking),CoT 在模型内部自动跑,用户不再需要手写 CoT 提示。注意力从「怎么写 CoT」转向其他提升质量的提示技巧。
指令调优改变了提示的写法
早期的 GPT-3 是文本补全模型:擅长续写,但不一定能理解并执行指令。指令调优(Instruction Tuning) 是用大量「指令-回答」格式数据对预训练模型做进一步微调,调完之后模型能更好地理解并遵循指令。今天常用的 ChatGPT、DeepSeek、Qwen 都是各自家族里经过指令调优的版本。
这个差别直接体现在提示怎么写:
| 模型类型 | 提示写法 |
|---|---|
| 文本补全模型 | 必须用少样本「教会」模型做什么:这是一段将英文翻译成中文的程序。英文:Hello 中文:你好 英文:How are you? 中文: |
| 指令调优模型 | 可以直接下指令:请将下面的英文翻译成中文: How are you? |
所以「要不要给示例」这件事,答案取决于模型类型和任务本身,不是一个固定规则。 指令调优模型在简单任务上不需要示例,但复杂格式任务给示例仍然有效。
两个基础技巧
角色扮演(Role-playing) —— 赋予模型一个特定角色,引导它的回答风格、语气和知识范围:
你现在是一位资深的Python编程专家。请解释一下Python中的GIL(全局解释器锁)是什么,要让一个初学者也能听懂。上下文示例(In-context Example) —— 与少样本提示同源,在处理复杂格式或特定风格任务时特别有效。关键是把输出格式用示例钉死:
我需要你从产品评论中提取产品名称和用户情感。请严格按照下面的JSON格式输出。
评论:这款"星尘"笔记本电脑的屏幕显示效果惊人,但我不太喜欢它的键盘手感。
输出:{"product_name": "星尘笔记本电脑", "sentiment": "混合"}
评论:我刚买的"声动"耳机音质很棒,续航也超出了我的预期!
输出:CoT 的一个附带价值:可解释性
因为模型把逻辑路径外化到了输出流里,研究者可以定位推理链是在哪一点偏离了真相——是算术错误、幻觉事实,还是逻辑不一致。
这是 03-ReAct 那条「人可以中途编辑 thought 来引导 agent」的基础。 一个把推理藏在内部表示里的模型,没有可插入的观察点。
相关
- Context Engineering —— 叠在它上面的一层
- 04-采样参数 —— coT 输出变长后,采样参数对质量的影响被放大
- Plan-and-Solve —— PS / PS+ 本身是提示技巧,是 CoT 的直接改进
- 03-ReAct —— CoT 与行动循环的结合
- 上下文工程的工程实践 —— 系统提示与示例这两项工程做法的展开
参考
- 《Hello-Agents》第三章 §3.2.1
- Wei, J., et al. arXiv:2201.11903, NeurIPS 2022;整理见 https://ai.towerofrecords.com/ai/chain-of-thought 与 https://www.gradually.ai/en/ai-glossary/chain-of-thought-prompting/
- Kojima et al. arXiv:2201.11903 同期;https://inblog.io/glossary/chain-of-thought
- Wang et al. ICLR 2023;https://ai.towerofrecords.com/ai/chain-of-thought
- https://www.eulerfold.com/research-decoded/chain-of-thought-prompting
YJ