mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
486 字
1 分钟
Chain of Thought:让大模型学会推理
2025-09-02

2022 年,Google 团队发表了一篇看似简单却影响深远的论文。

标题是:《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》

核心思想简洁得惊人:让模型在给出最终答案前,先展示中间推理步骤。

这个简单的方法,让大模型在复杂推理任务上的表现提升了数倍。它揭示了一个重要事实——大模型具备推理能力,只是需要正确的引导方式。

Chain of Thought(思维链)改变了人与大模型交互的方式。

本文要点#

  • CoT 论文背景与动机
  • 标准 Prompting vs CoT Prompting
  • 三类推理任务实验
  • 模型规模与 CoT 效果
  • CoT 的适用场景
  • 后续发展与影响

一、论文背景#

1.1 研究动机#

flowchart TB subgraph CoT想要解决的问题 A[大模型的困境] A --> A1[擅长模式匹配,不擅长推理] A --> A2[复杂任务上表现不佳] A --> A3[Few-Shot 示例不够有效] B[传统方法的局限] B --> B1[直接给出答案的 Few-Shot] B --> B2[问题 → 答案的直接映射] B --> B3[缺乏中间推理过程] C[灵感来源] C --> C1[人类解决问题时会写下中间步骤] C --> C2[逐步推理比跳跃更可靠] C --> C3[为什么不让模型也这样做?] D[CoT 的解决方案] D --> D1[让模型生成中间推理步骤] D --> D2[逐步推导最终答案] D --> D3[通过示例教会模型这种能力] end

1.2 论文信息#

论文:Chain-of-Thought Prompting Elicits Reasoning
in Large Language Models
作者:Jason Wei, Xuezhi Wang, Dale Schuurmans,
Maarten Bosma, Brian Ichter, Fei Xia,
Ed H. Chi, Quoc V. Le, Denny Zhou
机构:Google Research
发表:NeurIPS 2022
引用:10000+ 次

二、标准 Prompting vs CoT Prompting#

2.1 核心对比#

flowchart TB subgraph 标准 Prompting A1["问题: Roger 有 5 个网球,他又买了 2 罐,每罐 3 个,共有多少?"] --> B1["示例: Q: 有 2 个苹果,买 3 个,共几个? A: 5"] B1 --> C1["模型输出: 11"] end subgraph CoT Prompting A2["问题: Roger 有 5 个网球,他又买了 2 罐,每罐 3 个,共有多少?"] --> B2["示例: Q: 有 2 个苹果,买 3 个,共几个?"] B2 --> D2["A: 原有 2 个苹果,买了 3 个,2+3=5,答案是 5"] D2 --> C2["模型输出: Roger 原有 5 个网球,买了 2 罐每罐 3 个,2×3=6,5+6=11,答案是 11"] end style C1 fill:#f44336,color:#fff style C2 fill:#4caf50,color:#fff

2.2 数学问题示例#

flowchart TB subgraph 标准vsCoT对比 A[标准 Prompting 示例] A --> A1["问题:一个篮子里有 8 个苹果,小明拿走了 3 个,小红又放进了 5 个,篮子里现在有多少个苹果?"] A --> A2["Few-Shot 示例:Q: 有 10 个橘子,吃了 4 个,还剩几个? A: 6"] A --> A3["模型输出:10 (错误!模型直接猜测答案,没有正确计算)"] B[CoT Prompting 示例] B --> B1["问题:一个篮子里有 8 个苹果,小明拿走了 3 个,小红又放进了 5 个,篮子里现在有多少个苹果?"] B --> B2["CoT 示例:Q: 有 10 个橘子,吃了 4 个,还剩几个? A: 原有 10 个橘子,吃了 4 个。10 - 4 = 6。答案是 6。"] B --> B3["模型输出:A: 篮子里原有 8 个苹果。小明拿走了 3 个,8 - 3 = 5 个。小红又放进了 5 个,5 + 5 = 10 个。答案是 10。(正确!)"] end

2.3 代码示例#

# 标准 Few-Shot Prompting
standard_prompt = """
Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now?
A: 11
Q: The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?
A:
"""
# Chain of Thought Prompting
cot_prompt = """
Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now?
A: Roger started with 5 balls. 2 cans of 3 balls each is 6 balls. 5 + 6 = 11. The answer is 11.
Q: The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?
A:
"""
# CoT 模型输出会包含推理步骤:
# "The cafeteria started with 23 apples. They used 20, so 23 - 20 = 3 apples left.
# Then they bought 6 more. 3 + 6 = 9. The answer is 9."

三、三类推理任务实验#

3.1 算术推理#

