研究揭示 CoT prompting 在数学、逻辑、多步规划任务上可翻倍准确率,但对依赖整体模式识别的直觉问题反而导致准确率下降 70 个百分点,核心在于问题是否可分解。
思维链:当自言自语有帮助时
思维链提示告诉语言模型在给出最终答案之前生成明确的中间推理步骤。在内部,这使推理与训练数据中的逐步解释保持一致,支持多条采样链上的自洽性,并通过将一个困难的直接映射分解为一系列更容易的局部预测来降低问题的"全局性"。结果是在数学、逻辑和多步规划任务上获得显著的准确率提升,但对于简单、直观的任务,额外的 token 是死重量,甚至可能引入错误。
令人惊讶的是:强迫模型自言自语可以将难题的准确率提高一倍,但对于依赖整体模式识别的洞察类问题,同样的技术会将性能降低 70 个百分点。人类研究中也出现了相同的模式。思维链不是通用的升级;它是对计算图的特定重新配置,只在问题真正可分解时才有所帮助。

在上一期中,我们为客户服务回复助手添加了少样本示例,它开始处理更多种类的查询。但复杂工单仍然会崩溃:"客户说他们的设备在保修期外三周坏了,但他们是用一张可以延长保修的 premium 信用卡购买的。我们应该批准更换吗?"这种推理不仅需要模式匹配,还需要一系列深思熟虑的检查。这篇文章正好从这里继续。
思维链提示在上下文中插入工作示例,这些示例不仅显示最终答案,还显示详细的、逐步的推理痕迹。然后模型在回答之前生成自己的推理文本。这与要求直接回答的"零样本"提示不同:上下文塑造了概率分布,使得最可能的延续是一条推理链,而模型将其最终答案建立在那段自我生成的中间文本之上(Wei et al., 2022)。
对于我们的助手,标准提示可能是:
Customer email: "My laptop broke 3 weeks after warranty. I bought it with my credit card that extends coverage. What can you do?"
Respond helpfully.
思维链版本会显示一个示例:
Customer email: "..."
Let's think step by step:
1. Check warranty status: standard warranty expired 3 weeks ago.
2. Check extended coverage: credit card extends by 1 year, so still covered.
3. Determine action: replacement is covered under extended warranty.
4. Draft reply: apologetic, confirm coverage, ask for card details.
Response: [drafted reply]
在一两个这样的示例之后,模型将在回答之前产生一条类似的推理链。那段推理文本成为模型生成最终回复的上下文的一部分,就像一个助手在打字写邮件之前记下他们的思考过程一样。
大型语言模型在数万亿个 token 上训练,其中复杂问题的高质量答案几乎总是伴随着解释。当我们要求一个简单的答案时,我们创造了一个小的分布偏移:模型必须从问题跳到解决方案,而没有它在训练期间看到的解释性脚手架。思维链提示通过使推理时的上下文看起来像包含推理的训练时上下文来消除这种不匹配(Wei et al., 2022)。
从机制上讲,这很重要,因为许多推理问题具有很高的"全局性程度":答案以非局部方式依赖于输入的许多交互部分。从所有这些部分学习到答案的直接映射是困难的。通过生成中间步骤,每个步骤只依赖于信息的一小部分,模型将一个高全局性问题转换为一系列低全局性问题,每个问题都更容易准确预测(Nye et al., 2021)。对于我们的保修工单,检查保修日期是对一小段文本的局部操作;检查信用卡政策是另一个;将它们组合成决定是第三个。模型一次一个地组合它们,而不是试图一口气吞下所有东西。
自洽性在此基础上构建,通过采样多条独立推理链(使用随机解码),然后选择出现最频繁的答案。这利用了模型在不同可信链之间分配概率质量的事实;有效的推理路径倾向于得出相同的答案,而错误则各不相同,因此多数投票过滤掉了许多错误(Wang et al., 2023)。在实践中,这可以在 GSM8K 数学问题等基准测试中增加 10-20 个百分点的准确率,通常足以匹配或击败专门微调的模型。
A["Generate reasoning chain 1"] --> D["Collect all answers"]
B["Generate reasoning chain 2"] --> D
C["Generate reasoning chain 3"] --> D
D --> E["Majority vote selects answer"]
模型生成的每个 token 都被附加到提示中,并通过下一步的自注意力反馈到 transformer 中。当存在思维链时,模型自己的推理 token 作为额外的条件上下文,引导后续预测。最终答案 token 关注所有前面的推理步骤,因此模型在回答前有效地"阅读自己的笔记"。
这可以可视化为将潜在结构外部化的数据流。没有 CoT,模型将输入直接映射到输出:
A[Customer email] --> B[Model generates answer directly]
使用思维链,流程变为:
A[Customer email] --> B["Model generates step 1 (check warranty)"]
B --> C["Step 2 (check credit card)"]
C --> D["Step 3 (decide action)"]
D --> E[Model generates final reply]
每个步骤的输出成为下一步的输入,就像一个人记下子问题然后综合一样。自洽性将这扩展为多条并行推理痕迹,然后选择最常见的结论。
这个过程之所以有效,是因为模型的预训练包含大量人类书写的链条。"Let's think step by step"这些 token 触发了一个高概率区域,对应于结构化解释,不是因为模型有一个内部"思考"模块,而是因为统计模式很强。实际上,CoT 提示是一种上下文元学习:模型从示例中推断出任务格式是"先推理后回答",并动态调整其解码以匹配该格式。
人类大脑显示出与外部化中间状态惊人地平行的好处。根据 Baddeley 的工作记忆模型,我们有一个通过复述维持言语信息的语音环路,以及一个用于图像的视觉空间草图板(Baddeley, 2012)。当一个人大声说出他们的想法时,这个环路延伸到环境中:说出的词语被听到并重新编码,创造了一个补充内部记忆的外部听觉缓冲区。这减轻了认知负荷,并为更高级别的推理释放了执行资源。
说话还强制将模糊的心理表征序列化为明确的符号形式。这经常揭示不一致或差距,这与橡皮鸭调试背后的原则相同,即逐行解释代码可以发现沉默审查会错过的 bug [Hunt & Thomas, 1999 / 实用程序员概念]。在学习研究中,在解决问题的同时自我解释的学生比被动学习的学生构建了更深层次、更可泛化的知识。解释行为触发新的推断,而不仅仅是旧知识的检索(Chi et al., 1989)。
这些效果很好地映射到 LLM 行为上。模型的推理 token,像说出的想法一样,成为一个持续外部痕迹,条件化后续预测。强制序列化为离散 token 鼓励模型做出暴露不一致性的承诺,这正是当问题可分解时使最终答案更准确的原因。当我们采样多条推理链时,我们模仿人类"从不同角度思考"然后得出结论的策略。
并非所有问题都能从言语化中受益。在一项关于洞察问题解决的经典研究中,研究人员发现,在解决洞察谜题(如"九点"问题)时要求参与者说出他们的想法,会将解决率大幅降低,从沉默条件下的 57% 降至出声时的 13% [Ball & Stevens, 2005 / 洞察任务中的言语遮蔽]。解释是,洞察通常依赖于无意识的、无法言语化的问题表征重构。强迫言语将注意力转向可言语化的表面特征,而偏离了获得"啊哈"时刻所需的微妙转变。
同样的原则适用于语言模型。依赖整体模式识别、风格匹配或大规模并行约束满足的任务,正确答案的"感觉",不会从明确的推理链中受益。如果你要求模型"写一封友好、富有同理心的回复给这个客户",而工单很简单,像"首先列出客户的情绪,然后选择语气,然后起草"这样的思维链提示通常会产生生硬的、过度思考的输出。额外的 token 充当噪音,将模型从它自然会遵循的直接风格轨迹拉走。
根本原因是明确的推理迫使模型承诺对问题的特定分解。如果分解与任务的实际结构不对齐,链就成为一个限制性能的约束,而不是脚手架(Nye et al., 2021)。对于支持助手,简单的"对不起,您的追踪显示包裹延迟了"不需要思维链。但需要根据三个重叠政策计算按比例退款的请求绝对需要。
工程规则:当任务需要多个相互作用的逻辑步骤时使用思维链。当答案本质上是直接模式完成时跳过它。
Q: 在提示中需要多少思维链示例?
两三个精心选择的、涵盖关键推理模式的示例通常就足够了。更多可能导致模型专注于不相关的细节,而不是抽象出通用的"先推理后回答"格式。
Q: 我可以只添加"Let's think step by step"而不需要示例吗?
是的,这种所谓的"零样本 CoT"通常适用于中等难度的任务。它对于高度结构化的推理不如完整示例可靠,但可以作为一种快速的初步尝试。
Q: 自洽性总是能改善结果吗?
不。如果模型的错误导致所有样本收敛到相同的错误答案,投票不会有帮助。它在错误是随机和多样化的时候效果最好,而这往往适用于较难的推理。
Q: 当中间推理可能包含敏感信息时,使用思维链是否安全?
需要谨慎。推理文本可能会暴露 PII(个人身份信息)或最终输出中没有的内部假设,从而产生隐私风险。您可能需要在生产日志中过滤或省略中间痕迹。
Q: 我可以在小模型上使用思维链吗?
小模型(低于约 100 亿参数)通常无法产生有意义的推理链,因为概率分布没有足够的逐步模式训练数据来塑造。CoT 在较大的模型上最有效。
你的团队构建了一个客户服务机器人,用直接查询和友好消息来回答追踪问题。你希望它也能处理"我的包裹是用碳中和配送发货的吗?"这需要同时检查 carrier API 和公司政策数据库,然后组成一个通俗易懂的答案。你正在考虑使用思维链提示。描述一个单一的实际情况,在这种情况下添加 CoT 会损害机器人的性能而不是帮助,并解释为什么它在这种情况下会失败。
**答案:**假设客户问"我的包裹在哪里?"并且追踪号是有效的。直接答案是简单的查询加上预模板的状态消息(例如,"您的包裹今天正在投递。")。添加像"Let's think step by step:首先检查追踪 API;然后检查内部投递区域;然后组成消息"这样的 CoT 示例会迫使模型在答案之前生成冗长的推理链。这会增加几秒钟的延迟和 2-3 倍的 token 成本而没有任何收益,因为回复可以一次高置信度地生成。更糟糕的是,强迫的明确推理可能导致模型产生幻觉细节(如一个不存在的幻影投递区域检查),从而在最终消息中引入事实错误。问题在结构上很简单:一次 API 调用与确定性响应映射。明确的分解添加的是噪音而不是结构。
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(Wei et al., 2022)
Self-Consistency Improves Chain of Thought Reasoning in Language Models(Wang et al., 2023)
Show Your Work: Scratchpads for Intermediate Computation with Language Models(Nye et al., 2021)
Working Memory(Baddeley, 2012)
Self-explanations: How students study and use examples in learning to solve problems(Chi et al., 1989)
The Pragmatic Programmer(Hunt & Thomas, 1999),rubber duck debugging concept
最初发表于 Internals Decoded。以对话方式解释 AI 内部原理。