3694 字
约 12 分钟
17
3.3 思维链与推理提示何时有用、何时有害
2026-10-25
无标签

3.3 思维链与推理提示何时有用、何时有害

一句话结论:「逐步思考」不是万能咒语。它之所以有效,是因为给了模型中间产物来安放推理;它之所以有害,是因为这些中间产物会进入上下文、抢占注意力、并可能自我强化错误。

读这篇之前

需要先读 3.1(三件套)和 2.1(模型预测下一个 Token)。这一篇讲的是"方法层"——怎么把模型的推理过程引导出来。


一、先看全景:提示词的三层结构

在讲思维链之前,先把位置摆清楚。生产级提示词分三层:[原文 707]

层 管什么 具体内容
结构层 骨架 Role / Directive / Context / Exemplars / Format / Style
方法层 怎么思考 System Prompt、Role Playing、Few-shot、CoT、ToT、ReAct、APE
输出工程层 让回答可直接用 结构化、解析、验证

这一篇属于方法层。七个技术的全景对照:[原文 707]

技术 一句话说明 适用场景
System Prompt 模型行为的"操作系统" 所有 Agent 的基础
Role Playing 让模型扮演特定角色 专业领域输出
Few-shot 给几个示例引导输出 格式固定、模式明确
CoT 「请逐步思考」——展示推理过程 数学、逻辑、多步推理
ToT 探索多条路径再选最优 规划、决策、创意
ReAct Thought→Action→Observation 循环 工具调用、Agent 主循环
APE 让模型自动生成和优化提示词 批量优化、自动化

注意 CoT 和 ReAct 的区别:CoT 只在"想"的层面展开推理;ReAct 把"想"和"做"串成循环。前者是提示技巧,后者是 Agent 的运行时结构(第 10 章详述)。


二、思维链为什么有效

思维链(Chain-of-Thought, CoT)的做法很简单:要求模型先写出推理过程,再给答案。

为什么这有效?回到 2.1 的机制:模型在逐个 Token 生成。每一个 Token 都是基于"目前已有的全部 Token"算出来的。

这意味着:

模型后面输出的内容,能"看到"前面输出的内容。

如果你直接要答案,模型只有一次机会"在心里算完"——而这个"心里"其实是它在生成答案那几个 Token 时的隐式计算。

如果你要求它先写推理,它就把"中间计算"变成了显式的文本。这些文本成了后续生成答案时的依据。相当于给它一张草稿纸。

这三层好处:

好处 机制
减少一次跳跃的跨度 把"复杂推理"分解成多个小步,每步只依赖前一步
中间结果可复用 前面算出的中间值,后面可以直接引用
可检查 推理过程写出来了,你(或者下一次调用)能核对

第三条在 Agent 场景里尤其有价值:推理过程是给"校验"用的。工具层、审核者、甚至模型自己(3.4 的自检)都可以看这段推理。


三、什么时候它有害

CoT 被广泛滥用,所以危害那一面少有人讲。四种典型情况:

情况一:任务本身不需要推理

如果任务是格式转换(把 Markdown 转 JSON)、信息抽取(从文本里找字段)、简单分类(正面/负面),推理过程完全是浪费——它不产生有用信息,只占 Token。

更糟的是:多余的推理可能引入新的错误。 模型在"想"的过程中可能自己编出一个不存在的约束,然后按那个错约束执行。

情况二:推理过程被写进上下文,抢占注意力

2.2 讲过:上下文是"半台检索引擎",信噪比下降会让准确率下降。每一段推理都是额外的噪声,在长任务里不断累积。

情况三:错误会被"自我强化"

这是最隐蔽的危害。如果模型在推理第 2 步就得出一个错误结论,第 3-5 步都会基于这个错误继续推。而且因为推理"看起来完整",最终答案反而更自信、更难被质疑。

相比"直接给个错答案","给了详细推理的错答案"更危险——因为它欺骗性更强(2.3 的"过度自信")。

情况四:它会让输出不再是合法 JSON

