思维链提示(CoT):让大模型一步步推理

你有没有遇到过这样的场景:让大模型做一道多步算术题,它直接蹦出一个错误答案,却说不清自己怎么算的。问题不在于模型「不会」,而在于我们给的提示没有给它留出思考的空间。思维链提示(Chain-of-Thought Prompting,简称 CoT)正是用来解决这件事的:在提问时显式地引导模型把推理过程写出来,再给出最终答案。本教程系统梳理 CoT 的来龙去脉、主要变体、与当代推理模型的关系,以及可直接套用的模板和常见失败模式。

什么是思维链提示

思维链提示由 Jason Wei 等人在 2022 年提出,核心思想是:在提示中让模型先生成一系列中间推理步骤(chain of thought),再得出最终答案,而不是一步到位直接输出结果。这里的「链」指的是一串自然语言写成的推理句子,每一步都建立在前面步骤之上。

这一方法的反直觉之处在于:它不需要微调模型权重,仅靠提示词本身的改动,就能在算术、常识、符号推理等任务上带来显著提升。更重要的是,这种能力只在模型规模足够大时才「涌现」出来——在小模型上几乎没有效果,这正是后续大量研究的出发点。论文标题为「Chain-of-Thought Prompting Elicits Reasoning in Large Language Models」,编号 arXiv:2201.11903,作者为 Jason Wei、Xuezhi Wang、Dale Schuurmans 等,发表于 ICML 2022。已核验

一个直观对比:

普通提示(直接要答案):
问题: Roger 有 5 个网球,他又买了 2 罐,每罐 3 个。他现在有几个网球?
答案: 11

思维链提示(先写过程再给答案):
问题: Roger 有 5 个网球,他又买了 2 罐,每罐 3 个。他现在有几个网球?
推理: Roger 一开始有 5 个网球。每罐 3 个,2 罐就是 2 × 3 = 6 个。
       加上原来的 5 个,总共 5 + 6 = 11 个。
答案: 11

注意:上例中普通提示「恰好」答对了,但真实任务里直接要答案的模型常常在中间步骤出错,而 CoT 让错误暴露得更清楚,也更容易被纠正。

Few-shot CoT:用示范激活推理

Few-shot CoT 是最早、也最经典的形态。做法很朴素:在提示里给模型几个「问题 + 推理链 + 答案」的范例,模型就会在回答新问题时模仿这种「先推理后作答」的格式。

关键设计点在于范例的质量。Wei 等人的实验表明,只需 8 个手工写好的思维链范例,就能让 540B 参数的 PaLM 在 GSM8K 数学应用题基准上达到当时的领先水平,甚至超过带验证器微调的 GPT-3。这里的「推理链」必须是正确且步骤清晰的,因为如果范例本身就是错的,模型会照着学坏。

实践建议:

提示结构:
[范例 1] 问题 → 推理步骤 → 答案
[范例 2] 问题 → 推理步骤 → 答案
[范例 3] 问题 → 推理步骤 → 答案
[新问题] 问题 →
(模型续写推理步骤与答案)

Few-shot CoT 的代价是:你需要为每个任务手工编写高质量的推理链,且范例要与目标任务分布匹配。这就引出了两个方向——能不能不写范例,以及能不能让模型自己造范例。

Zero-shot CoT:一句魔法咒语

2022 年,Takeshi Kojima 等人发现,哪怕一个范例都不给,只要在所有答案前加一句「Let’s think step by step」,模型就会自动进入逐步推理的状态。这就是 Zero-shot CoT,论文标题为「Large Language Models are Zero-Shot Reasoners」,编号 arXiv:2205.11916,发表于 NeurIPS 2022。已核验

效果有多夸张?在 text-davinci-002 上,仅加这一句话,MultiArith 准确率从 17.7% 提升到 78.7%,GSM8K 从 10.4% 提升到 40.7%。它用一个统一模板覆盖了算术、符号推理、日期理解、物体追踪等完全不同的任务,说明大模型内部本来就藏着很强的零样本推理能力,只是需要被一句话「唤醒」。

典型用法是一个两段式流程:

第一步(推理触发):
问题: ...
请一步步思考,Let's think step by step。
(模型输出推理过程,但不给最终答案)

第二步(答案抽取):
基于上面的推理,请给出最终答案。
(模型输出精简答案)

把「生成推理」和「抽取答案」拆成两次调用,往往比一步到位更稳。这也是后续许多工程封装的默认范式。

Auto-CoT:让模型自己写推理链

Few-shot CoT 强,但范例要人写;Zero-shot CoT 省事,但质量不稳定。Auto-CoT 想把两者优点结合:用模型自己生成的推理链当作 few-shot 范例,从而免去人工编写。论文标题为「Automatic Chain of Thought Prompting in Large Language Models」,编号 arXiv:2210.03493,作者为 Zhuosheng Zhang、Aston Zhang 等。已核验

Auto-CoT 的核心洞察是:自动生成的推理链常常有错,而「多样性」能抵消个别错误范例的负面影响。它的流程分两步:

1. 提问采样:从问题集里按语义多样性挑出一批问题(而非随机挑)。
2. 链生成:对每个问题用「Let's think step by step」让模型生成推理链,
   把「问题 + 生成链」组装成 few-shot 范例,再用于真正的目标问题。

在十个公开推理基准上,Auto-CoT 用 GPT-3 取得与人工设计范例的 CoT 相当甚至更好的结果。它的价值在于把 CoT 从「需要专家手搓范例」变成「一条可自动化运行的管线」。

Complexity/Coin:更复杂的链更好

如果要从一批候选推理链里挑范例,挑哪一种?Yao Fu 等人在「Complexity-Based Prompting for Multi-Step Reasoning」(编号 arXiv:2210.00720)中提出:挑选推理步骤更多、更复杂的链作为范例,效果明显更好。已核验

