思维链(Chain-of-Thought)
思维链(Chain-of-Thought,CoT)提示是迄今为止最有效的 LLM 推理增强技术之一。通过引导模型在给出最终答案之前展示中间推理步骤,CoT 能够显著提升模型在数学计算、逻辑推理、多步骤问题解决等任务上的表现。
CoT 原理
直观上,CoT 模拟了人类在解决复杂问题时"打草稿"的思考过程。当你解一道复杂的数学题,你不会直接写出答案,而是在草稿纸上一步一步推导。CoT 让 LLM 做同样的事情。
为什么 CoT 有效?
从模型机制来看,Transformer 在单次前向传播中处理能力有限,难以在一步之内完成复杂的多步推理。展示推理链相当于给模型提供了更多"计算空间"(token 数量),让复杂推理分布在多个生成步骤中,每一步都可以利用之前的中间结果。
不使用 CoT:
问题 → [黑盒推理] → 答案
↑
模型需要在这里完成所有推理
使用 CoT:
问题 → 步骤1 → 步骤2 → 步骤3 → 答案
↑ ↑ ↑
每步都可以利用前面的中间结论
标准 CoT:在示例中包含推理链
原始 CoT 论文(Wei et al., 2022)通过在少样本示例中展示推理过程来激活模型的推理能力:
示例(few-shot CoT):
问:Roger 有 5 个网球。他又买了 2 罐网球,每罐 3 个。他现在共有多少个网球?
答:Roger 开始有 5 个网球。
2 罐 × 3 个/罐 = 6 个新网球。
5 + 6 = 11 个网球。
所以答案是 11 个。
问:餐厅有 23 位顾客。又来了 2 组,每组 5 人。有 7 人离开。现在有多少人?
答:餐厅开始有 23 位顾客。
新来 2 × 5 = 10 人,共有 23 + 10 = 33 人。
7 人离开后:33 - 7 = 26 人。
所以答案是 26 人。
问:[实际问题]
答:[模型将模仿上面的推理风格展示推理链]
通过看到示例中推理的形式,模型会在回答实际问题时自动模仿这种逐步推理的方式。
Zero-shot CoT:魔法短语
2022 年的另一项重要发现:只需在 Prompt 末尾加上特定短语,即可在无示例的情况下激活模型的 CoT 推理能力:
- 英文:
"Let's think step by step." - 中文等效:
"让我们一步步思考。"/"请逐步分析:"
不使用 CoT:
问:如果一个旅行者以 60km/h 的速度行驶 2.5 小时,然后以 80km/h 再行驶 1.5 小时,
总行驶距离是多少?
答:230 km(有时错误,直接给结果)
使用 Zero-shot CoT:
问:[同样的问题] 让我们一步步思考。
答:第一段路程:60 km/h × 2.5 h = 150 km
第二段路程:80 km/h × 1.5 h = 120 km
总距离:150 + 120 = 270 km
所以答案是 270 km。(正确)
这个简单的技巧在 GSM8K(小学数学题)基准上可以将正确率从约 10% 提升至 40-50%(对于当时的模型)。
Self-Consistency:多路采样取最优
Self-Consistency(Wang et al., 2022)是 CoT 的重要增强:
原理:同一个问题生成多条推理链(通过随机采样,温度参数 > 0),对最终答案进行多数投票。
import anthropic
client = anthropic.Anthropic()
question = "逻辑题:A 比 B 高,C 比 A 矮,D 比 C 高但比 A 矮,请排出从高到低的顺序。让我们一步步思考。"
# 生成多条推理链
answers = []
for _ in range(5):
response = client.messages.create(
model="claude-opus-4-6",
max_tokens=500,
temperature=0.7, # 增加多样性
messages=[{"role": "user", "content": question}]
)
answers.append(response.content[0].text)
# 从每条推理链提取最终答案,进行多数投票
# 出现次数最多的答案被选为最终结果
Self-Consistency 相比单次 CoT 通常能额外提升 5-15% 的准确率,代价是多倍的 API 调用成本。
Tree of Thoughts(ToT):树状推理
Tree of Thoughts(Yao et al., 2023) 将 CoT 从线性推理链扩展为树状搜索:
- 在每个推理步骤,生成多个候选延续(树的分支)
- 使用 LLM 对每个候选分支进行评估/剪枝
- 用 BFS 或 DFS 探索推理树,找到最优路径
问题
├── 思路A
│ ├── A→1(无效,剪枝)
│ └── A→2 → A→2→α → 答案(找到!)
└── 思路B
├── B→1
└── B→2(评估分低,剪枝)
ToT 在需要计划和探索的任务(如 24 点游戏、创意写作规划)上效果显著,但计算成本更高。
内化 CoT:o1 模型的推理模式
OpenAI 的 o1 系列模型(2024)代表了 CoT 的最新演进:内化推理(Internal Chain-of-Thought)。
传统 CoT 是用户在 Prompt 中要求展示推理过程,o1 则通过强化学习训练模型在生成最终回复前自动进行大量内部推理("思考 token"),用户看不到这些内部推理过程,但模型的推理准确性大幅提升。
- o1 在 AIME(美国数学邀请赛)上达到 74% 正确率(此前 GPT-4o 约 12%)
- 每个问题花费数秒到数分钟进行内部推理
- 推理 token 不计入上下文窗口限制,但计入账单
Claude 的**扩展思考(Extended Thinking)**模式是 Anthropic 的类似功能,在复杂问题上显示出同等甚至更强的推理能力。
CoT 对各类任务的提升效果
| 任务类型 | CoT 提升程度 | 适用性 |
|---|---|---|
| 多步数学题(小学/初中级别) | 极大(10% → 50%+) | 高度适用 |
| 逻辑推理(演绎/归纳) | 大 | 高度适用 |
| 代码调试(Bug 定位) | 中等 | 适用 |
| 常识推理 | 中等 | 适用 |
| 简单分类/情感分析 | 几乎无帮助 | 不适用 |
| 翻译 | 几乎无帮助 | 不适用 |
| 事实问答 | 小(知识型问题无法靠推理弥补) | 有限适用 |
关键洞察:CoT 对需要多步推理的任务帮助显著,对只需召回知识的任务帮助有限,对简单任务甚至可能引入冗余、降低效率。
实践建议
- 推理类任务:始终开启 CoT,使用"让我们一步步思考"或直接要求展示推理过程
- 生产环境:权衡 CoT 的精度提升与额外 token 成本(CoT 通常增加 2-5 倍输出 token)
- 复杂问题:考虑 Self-Consistency(5-10 次采样投票)以进一步提升可靠性
- o1/Extended Thinking:对最复杂的推理任务(竞赛数学、复杂代码分析)使用推理模型,成本更高但效果最好