xychart-beta title "GSM8K 数学应用题准确率" x-axis ["GPT-3", "PaLM 62B", "PaLM 540B 标准", "PaLM 540B CoT"] y-axis "准确率 %" 0 --> 60 bar [15, 17, 18, 57]
flowchart TB subgraph 算术推理任务结果 A[GSM8K(小学数学应用题)] A --> A1["PaLM 540B 标准提示:17.9%"] A --> A2["PaLM 540B CoT 提示:57.9%"] A --> A3["提升:+40% 绝对提升!"] B[MAWPS(数学应用题)] B --> B1["标准提示:35.4%"] B --> B2["CoT 提示:78.1%"] B --> B3["提升:+42.7%"] C[AQuA(代数应用题)] C --> C1["标准提示:23.9%"] C --> C2["CoT 提示:35.8%"] C --> C3["提升:+11.9%"] D[SVAMP(简单数学问题)] D --> D1["标准提示:66.6%"] D --> D2["CoT 提示:79.0%"] D --> D3["提升:+12.4%"] E[关键发现] E --> E1[复杂任务提升更显著] E --> E2[简单任务提升有限] E --> E3[证明推理步骤的重要性] end

3.2 常识推理#

flowchart TB subgraph 常识推理任务示例 A["问题:小明想买一本书,但他没有足够的钱。他应该怎么做?"] B[标准 Prompting 输出] B --> B1["A: 他应该等有钱再买。(过于简单,缺乏推理)"] C[CoT Prompting 输出] C --> C1["A: 小明想买书但没有足够的钱。"] C --> C2["有几种可能的解决方案:"] C --> C3["1. 他可以攒钱,等够钱再买"] C --> C4["2. 他可以借书或去图书馆"] C --> C5["3. 他可以找更便宜的版本"] C --> C6["4. 他可以询问是否有折扣"] C --> C7["最实际的做法是先考虑图书馆借阅或攒钱。"] D[CommonsenseQA 结果] D --> D1["标准提示:73.0%"] D --> D2["CoT 提示:75.2%"] D --> D3["提升:+2.2%"] end

3.3 符号推理#

flowchart TB subgraph 符号推理任务示例 A[任务:字母排序] A --> A1["问题:请按字母顺序排列以下字母:D, A, C, B"] B[标准 Prompting] B --> B1["A: A B C D(可能正确,但过程不透明)"] C[CoT Prompting] C --> C1["A: 我需要将这些字母按字母表顺序排列。"] C --> C2["字母表顺序是 A, B, C, D, E..."] C --> C3["检查每个字母的位置:"] C --> C4["- A 是第一个"] C --> C5["- B 是第二个"] C --> C6["- C 是第三个"] C --> C7["- D 是第四个"] C --> C8["所以正确顺序是 A, B, C, D。"] D[符号推理任务结果] D --> D1["4 个字母排序:标准 16% vs CoT 100%"] D --> D2["5 个字母排序:标准 7% vs CoT 95%"] D --> D3["任务越复杂,CoT 优势越大"] end

四、模型规模与 CoT 效果#

4.1 缩放特性#

xychart-beta title "不同模型规模下 CoT 的效果(GSM8K)" x-axis ["8B", "62B", "540B"] y-axis "准确率 %" 0 --> 60 line [5, 15, 18] line [7, 35, 57]
flowchart TB subgraph CoT的缩放特性 A[8B 模型] A --> A1["标准 Prompt: 5.2%"] A --> A2["CoT Prompt: 7.0%"] A --> A3["提升: +1.8%"] B[62B 模型] B --> B1["标准 Prompt: 15.6%"] B --> B2["CoT Prompt: 36.8%"] B --> B3["提升: +21.2%"] C[540B 模型] C --> C1["标准 Prompt: 17.9%"] C --> C2["CoT Prompt: 57.9%"] C --> C3["提升: +40.0%"] D[关键发现] D --> D1[小模型上 CoT 效果不明显] D1 --> D1a[8B 模型几乎没有提升] D1 --> D1b[模型需要足够的容量来学习推理模式] D --> D2[大模型上 CoT 效果显著] D2 --> D2a[540B 提升最大] D2 --> D2b[模型越大,推理能力越强] D --> D3[涌现特性] D3 --> D3a[CoT 能力在约 100B 参数后涌现] D3 --> D3b[与模型的其他涌现能力一致] end

4.2 为什么大模型更受益?#

flowchart TB subgraph 大模型与CoT的协同效应 A[模式识别能力] A --> A1[大模型能更好地识别推理模式] A --> A2[从示例中学习更有效] B[上下文学习能力] B --> B1[大模型有更强的上下文学习能力] B --> B2[能够遵循长推理链] C[知识储备] C --> C1[大模型有更丰富的知识] C --> C2[支撑推理过程] D[自我纠错能力] D --> D1[在推理过程中发现错误] D --> D2[大模型更有可能自我纠正] E[结论] E --> E1["CoT 是「解锁」大模型推理能力的钥匙"] end

五、CoT 的适用场景#

5.1 适用场景#

flowchart TB subgraph CoT适用场景 A[适合 CoT 的任务] A --> B[复杂推理] B --> B1[数学应用题] B --> B2[逻辑推理] B --> B3[多步骤问题] A --> C[需要中间验证] C --> C1[计算密集型任务] C --> C2[需要检查中间结果] A --> D[开放式问题] D --> D1[需要详细解释] D --> D2[答案不唯一] A --> E[知识密集型] E --> E1[需要调用多方面知识] E --> E2[需要综合分析] end