该方法(常被称为 Complexity 或 Complexity-CoT,也被社区称为 Coin 思路的源头之一)有两条延伸:

范例选择侧:从候选问题里优先选「推理步数多」的链作 few-shot 范例。
解码侧(自一致性思路的变体):对一个问题采样多条推理链,
   只在复杂度高的链里取答案的多数投票,而非在所有链里投票。

论文报告在 GSM8K、MultiArith、MathQA 等数学基准,以及 BigBench-Hard 的日期理解、企鹅推理等任务上,平均提升约 5.3 个点,最高达 18 个点。它给工程实践一个明确信号:范例不是越多越好,而是「越难越有用」。

CoT 与推理模型(o1 / R1)的关系

2024 年起,以 OpenAI o1、DeepSeek-R1 为代表的「推理模型」兴起,它们把推理过程内化进训练与解码阶段,用户不再需要手写思维链。这容易让人误以为 CoT 提示「过时了」。事实更复杂,两者是互补而非替代关系。

相同点:本质上都依赖「在给出答案前先展开中间推理」这一机制,推理模型内部生成的 token 序列,与提示式 CoT 写出来的中间步骤在功能上同源。

关键区别:

维度            提示式 CoT                  推理模型(o1 / R1)
推理触发        用户写提示控制              模型自主决定思考时长
可控性          强,步骤可见可改            弱,过程常被压缩或隐藏
成本            一次普通调用                推理 token 多,成本高且更慢
适用模型        通用大模型(含非推理模型)  专用推理模型
任务外溢        仅对大模型有效              小模型也可经训练获得

实务结论:当你用的是非推理型通用模型(例如多数开源基座或旧版 API),CoT 提示仍是性价比最高的推理增强手段;当你用的是 o1 / R1 类模型,额外手写「Let’s think step by step」通常收益很小,甚至可能被模型忽略。但你可以改做「流程层 CoT」:把复杂任务拆成子问题、要求结构化输出、对关键步骤做自我检查——这些提示技巧在推理模型上依然有效。关于各模型是否默认开启内部推理、是否支持外部思维链覆盖,属厂商快速变化的能力,待核实

实操模板

下面给出三套可直接复制的模板,按场景取用。

模板一:零样本触发(最省事)

请解决下面的问题。请一步步思考(Let's think step by step),
先写出你的推理过程,最后用「答案:」给出结论。

问题: <在这里填入你的问题>

模板二:少样本范例(质量优先)

下面是大模型推理的范例,请模仿其格式。

问题: 一个商店有 12 个苹果,卖出 5 个,又进货 8 个,现在有几个?
推理: 原有 12 个,卖出 5 个剩 12 - 5 = 7 个,进货 8 个变成 7 + 8 = 15 个。
答案: 15

问题: <你的新问题>
推理:

模板三:两段式(最稳,便于抽取答案)

第一段:
问题: <问题>
请只做推理,不要给最终答案,Let's think step by step。

第二段(用第一段的输出拼接):
根据以上推理,请用一句话给出最终数值答案,格式为「答案:X」。

工程上,模板三配合「取多条链做多数投票」的自一致性(self-consistency)做法,能进一步抬升准确率:对同一个问题采样若干条推理链,统计最终答案的众数作为输出。

失败模式与对策

CoT 不是万能药,以下坑要避开。

第一,小模型无效。CoT 的推理能力只在足够大的模型上涌现。对几亿到几十亿参数的小模型,写思维链反而可能让输出变长变乱。对策:先确认模型规模与版本,小模型优先用更直接的提示或检索增强。

第二,范例带错链会污染输出。Few-shot CoT 的范例若推理错误,模型会模仿错误逻辑。对策:范例务必人工核对,或采用 Auto-CoT 的多样性采样降低单点错误权重。

第三,复杂链反而引入幻觉。Complexity 思路鼓励长链,但过长的自主推理容易在中段编造事实。对策:对关键事实做「先列已知、再推导」的结构化约束,并对最终答案做一轮校验。

第四,数学与计数仍会失准。即便有 CoT,大模型在多位乘法、精确计数上仍可能算错。对策:把计算交给代码解释器或计算器,让模型只负责「分解问题 + 调用工具」,即 tool-augmented CoT。

第五,推理模型上画蛇添足。对 o1 / R1 类模型重复写「一步步思考」通常无益。对策:改用任务拆解与结构化输出,把思考时长交给模型自身调度。

小结

思维链提示通过「先推理、后作答」的格式,激活了大模型原本被压抑的多步推理能力。从 Few-shot CoT 的手工范例,到 Zero-shot CoT 的一句咒语,再到 Auto-CoT 的自动构造与 Complexity 的「越难越好」选择策略,CoT 已经从技巧演进为一套方法体系。它与 o1 / R1 这类推理模型同源互补:前者靠提示控制、后者靠训练内化,理解二者的边界才能用对地方。掌握本教程的模板与失败模式,你就能在绝大多数推理任务上稳定地让模型「想清楚再回答」。

参考与延伸阅读

  • Wei J. 等. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903. 已核验
  • Kojima T. 等. Large Language Models are Zero-Shot Reasoners. arXiv:2205.11916. 已核验
  • Zhang Z. 等. Automatic Chain of Thought Prompting in Large Language Models. arXiv:2210.03493. 已核验
  • Fu Y. 等. Complexity-Based Prompting for Multi-Step Reasoning. arXiv:2210.00720. 已核验
  • Wang X. 等. Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171. 待核实(编号以实际论文为准)
  • OpenAI o1 模型说明、DeepSeek-R1 技术报告(各厂商文档,能力随版本变化,具体推理开关与 CoT 覆盖行为 待核实
本文累计阅读