3.2 讲过:输出要被程序读,就必须结构稳定。而 CoT 天然是自由文本——如果你让它"先推理再输出 JSON",它很容易把推理混进 JSON 里。

解决方式:把推理放进 schema 的一个字段里。

{ "thought": "……推理过程……", "action": "call_tool", "tool_name": "..." }

这正是 ReAct 的标准做法:Thought 是结构化的一个字段,不是游离在外的散文。


四、四类推理技术怎么选

技术 做法 成本 什么时候用
无推理 直接给答案 1× 格式转换、抽取、简单分类
CoT 先写推理再答 2-5× 数学、逻辑、多步判断
ToT(思维树) 探索多条路径,评估后选最优 10×+ 规划、决策、需要比较方案
ReAct 想→做→看→再想 取决于轮数 需要与外部交互

一条实用判据:

先测"无推理"能不能达到要求。能,就不要加推理。
因为推理的成本是真实的(Token、延迟、噪声),而收益只在"确实需要多步推导"时才出现。

ToT 值不值得

ToT 的思路是"生成多个候选路径,评估后选最好的"。它确实能提升复杂规划的质量,但成本是数量级的(要生成多条、还要评估)。

建议:先用 CoT,效果不够再考虑 ToT。绝大多数 Agent 任务用不到 ToT。


五、让推理有用的四个写法

如果决定用推理,不要只写"请逐步思考"。要给它结构:

写法 效果
指定步骤 「先列依据 → 再给结论 → 最后说明不确定性」
要求引用 「每条结论必须指出依据来自材料哪一段」
要求反例 「指出你的推理中哪一步最可能出错」
要求自检 「结论与依据冲突时,以依据为准并重述结论」

第三条特别有用:要求模型指出自己最薄弱的一环,能让它更早发现问题,也能让你知道哪里需要人工复核。

第四条是 3.4 讲的自检基础。

一个反面写法

❌ 请仔细思考,逐步分析,认真推理,确保答案正确。

这四项要求都是形容词,没有提供任何结构。它甚至可能增加模型啰嗦的倾向,而不提升准确率。



六、四种推理技术展开:CoT / ToT / ReAct / APE

上一节给了选择建议,这一节把四种技术的机制讲清楚,方便你判断什么时候该换。

CoT(思维链):一条路走到底

模型沿一条推理路径往前走,每步基于前一步。优点是便宜、直接;缺点是一旦中间某步错了,后面全部继承,而且它自己不会回头。

适合:有明确解法的推导(算术、逻辑、按规则判断)。

ToT(思维树):分叉、评估、回溯

把 CoT 从"一条线"改成"一棵树":[原文 707]

            ┌─ 方案A ─┬─ A1 ─ 评估 7.5 ← 选这条
起点 ───────┤        └─ A2 ─ 评估 6.0
            ├─ 方案B ──── B1 ─ 评估 5.5
            └─ 方案C ──── C1 ─ 评估 4.0

它做三件事:生成多个候选 → 逐个评估 → 沿最优路径继续。所以它能"回头",不会一条错路走到黑。

代价也很明确:成本和延迟成倍增长(要多生成、多评估)。原文列的适用场景是规划、决策、创意——正是那些"没有唯一正确路径、需要比较"的任务。[原文 707]

判据:如果任务失败的主要原因是"选错了方向"而不是"算错了细节",ToT 值得试;如果只是"算错",CoT 就够。

ReAct:把想和做串成循环

ReAct 的形态是 Thought → Action → Observation 循环(1.1 已详述)。它和 CoT 的本质区别:

CoT ReAct
推理依据 只有模型自己写出的文本 文本 + 外部真实结果
能不能获得新信息 不能 能
属于 提示技巧 运行时结构

所以 ReAct 不是"更好的 CoT",而是加了外部输入的 CoT。这也是为什么它需要工具。

APE(自动提示优化)

APE 的思路是:让模型自己生成、评估、挑选提示词,而不是人来手写。[原文 707]