5.2 不适用场景#

flowchart TB subgraph CoT不适用场景 A[不适合 CoT 的任务] A --> B[简单任务] B --> B1[单步计算] B --> B2[简单分类] B --> B3[CoT 反而增加延迟] A --> C[模式识别] C --> C1[图像分类] C --> C2[情感分析] C --> C3[不需要推理] A --> D[事实检索] D --> D1[简单问答] D --> D2[知识查询] D --> D3[直接回答更高效] A --> E[小模型] E --> E1[模型能力不足] E --> E2[CoT 效果有限] end

5.3 任务复杂度与 CoT 效果#

flowchart TB A[任务复杂度] --> B{判断} B -->|简单| C["标准 Prompting<br/>更快、更高效"] B -->|中等| D["根据情况选择<br/>可尝试 CoT"] B -->|复杂| E["CoT Prompting<br/>显著提升效果"] F["经验法则:"] --> G["需要 3 步以上推理 → 用 CoT"]

六、CoT 的变体与改进#

6.1 Zero-Shot CoT#

flowchart TB subgraph Zero-Shot CoT A[核心思想] A --> A1[不需要示例,直接在问题后加「Let's think step by step」] B[示例] B --> B1["Q: Roger has 5 tennis balls..."] B --> B2["A: Let's think step by step."] B --> B3[模型输出会自动开始推理] C[优势] C --> C1[无需构造示例] C --> C2[更灵活,适用于各种任务] C --> C3[论文:Kojima et al. 2022] D[效果] D --> D1["GSM8K:从 17% 提升到 40%"] D --> D2[不如 Few-Shot CoT,但远好于标准提示] end

6.2 自动 CoT#

# Auto-CoT: 自动生成推理链示例
def auto_cot(question, model, num_examples=3):
"""
自动生成 CoT 示例
思路:
1. 从问题库中检索相似问题
2. 使用 Zero-Shot CoT 生成推理链
3. 组合成 Few-Shot 提示
"""
# 1. 检索相似问题
similar_questions = retrieve_similar(question, k=num_examples)
# 2. 为每个相似问题生成推理链
cot_examples = []
for q in similar_questions:
reasoning = model.generate(
f"Q: {q}\nA: Let's think step by step."
)
cot_examples.append(f"Q: {q}\nA: {reasoning}")
# 3. 组合成最终提示
prompt = "\n\n".join(cot_examples)
prompt += f"\n\nQ: {question}\nA:"
return prompt

6.3 Self-Consistency#

flowchart TB A[问题] --> B[生成多条推理路径] B --> C["推理路径 1 → 答案 A"] B --> D["推理路径 2 → 答案 A"] B --> E["推理路径 3 → 答案 B"] B --> F["推理路径 4 → 答案 A"] C --> G[投票] D --> G E --> G F --> G G --> H["多数答案:A"] style H fill:#4caf50,color:#fff

七、CoT 与推理模型的关系#

7.1 从 CoT 到 o1#

flowchart TB subgraph CoT到推理模型的演进 A[2022:CoT 提示] A --> A1[通过示例引导模型生成推理步骤] A --> A2[需要人工设计示例] B[2022-2023:Zero-Shot CoT] B --> B1[无需示例,直接提示「逐步思考」] B --> B2[更简单但效果略逊] C[2023:Self-Consistency] C --> C1[多路径推理 + 投票] C --> C2[提高可靠性] D[2024:OpenAI o1] D --> D1[内部自动生成推理链] D --> D2[通过 RLVR 训练] D --> D3[推理能力飞跃] E[演进逻辑] E --> E1["从「提示引导推理」 → 「自动推理」 → 「强化学习训练推理」"] end

7.2 CoT 的核心价值#

flowchart TB subgraph CoT最重要的贡献 A[发现推理能力] A --> A1[证明大模型具备推理能力] A --> A2[只是需要正确的引导方式] B[交互范式转变] B --> B1[从「直接问答」到「推理过程」] B --> B2[可解释性大幅提升] C[开启研究热潮] C --> C1[推理能力成为研究热点] C --> C2[导致推理模型的诞生] D[实用价值] D --> D1[简单有效,易于使用] D --> D2[立即可用,无需训练] end

小结#

Chain of Thought 论文揭示了大模型推理能力的「开关」——通过展示推理步骤的示例,可以让模型学会逐步推理。

核心贡献:

flowchart TB subgraph CoT核心总结 A[简单有效] --> A1[只需添加推理步骤示例] B[显著提升] --> B1[复杂推理任务准确率翻倍] C[缩放特性] --> C1[模型越大,效果越好] D[可解释性] --> D1[推理过程透明可见] E[影响深远] --> E1[开启推理模型研究热潮] end

CoT 让大模型从「直觉回答」进化到「推理思考」。


参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

Chain of Thought:让大模型学会推理
https://blog.souloss.com/posts/machine-learning/llm-paper-history/cot-reasoning-enhancement/
作者
Souloss
发布于
2025-09-02
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时