链式推理策略
本节定位
如果把上一节总结成一句话,就是:
- 推理问题依赖中间状态
那这一节要回答的就是:
我们怎样让模型更愿意、更稳定地把中间状态显式写出来?
链式推理策略,也就是 CoT,最核心的想法就是:
- 不直接要答案
- 先让模型拆步骤,再出结论
学习目标
- 理解链式推理策略为什么会提升多步任务表现
- 理解 CoT 适合什么任务,不适合什么任务
- 通过可运行示例理解“直接答”和“分步答”的差别
- 理解生产环境里怎样使用结构化推理,而不是无节制长文本
一、为什么“先想步骤”会有帮助?
1.1 因为很多问题不是一跳到终点
例如这道题:
- 商品原价 80 元,打 8 折后再减 5 元,最后多少钱?
如果模型直接生成答案,
它可能会犯很典型的错误:
- 把“8 折”当成减 8 元
- 漏掉最后的减 5 元
- 步骤顺序搞错
而如果它先把过程拆开:
80 * 0.8 = 6464 - 5 = 59
最终答案通常会更稳定。
1.2 CoT 的核心不是“写很多字”,而是“暴露中间结构”
这一点特别重要。
链式推理真正有用的地方不是:
- 输出更长
而是:
- 把局部事实
- 中间变量
- 步骤依赖
显式写出来。
1.3 一个类比:草稿纸不是为了显得认真
学生做题时写草稿纸,不是为了让答案更长,
而是为了:
- 防止脑中状态丢失
- 把复杂问题拆小
- 方便检查
CoT 对模型的作用很像这一层。
二、先看一个“直接答”和“链式答”的对比
下面这个例子不会调用 LLM,
但它会非常清楚地演示:
- 为什么“直接做一个粗糙映射”容易错
- 为什么“先拆步骤再算”更稳
import re
problem = "商品原价80元,打8折后再减5元,最后多少钱?"
def bad_direct_answer(text):
numbers = list(map(int, re.findall(r"\d+", text)))
original, discount, minus = numbers
# 常见错误:把“8折”误当成“减 8”
return original - discount - minus
def chain_reason_answer(text):
original, discount, minus = map(int, re.findall(r"\d+", text))
steps = []
discounted_price = original * (discount / 10)
steps.append(f"先算折扣价:{original} * {discount}/10 = {discounted_price}")
final_price = discounted_price - minus
steps.append(f"再减优惠:{discounted_price} - {minus} = {final_price}")
return final_price, steps
print("problem:", problem)
print("bad direct answer:", bad_direct_answer(problem))
answer, steps = chain_reason_answer(problem)
print("\nchain reasoning steps:")
for step in steps:
print("-", step)
print("final answer:", answer)
2.1 这段代码最能说明什么?
它说明:
- 直接映射很容易误解题意
- 显式拆步骤后,错误更容易被暴露
例如这里:
- “8 折”到底是
-8还是*0.8
只要你把这一步写出来,
错误就不容易藏起来。
2.2 为什么 CoT 常常对数学、逻辑、规划类任务特别有用?
因为这些任务通常都具备:
- 明确中间变量
- 明确步骤顺序
- 明确局部依赖
这和链式推理天然契合。
2.3 为什么 CoT 不是所有任务都该开?
因为不是所有问题都需要分步。
例如:
- “法国首都是哪里?”
这种问题更像检索,不需要拉长推理链。
所以 CoT 不是默认越多越好,
而是:
- 在多步问题上更值钱
三、CoT 在 Agent 里通常怎么用?
3.1 先分解,再调用工具
很多 Agent 任务里,CoT 不一定直接用来算数 ,
而是用来回答:
- 先做什么
- 后做什么
- 哪一步需要工具
例如:
- 识别问题类型
- 决定先查政策还是先查库存
- 拿到观察后再组织结论
3.2 也可以变成更结构化的“推理槽位”
在生产环境里,不一定非要让模型输出一大段自然语言思维过程。
很多系统会改成更短、更结构化的格式,例如:
factssubtasksdecisionnext_action
这类结构往往更容易:
- 校验
- 记录
- 调试
3.3 CoT 也常和自检结合
一种很常见的增强方式是:
- 先推导
- 再检查关键步骤
- 最后输出答案
这样可以降低部分粗心错误。
四、什么时候 CoT 最有帮助?
4.1 需要拆步骤的问题
例如:
- 多步计算
- 条件筛选
- 组合决策
- 复杂规则判断
4.2 需要解释过程的问题
例如:
- 为什么推荐这个方案
- 为什么不能执行这个请求
- 为什么这个回答符合规则
当系统不仅要给结论,还要给理由时,
显式中间过程很有价值。
4.3 错误代价较高的问题
如果问题一旦算错或判断错,
后果比较严重,
那显式步骤通常更值得。