Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

用“先写中间推理步骤”的提示方式显著提升复杂推理任务表现,让 prompt 从输入模板升级为推理激活器。

年份与会议

2022 · NeurIPS

作者

Jason Wei、Xuezhi Wang、Dale Schuurmans、Maarten Bosma、et al.

主题

Prompting

阅读时长

约 4 分钟

收录时间

2022/01/28

标签

原文链接

https://arxiv.org/abs/2201.11903

为什么 CoT 会成为提示工程史上的里程碑

在 Chain-of-Thought 之前,很多人对 prompt 的理解还停留在“把任务说清楚、给几个例子”这一层。CoT 论文改变的地方在于,它提出了一种更深的判断:

prompt 不只是告诉模型“做什么”,还可以诱导模型“怎么想”。

这件事之所以重要,是因为很多复杂任务并不是知识缺失,而是需要中间推理过程,例如:

  • 数学应用题
  • 逻辑推理
  • 多步常识推断
  • 组合判断

CoT 的贡献,就是证明了只要 prompt 中示范了中间推理步骤,大模型在这类任务上的表现可能明显提升。

背景:为什么标准 few-shot 提示还不够

GPT-3 之后,社区已经知道 few-shot prompting 很有力量,但也很快发现一个问题:

  • 对简单分类、翻译或风格转换,few-shot 往往足够。
  • 对需要多步推理的任务,模型即使看过几个输入输出样例,也可能直接跳到错误答案。

原因通常不是模型完全不知道答案,而是它没有被引导去显式展开中间步骤。对很多推理任务来说,“中间过程”本身就是重要结构,而不是可省略噪声。

CoT 论文就是在这个背景下出现的。它问的是:如果示例里不只给答案,还给出一步步思路,会发生什么?

核心方法:在示例里写出推理链条

Chain-of-Thought prompting 的做法非常朴素:

  1. 给模型若干个示例。
  2. 每个示例不只是“问题 -> 答案”,而是“问题 -> 推理过程 -> 答案”。
  3. 让模型在新问题上也仿照这种格式展开推理。

例如不是只写:

问题:... 答案:42

而是写成:

问题:... 先分析条件 A,再结合条件 B,得到中间结论 C,因此答案是 42。

正是这类中间步骤,让模型更容易进入“逐步推”的工作模式。

为什么这种简单方法会有效

CoT 看起来非常简单,但有效性背后有几层值得理解的原因:

1. 推理过程被显式化

很多复杂任务不是不会,而是需要把隐含步骤展开。CoT 让模型把这些步骤外显出来。

2. 输出空间被重新组织

原来模型直接在“所有可能答案”里跳,现在它先生成一条结构化过程,再落到最终答案,搜索空间更有引导。

3. 大模型本身已经蕴含推理片段

随着规模变大,模型在预训练里见过大量带解释、带步骤的文本。CoT 更像是在把这部分潜力激活出来,而不是凭空创造新能力。

这也是为什么 CoT 往往在较大模型上更明显,而不是在小模型上都一样强。

如果把 CoT 放在一条演化线上看,它最有价值的地方其实是把“直接答题”升级成了“先展开过程,再决定答案”:

