思维链(CoT)是让大语言模型展现复杂推理能力的关键技术。它通过引导模型"逐步思考",显著提升了 AI 在数学、逻辑、编程等任务上的表现。
思维链的本质是让模型 在给出最终答案之前,先输出中间推理步骤。
传统提示词:
Q: 一个农场有 15 只羊,卖掉 6 只后又买了 4 只,现在有多少只羊?
A: 13 只
使用思维链:
Q: 一个农场有 15 只羊,卖掉 6 只后又买了 4 只,现在有多少只羊?
A: 让我一步步来思考:
1. 初始羊的数量:15 只
2. 卖掉 6 只后:15 - 6 = 9 只
3. 又买了 4 只:9 + 4 = 13 只
因此,现在有 13 只羊。
降低认知负荷:大模型的工作记忆(Attention)有限。将复杂问题(如“234 * 567”)拆解为单步计算,避免了模型在一步生成中承担过大的计算压力,防止逻辑崩塌。
错误可追溯:如果模型直接给出错误答案,无法调试。但如果它展示了“先算 15-6=9,再算 9+4=13”,就能精确定位是哪一步逻辑出错,从而针对性优化提示词。
上下文引导:模型是基于概率预测的。生成中间步骤(如“不仅要考虑成本,还要考虑时间”)产生的文字,会作为高质量的上下文,提高模型在后续生成中检索到正确知识的概率。
对齐人类思维:人类在解决难题时会进行“内心独白”。思维链强迫模型模仿这种“慢思考”(系统 2),而非仅依赖“直觉”(系统 1)。
在面对复杂目标时,直接生成行动指令往往容易出错。通过思维链,可以让模型先进行"脑内演练",将大目标拆解为子步骤。
应用场景:不仅生成步骤,还解释步骤之间的依赖关系。
智能体在决定使用哪个工具时,经常面临歧义。强制模型在调用工具前输出推理过程,可以显著提高工具调用的准确率。
核心逻辑:意图 (Intent) -> 理由 (Reason) -> 工具 (Tool)。
当工具调用失败或代码报错时,直接重试通常无效。思维链可以让模型像人类程序员一样,先阅读错误信息,分析原因,再提出修复方案。
流程:观察 (Observe) -> 分析 (Analyze) -> 修复 (Fix)。
最简单的形式,只需添加 "Let's think step by step" (让我们一步步思考):
优点:无需示例,通用性强
缺点:质量不如 Few-Shot 稳定
提供包含推理过程的示例 (Few-Shot Prompting):
优点:质量更高,格式可控
缺点:需要精心设计示例
多次采样,取最一致的答案:
原理:正确的推理路径更可能被多次发现
适用场景:高风险决策、追求高准确率
将推理过程组织成 树形结构(详见下一节):
图 2-1:思维树结构示意
内在思维链 / 系统 2 推理
随着推理模型(Reasoning Models)的成熟,思维链已经从“提示词技巧”演变为“模型能力 + 提示策略”的结合。
原理:模型在输出最终答案前,会先在内部生成并未对用户展示的隐式思维链。
变化:对于这类模型,用户 不再需要 手动编写 "Let's think step by step",模型会自动进行长链路推理。
最佳实践:对 o3 类模型,提示词应保持简单直接,过多的少样本(Few-Shot)指导反而可能干扰其内在推理逻辑。
不要只是简单地说 "Let's think step by step",更好的做法是 明确推理框架:
在工程落地中,不仅要让模型"想得对",还要能"代码好解析"。使用特殊的分隔符包裹思维过程和最终答案至关重要。
单路推理:如果只运行一次 CoT,建议设置 temperature = 0。不仅能提高结果的确定性,往往还能获得逻辑最严密的推理路径。
自洽性投票:如果使用投票机制,必须设置 temperature > 0.5(推荐 0.7),以确保生成的多样性,防止所有路径都坍缩到同一个错误答案。
思维链不仅可以单独使用,更能作为核心组件与其他 AI 技术产生强大的化学反应。
思维链 + RAG (检索增强生成)
传统 RAG 直接将检索到的片段喂给模型生成答案,容易导致"断章取义"或拼接错误。加入思维链后,模型可以先评估检索内容的关联性,再进行综合推理。
模式:检索 (Retrieve) -> 评估与推理 -> 生成 (Generate)
优势:
去噪:通过推理步骤,模型可以识别并忽略检索结果中的无关信息。
知识融合:将检索到的静态知识与模型内在的逻辑能力结合。
提示词示例:
"基于以下检索到的 3 个文档片段,请先一步步分析它们之间的逻辑联系,排除矛盾信息,然后再回答用户的问题。"
思维链 + 工具 (ReAct 模式)
这是构建智能体的基石。ReAct (Reason + Act) 本质上就是 显式思维链在工具调用场景的应用。
原理:模型在行动(调用工具)之前,必须先进行显式推理(思考意图),行动后再次推理(分析结果)。
流程:
Thought: "用户问天气,我需要调用天气 API"
Action: get_weather("Beijing")
Observation: "25°C, Sunny"
Final Answer: "北京今天晴,25度,很适合出去玩。"
延迟与成本翻倍:
思维链通常需要生成数百个额外的 Token 用于推理。对于短任务,开启 CoT 可能导致 API 成本显著增加,且首字延迟显著增加,不适合对实时性要求高的应用。
错误传播:
推理链路是串行的。如果第一步逻辑(如“提取数值”)出错,后续哪怕所有步骤的逻辑都正确,最终答案也会错误。这种脆弱性使得 CoT 在长链路推理中表现不稳定。
简单任务的"过度思考":
对于 2 + 2 或 中国的首都是哪里 这类直觉性问题,强制使用 CoT 不仅浪费资源,甚至可能诱导模型将简单问题复杂化,产生"过度解读"的错误。
结论的不可靠性:
推理与答案不一致:模型有时会产生完美的推理过程,却输出一个完全无关的错误答案;或者推理逻辑混乱,却碰巧输出了正确答案。这种"表里不一"使得不能盲目信任模型的解释。
下一节: 2.2 任务分解与规划算法