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 把推理步骤和工具调用交织在一起:
每一轮 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。
常见追问
- Process Reward Model 和 Outcome Reward Model 在引导推理搜索上有什么区别?
- 在 Agent 系统里,ReAct 和纯 Function Calling 相比有什么优缺点?
- 如果 Self-Consistency 的多个推理链给出了几个不同答案,除了多数投票还有什么聚合策略?