直接回答、Chain-of-Thought 与 Self-Consistency 对比图 左侧是直接从问题到答案,中间是单条思维链再到答案,右侧是多条思维链并行采样后投票得到最终答案,展示推理显式化与后续增强路径。 CoT 的意义在于把“隐含推理”变成了提示层可操控的结构
  <g>
    <rect x="36" y="84" width="260" height="236" rx="24" fill="#f6f9ff" stroke="#d7e2f1" />
    <text x="66" y="118" font-size="20" font-weight="700">直接回答</text>
    <rect x="76" y="142" width="178" height="58" rx="16" fill="#e8f1ff" stroke="#98b7e1" />
    <text x="165" y="177" text-anchor="middle" font-size="18" font-weight="700">问题</text>
    <line x1="165" y1="200" x2="165" y2="238" stroke="#5b6b7f" stroke-width="3" marker-end="url(#cot-arrow)" />
    <rect x="76" y="246" width="178" height="58" rx="16" fill="#fce7ef" stroke="#e2a8bd" />
    <text x="165" y="281" text-anchor="middle" font-size="18" font-weight="700">直接给答案</text>
    <text x="66" y="308" font-size="13" fill="#4b5563">优点:短、快</text>
    <text x="66" y="327" font-size="13" fill="#4b5563">风险:复杂题容易跳步或猜错</text>
  </g>

  <g>
    <rect x="328" y="84" width="286" height="236" rx="24" fill="#f8fbf4" stroke="#d5e4c6" />
    <text x="358" y="118" font-size="20" font-weight="700">Chain-of-Thought</text>
    <rect x="364" y="142" width="186" height="46" rx="14" fill="#e8f1ff" stroke="#98b7e1" />
    <text x="457" y="170" text-anchor="middle" font-size="18" font-weight="700">问题</text>
    <line x1="457" y1="188" x2="457" y2="214" stroke="#5b6b7f" stroke-width="3" marker-end="url(#cot-arrow)" />
    <rect x="364" y="222" width="214" height="64" rx="16" fill="#eef6e8" stroke="#a8c48e" />
    <text x="471" y="249" text-anchor="middle" font-size="18" font-weight="700">显式推理链</text>
    <text x="471" y="271" text-anchor="middle" font-size="13" fill="#4b5563">分解条件 -> 中间结论 -> 最终判断</text>
    <line x1="471" y1="286" x2="471" y2="302" stroke="#5b6b7f" stroke-width="3" marker-end="url(#cot-arrow)" />
    <rect x="400" y="300" width="142" height="40" rx="14" fill="#fff4dc" stroke="#e2c36f" />
    <text x="471" y="325" text-anchor="middle" font-size="17" font-weight="700">答案</text>
  </g>

  <g>
    <rect x="646" y="84" width="298" height="236" rx="24" fill="#fff8ef" stroke="#eed6a0" />
    <text x="676" y="118" font-size="20" font-weight="700">Self-Consistency</text>
    <rect x="678" y="142" width="160" height="46" rx="14" fill="#e8f1ff" stroke="#98b7e1" />
    <text x="758" y="170" text-anchor="middle" font-size="18" font-weight="700">同一个问题</text>
    <g>
      <rect x="674" y="212" width="80" height="42" rx="12" fill="#eef6e8" stroke="#a8c48e" />
      <text x="714" y="237" text-anchor="middle" font-size="14" font-weight="700">链路 A</text>
      <rect x="770" y="212" width="80" height="42" rx="12" fill="#eef6e8" stroke="#a8c48e" />
      <text x="810" y="237" text-anchor="middle" font-size="14" font-weight="700">链路 B</text>
      <rect x="866" y="212" width="58" height="42" rx="12" fill="#eef6e8" stroke="#a8c48e" />
      <text x="895" y="237" text-anchor="middle" font-size="14" font-weight="700">...</text>
    </g>
    <line x1="758" y1="188" x2="714" y2="212" stroke="#5b6b7f" stroke-width="2.5" marker-end="url(#cot-arrow)" />
    <line x1="758" y1="188" x2="810" y2="212" stroke="#5b6b7f" stroke-width="2.5" marker-end="url(#cot-arrow)" />
    <line x1="758" y1="188" x2="895" y2="212" stroke="#5b6b7f" stroke-width="2.5" marker-end="url(#cot-arrow)" />
    <line x1="714" y1="254" x2="804" y2="292" stroke="#5b6b7f" stroke-width="2.5" marker-end="url(#cot-arrow)" />
    <line x1="810" y1="254" x2="804" y2="292" stroke="#5b6b7f" stroke-width="2.5" marker-end="url(#cot-arrow)" />
    <line x1="895" y1="254" x2="804" y2="292" stroke="#5b6b7f" stroke-width="2.5" marker-end="url(#cot-arrow)" />
    <rect x="734" y="292" width="140" height="40" rx="14" fill="#fff4dc" stroke="#e2c36f" />
    <text x="804" y="317" text-anchor="middle" font-size="17" font-weight="700">投票后答案</text>
  </g>
</g>
CoT 本身先解决“要不要把推理过程写出来”,而 self-consistency 再进一步解决“单条推理链不一定可靠”。

论文最重要的发现:规模是前提之一

CoT 论文有一个很重要、也经常被忽略的结论:

