07. ReAct、Tree-of-Thought、Self-Consistency 等推理增强方法的原理与对比

整理 ReAct、Tree-of-Thought、Self-Consistency 等推理增强方法的原理与对比。

简单回答

这些方法都是在解决同一个问题:如何让模型在复杂任务上"想得更好"。ReAct 把推理(Thought)和行动(Action)交织在一起,让模型能利用外部工具;Tree-of-Thought 把推理从线性链扩展成树状搜索,探索多条推理路径后剪枝选最优;Self-Consistency 是多次采样取多数投票,属于推理链的集成学习。三者的复杂度和成本递增,适用场景不同。

详细解答

ReAct:推理与行动的交织

ReAct(Reason + Act,Yao et al. 2022)是专门为需要工具调用的任务设计的推理框架。标准 CoT 只在模型内部推理,但很多任务需要获取外部信息(搜索、计算、查数据库)。ReAct 把推理步骤和工具调用交织在一起:

思考:我需要先查一下这个公司的最新股价
行动:搜索["苹果公司股价 2025"]
观察:苹果公司当前股价为 $182.5
思考:得到了股价,现在计算一下相对上月的涨幅
行动:计算[(182.5 - 175.3) / 175.3 * 100]
观察:涨幅约 4.1%
思考:可以回答用户的问题了
回答:苹果公司股价上月以来上涨了约 4.1%

每一轮 ReAct 循环包含 Thought(模型的推理)、Action(调用什么工具)、Observation(工具返回什么结果),模型基于 Observation 继续下一轮推理,直到能给出最终答案。

ReAct 和 Function Calling 的关系:ReAct 是一种 Prompting 框架,描述的是推理和行动的交织模式;Function Calling 是 API 提供的具体工具调用机制。现代的 Agent 系统通常用 Function Calling API 来实现 ReAct 模式,两者是不同层次的概念。

ReAct 的优势是透明——可以看到模型的每一步推理和每一次工具调用,方便调试;在需要多步工具调用的任务上,比纯 CoT 效果好很多(CoT 无法真正获取外部信息,只能靠模型记忆)。

Tree-of-Thought:树状搜索推理

CoT 和 Self-Consistency 都是沿着一条(或多条)从问题到答案的线性路径推理。Tree-of-Thought(ToT,Yao et al. 2023)把这个过程扩展成树状搜索:在每个推理步骤,考虑多个可能的"下一步",形成分支;评估每个分支的"前景"(可能导向正确答案吗),剪掉看起来不好的分支,继续扩展好的分支;最终找到从问题到答案的最优路径。

ToT 的搜索策略可以是广度优先(BFS)或深度优先(DFS),取决于任务类型。对于"需要先把思路全部展开再判断哪条路对"的任务,BFS 更合适;对于"能尽早判断这条路是否有希望"的任务,DFS 更高效。

ToT 在几个被证明特别有效的任务上:需要枚举和剪枝的组合优化(如 24 点游戏)、创意写作中需要先规划大纲再写内容、以及需要多步战略规划的问题。

主要局限是成本极高——每个节点需要生成多个候选并评估,总 token 消耗可能是标准 CoT 的 10~50 倍。在大多数实际任务上,这个成本增加带来的收益并不显著,Self-Consistency 通常是更实用的替代方案。

Self-Consistency:推理链集成

Self-Consistency 前面已经在 CoT 章节介绍过原理,这里补充它和 ToT 的对比:

Self-Consistency 是"广度采样"——多次独立推理,最终答案投票;ToT 是"深度搜索"——在推理过程中就做分支和剪枝决策。Self-Consistency 更适合答案可以直接多数投票的任务(数学、选择题);ToT 更适合答案无法简单投票、但推理路径的质量本身可以被评估的任务(规划、创意生成)。

Least-to-Most Prompting:从简到繁

值得一提的变体是 Least-to-Most Prompting(Zhou et al. 2022):先把复杂问题分解成一系列从简单到复杂的子问题,按顺序依次解决,每个子问题的答案作为下一个子问题的输入。

这对于"组合泛化"任务(把学过的简单技能组合来解决没见过的复杂问题)有独特优势,在需要系统性拆解的任务(软件工程、多步数学推导)上效果很好。

三者的对比总结

方法适用任务额外成本透明度
CoT通用推理低(仅增加输出长度)
Self-Consistency有明确答案的推理高( 倍采样)
ReAct需要工具调用的任务中(多轮交互)
Tree-of-Thought需要枚举剪枝的复杂任务极高(树状扩展)
Least-to-Most可分解的复杂任务低(仅增加问题分解步骤)

面试时可以这样答

这几个方法都是在提升模型推理质量,但思路不同,适用场景也不同。

CoT 是基础,让模型把推理过程写出来,借助"草稿纸"提升多步推理准确率,Zero-shot 版本就是加一句 "let's think step by step",成本最低。

Self-Consistency 是 CoT 的集成版,多次采样取多数投票,在数学推理这类有确定答案的任务上能再提升 5%~15%,代价是成本翻几十倍,适合对精度要求高的场景。

ReAct 是推理和工具调用交织,Thought-Action-Observation 循环,专门为需要获取外部信息的任务设计,是 Agent 系统的核心模式,透明度高好调试。

Tree-of-Thought 最复杂,把推理扩展成树状搜索,适合需要枚举剪枝的任务(24 点游戏这类),但成本是标准 CoT 的十几倍,大多数实际场景里 Self-Consistency 更实用。

实际工程里先看能不能用 CoT 解决,再考虑 Self-Consistency,通常不需要 ToT。

常见追问

  1. Process Reward Model 和 Outcome Reward Model 在引导推理搜索上有什么区别?
  2. 在 Agent 系统里,ReAct 和纯 Function Calling 相比有什么优缺点?
  3. 如果 Self-Consistency 的多个推理链给出了几个不同答案,除了多数投票还有什么聚合策略?