思维链提示(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 覆盖行为 待核实)