它并不是说“任何模型只要写思维链都会变强”,而是更接近:

当模型规模足够大时,给出链式推理示例会显著提升复杂推理能力。

这说明 CoT 与 GPT-3 路线是强相关的。它并不是孤立提示技巧,而是大模型规模化之后一种非常自然的能力触发方式。

换句话说,CoT 不是替代规模,而是在规模出现后,成为能力释放接口。

为什么 CoT 对产品和研究都重要

对产品来说,CoT 的价值是:

  • 很多复杂问题不一定要重新训练模型,先优化提示方式就可能显著改观。
  • prompt 从“指令模板”升级成“过程模板”。

对研究来说,CoT 的价值是:

  • 它让“推理能力到底来自模型哪里”成为更可研究的问题。
  • 它激发了后续一系列工作,例如 self-consistency、least-to-most、program-of-thought、reflection 等。

因此,CoT 不只是一个技巧,而是一整类“让模型显式展开过程”的方法起点。

局限:写出步骤不等于真正会推理

CoT 虽然有效,但也带来一个重要警惕:

  • 模型写出的步骤可能看起来很合理,却未必真正可靠。
  • 有时它只是生成“像推理的文本”,不代表内部机制真的严谨。

这意味着 CoT 有双重属性:

  1. 它确实能显著提升许多任务表现。
  2. 它也可能制造“模型在认真思考”的错觉。

这也是为什么后续会出现 self-consistency、verifier、tool use、program execution 等工作,试图进一步提高过程的可信度。

它和 Self-Consistency 的关系

CoT 论文本身已经很重要,但真正把这条线继续推进的,是后来一系列配套工作。最典型的就是 self-consistency:

  • 不只生成一条推理链。
  • 采样多条不同推理路径。
  • 再通过多数一致性或投票选出最终答案。

这说明行业很快就意识到:链条显式化 很好,但 单条链条不一定可靠。因此 CoT 是起点,而不是终点。

它和 Agent / Tool Use 的关系

从更大的视角看,CoT 还对后来的 agent 与工具调用有深远影响。因为一旦你接受:

模型需要先展开过程,再完成任务

那么下一步就很自然会变成:

  • 中间步骤是否可以调用计算器?
  • 是否可以检索文档?
  • 是否可以拆任务再求解?

这也是为什么很多 agent 系统的“思考-行动-观察”框架,某种意义上都是 CoT 思路的外部化和系统化。

局限:什么时候 CoT 会失效或副作用明显

虽然 CoT 很强,但并不是所有场景都适合:

1. 简单任务上可能徒增延迟与冗长

并不是每个请求都需要长推理链。

2. 对错误推理会有“放大器”效果

如果第一步方向错了,后面整条链可能越写越自洽,却越走越偏。

3. 对最终答案可靠性不能只看语言流畅度

链条写得漂亮,不代表答案一定对。

4. 生产系统中可能涉及隐私、成本和解释性取舍

是否暴露完整推理链,常常不是纯技术问题。

因此,CoT 很适合做能力激发和问题拆解,但在真实产品里仍要和评测、安全与成本一起权衡。

从今天看,CoT 最重要的遗产是什么

到 2026 年看,CoT 留下的最大遗产并不是某组 benchmark,而是它彻底改变了大家对 prompt 的理解:

  1. Prompt 可以塑造过程,而不仅塑造格式。
  2. 模型的推理能力常常需要被“唤起”,而不是默认显现。
  3. 中间步骤本身可以成为新的研究和系统接口。

这三点对今天的 Prompt Engineering、Agent、Tool Use、Verifier、Reasoning Model 全都有深远影响。

读这篇论文时最该抓住什么

如果你只想抓住主线,请记住:

  1. CoT 解决的是复杂任务中“直接答”不稳定的问题。
  2. 它的关键不是多写点字,而是显式示范中间步骤。
  3. 它在大模型上特别有效,因为规模化模型已经具备被激活的推理潜力。

理解这三点后,你再去看 self-consistency、ReAct 或 reasoning model,就会知道它们分别是在 CoT 的哪一层继续往前走。

延伸阅读

相关内容

沿着相近主题继续阅读,加深对方法边界与实践场景的理解。