它的适用场景很具体:批量优化、自动化场景——比如你有 500 个抽取任务,逐个手调提示词不现实。

但要注意:APE 优化的是"在这个评测集上表现最好的提示词",而评测集本身的质量决定了它优化的方向。没有好的评测集,APE 只会帮你更快地过拟合(第 13 章评估)。


七、一个成本对照,帮你决定要不要加推理

把四种方案的成本与收益放进一张表,方便做取舍:

方案 相对成本 相对延迟 收益出现的前提
无推理 1× 1× 任务简单
CoT 2~5× 2~5× 需要多步推导
ToT 10×+ 10×+ 需要比较方案
ReAct 取决于轮数 取决于轮数 任务需要外部信息

这张表的用法:从最上面一行试起,每往下走一行,都要有"上一行明确做不到"的证据。这和 1.4 的复杂度阶梯是同一个思路——复杂度必须被证明有必要。


八、动手:一个能让推理真正有用的模板

"请逐步思考"没用。有用的是给它结构。

一个经过验证的推理模板

在回答前,按以下三步写下你的推理:

① 【依据】从材料中找出支持什么结论的原文(引用原句)
② 【推理】从依据到结论的逻辑(不超过 3 步,每步可检验)
③ 【结论】一句话给出答案,并标明置信度(高/中/低)
   若依据不足,结论写「依据不足」并把置信度设为低。

规则:
- 第 ② 步中任何一步如果只是"常识推测",要明确标注「推测」
- 不允许在第 ③ 步引入第 ①② 步没有的信息

为什么这个模板有效

结构 作用
依据在前 强制先找证据(对抗幻觉,2.3)
推理限制 3 步 步数少则每步可检查
标注"推测" 让不确定的部分显形
禁止结论引入新信息 防止"结论比依据多"
允许"依据不足" 给合法退路

一个反例对比

差:「请思考后回答这个合同有没有风险」
   → 它会给一段"可能存在的风险"清单,看着专业但没有指向原文

好:「先引用合同原文,再说明为什么这条对买方不利」
   → 每条都能核查

这个模板适用于所有"需要判断"的场景——不只是合同审查。


九、常见误区

误区一:所有任务都加「逐步思考」。
格式转换、信息抽取这类任务加了只会变慢变差。

误区二:推理越长越准确。
超过必要长度的推理会引入噪声,也可能编造约束。

误区三:看到推理过程合理,答案就一定对。
推理可能从第 2 步就错了,后面全是在错误基础上自洽。

误区四:CoT 和 ReAct 是一回事。
不是。CoT 是纯思考;ReAct 是思考+行动+观察的循环,是 Agent 的运行时结构。

误区五:推理过程可以省掉不留。
在 Agent 里,推理过程是重要的诊断依据——出问题时,它是唯一能让你看出"它在想什么"的线索。建议保存在轨迹里(第 10.5 可观测性)。


十、推理长度与准确率的关系

一个常见的直觉是"想得越多越准"。实际不是线性的。

推理长度 准确率(多步推理任务)
无推理直接答 中低
简短推理(2-5 步) 最高
冗长推理(20+ 步) 回落到中

为什么会回落:

原因 说明
幻觉累积 步数越多,中途编造的概率越大
注意力稀释 关键依据被淹没(5.2)
自我强化 前面错了后面顺着错(3.3 已述)

实践结论:推理要有"够用就好"的边界。

可以在提示词里加:
- 推理步骤不超过 5 步
- 每步只写必要的一句话
- 超过 5 步说明任务该拆分了

最后一句很有用:它把"想不清楚"转化为"任务需要拆分"这个可行动信号。


十一、下一篇

方法层讲完了。现在回到结构层里那个最特殊、也最容易被写坏的部分:系统提示。

它是模型看到的第一个东西,优先级最高,也最容易变成一坨没人敢改的怪物。下一篇讲怎么写,以及它的典型失败模式。

3.3 思维链与推理提示何时有用、何时有害
https://clxhxhhr.top/posts/4879/
作者
clxstart
发布于
2026-10-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。