3.2 Chain-of-Thought
CoT、Zero-shot CoT、Self-Consistency、Program-of-Thoughts,以及 CoT 何时失效
CoT 的核心直觉
链式思维(Chain-of-Thought, CoT)提示(Wei et al., NeurIPS 2022)是提示工程中影响最深远的单项进展。它的核心操作极其简单——在 Few-shot 示例里,不再只给输入-输出,而是把"中间推理步骤"也写出来。
形式上,标准 ICL 估计的是:
而 CoT 把每个示例扩展为三元组 ,其中 是推理过程,于是模型在解码时会先生成推理链 、再生成答案 :
结果是戏剧性的:540B PaLM 仅用 8 个 CoT 示例就在 GSM8K 上达到当时 SOTA,超过监督微调模型。
涌现特性(Emergence):CoT 的收益只在 ~100B+ 参数模型上显著出现。对小模型(<10B),CoT 往往起反作用——模型把思路写长了反而增加错误概率。
从 Few-shot CoT 到 Zero-shot CoT
Kojima et al.(NeurIPS 2022)给出了更简化的版本:只需在提问后附加一句 "Let's think step by step."(让我们一步步想),就能在零样本下触发推理链。
| 任务 | 标准 Zero-shot | Zero-shot CoT |
|---|---|---|
| MultiArith | 17.7% | 78.7% |
| GSM8K | 10.4% | 40.7% |
| AQuA | 22.4% | 33.5% |
这句"魔咒"本身后来也被自动化方法超越——APE(Zhou et al., ICLR 2023)发现的 "Let's work this out in a step by step way to be sure we have the right answer" 把 GSM8K 从 78.7% 继续推到了 82.0%。
一个"让 LLM 解数学题"的 Before / After
Prompt:
小明有 15 个苹果,给了小红 1/3,然后又买了原来数量的一半,
最后又送了 2 个给老师。请问他现在有几个苹果?
Output:
答案是 11 个。 ← 错(正确答案 15.5,因为半个苹果不合理,题本身有陷阱)没有中间步骤,模型把心算和输出混在一起,错了也没法定位。
Prompt:
小明有 15 个苹果,给了小红 1/3,然后又买了原来数量的一半,
最后又送了 2 个给老师。请问他现在有几个苹果?
Let's think step by step.
Output:
1. 原本 15 个。
2. 给小红 1/3 = 5 个,剩下 15 - 5 = 10 个。
3. "原来数量的一半" = 15/2 = 7.5 个。由于苹果不能是半个,
这里应理解为 7 个(取整),于是 10 + 7 = 17 个。
4. 送了 2 个给老师,17 - 2 = 15 个。
答案:15 个。 ← 正确(并且暴露了题目语义歧义)中间步骤让错误可审计,也让模型自己发现歧义。
Prompt:
问:小红有 5 个苹果,吃了 2 个,又买了 3 个,现在有几个?
答:原来 5 个,吃了 2 个剩 3 个,买 3 个变成 6 个。答案:6 个。
问:小明有 15 个苹果,给了小红 1/3,然后又买了原来数量的一半,
最后又送了 2 个给老师。请问他现在有几个苹果?
答:Few-shot CoT 通过示例显式"教会"模型推理格式,在结构化程度更高的任务(BIG-Bench Hard、MATH)上通常比 Zero-shot CoT 更稳定。
Self-Consistency:多路推理 + 多数投票
自一致性(Self-Consistency)(Wang et al., ICLR 2023)的直觉极其朴素——一道数学题往往有多条正确推理路径,但正确答案只有一个。
算法:
- 对同一个 CoT prompt,使用较高温度(如 )采样 条推理链
- 从每条链中抽取答案
- 取 众数(majority voting)作为最终答案
收益也很显著:相对标准 CoT,GSM8K +17.9%、SVAMP +11.0%、AQuA +12.2%。
Self-Consistency 成本 = 倍推理开销。工程上常用 ,并结合提前停止(如果前 5 条里已有 4 条同意就直接返回)。
Program-of-Thoughts:把计算外包给解释器
纯自然语言推理有一个硬伤:LLM 的算术能力脆弱。GSM-Hard(在 GSM8K 基础上把数字换大)上,标准 CoT 的准确率会断崖式下跌。
Program-of-Thoughts(PoT) / Program-aided Language Models(PAL)(Gao et al., ICML 2023;Chen et al., TMLR 2023)的解法是:
让 LLM 生成 Python 代码作为"推理步骤",计算由解释器完成。效果:在 GSM-Hard 上 PAL 比 CoT 绝对高 40%。
# PoT 风格的 Prompt 示例
question = "一个游泳池每小时进水 50 升, 漏水 12 升. 800 升要多久?"
# LLM 生成的 Python:
inflow_per_hour = 50
leak_per_hour = 12
net = inflow_per_hour - leak_per_hour
target = 800
hours = target / net
print(hours) # 21.05CoT 何时失效
CoT 不是万能钥匙。以下是几类已知的失效模式:
| 失效场景 | 原因 | 补救 |
|---|---|---|
| 小模型(<10B) | 推理链长反而累积错误 | 蒸馏或用 PoT 外包计算 |
| 强推理模型(o1/R1/QwQ) | 已内化 CoT,额外 prompt 收益递减 | 直接用,不要画蛇添足 |
| 纯检索/分类任务 | 不需要多步推理,CoT 引入噪声 | 用 Zero-shot 或 Few-shot |
| 长上下文干扰 | 推理链挤占了上下文预算 | 用外部草稿区(Scratchpad)或 Agent 的 short-term memory |
| 算术/精确计算 | LLM 的数字 token 化不稳 | 切换到 PoT / PAL |
Meincke et al.(2025, Wharton)的最新研究明确指出:CoT 对专用推理模型的边际收益正在递减,暗示推理能力正在从"提示驱动"转向"训练驱动"。这也是第 3.4 节 DSPy 强调"把 prompt 当程序优化"而非"手工做 prompt 技巧"的背景。
本节小结
- CoT = Few-shot 示例里加入中间推理,在 ≥100B 模型上涌现
- Zero-shot CoT = "Let's think step by step",成本为零却收益巨大
- Self-Consistency = 多次采样 + 多数投票,成本换准确率
- PoT/PAL = 把计算外包给 Python 解释器,数值任务首选
- 失效场景要心中有数——对推理模型和简单任务,CoT 可能反向拖累