第一部分:Agent推理模式谱系
Agent的推理模式可以看作一个光谱,一端是纯粹的"思考",另一端是纯粹的"行动",中间则是二者的结合。
1. 纯推理模式:只思考,不行动
这类模式主要用于解决复杂的推理问题,如数学、逻辑谜题,不涉及与外部环境交互。
- 链式思考(Chain-of-Thought, CoT) :模型在给出最终答案前,先生成一系列中间推理步骤。这就像考试时写出解题过程。
- 思维树(Tree of Thoughts, ToT) :不满足于单一的推理链,而是在每一步探索多个可能的"思维分支",评估其前景,并选择最有希望的方向继续探索或回溯。这更像下棋时的多步推演。
- 思维图(Graph of Thoughts, GoT) :将ToT的树状结构进一步泛化为图,允许不同的思维链进行合并、循环等更复杂的操作,形成推理网络。
2. 行动驱动模式:以行动为中心,以试错来推理
这类模式将推理隐含在行动与环境的交互反馈中。
- ReAct :核心是推理和行动的交错协同。这也是我们要重点讲解的。
- 反思:在执行一系列行动后,让Agent对整个过程和最终结果进行"反思"或"自我批评",总结经验教训,以改进未来的行为。这是对ReAct模式的一种补充。
- 计划与执行:先制定一个完整的、不依赖具体反馈的抽象计划,然后再逐步执行。这就像写代码前先画架构图。
第二部分:详解 ReAct 模式
ReAct 是 Re asoning + Act ing 的缩写,其核心思想极其朴素却强大:让大型语言模型同步生成"推理轨迹"和"具体行动",两者相互增强,协同解决复杂任务。
一个标准的ReAct循环如下:
- 思考:Agent收到用户输入后,首先进行推理:"我需要先找到2023年F1冠军是谁。"
- 行动:基于思考,它决定调用"搜索"工具,并输出一个具体的搜索API调用。
- 观察:环境返回搜索结果,比如"马克斯·维斯塔潘"。
- 再思考:基于观察,Agent继续推理:"现在我知道了冠军是维斯塔潘,下一步我需要找他的出生地。" 它也可能反思:"刚才搜索的结果不完整,我需要换一个更精确的查询。"
- 再行动:发起第二次搜索:"马克斯·维斯塔潘 出生地"。
- 再观察:得到结果"比利时 哈瑟尔特"。
- 最终回答:经过几轮循环,Agent整合信息,给出最终答案:"2023年F1冠军是维斯塔潘,他出生于比利时哈瑟尔特。"
ReAct的关键特性:
- 动态修正:它打破了传统"规划-执行"的死板,允许Agent在观察到行动结果后,动态调整下一步计划。如果搜索失败,它可以换个关键词;如果信息矛盾,它可以查证。
- 可解释性:人可以看到Agent的每一次"思考"和"观察",这使得其决策过程透明、可调试。
- 融合内外部知识:将模型内部的参数化知识("我知道需要搜索")与外部的工具知识(搜索引擎返回的结果)无缝结合,有效缓解了模型的幻觉问题。
第三部分:ReAct vs. CoT vs. ToT 核心区别
| 维度 | CoT | ToT | ReAct |
|---|---|---|---|
| 核心定义 | 线性、逐步推理 | 树状、多路径探索推理 | 推理与行动交错的协同过程 |
| 推理过程 | 静态的单一推理链 A→B→C→答案 |
动态多分支探索,可回溯 A→ (B1, B2...) → ... |
动态、循环交互: 思考→行动→观察→思考... |
| 与外部世界 | 完全隔绝。不获取、不使用任何外部信息。 | 完全隔绝。探索的是内部生成的"思维状态"。 | 强依赖。行动和观察是核心环节,用于获取真实世界知识。 |
| 问题解决 | 内部的、封闭的推理问题。如:数学应用题、逻辑推理。 | 需要策略探索和全局规划的问题。如:24点游戏、创意写作大纲、需要回溯的谜题。 | 开放式的、需要与外部环境交互的任务。如:信息检索、控制数字设备、对话式购物等。 |
| 核心机制 | 生成中间推理步骤来分解问题。 | 生成、评估、搜索多个"下一步思考"分支。 | 用行动从环境获取事实,用推理来处理事实并指导下一步行动。 |
区分它们的一个直观比喻:
- CoT 像一位学生闭卷考试,在脑中一步步演算,直接写出过程和答案。
- ToT 像一位棋手,在脑海中推演接下来的N种走法和对手的应对,评估每种走法的胜率,选择最优策略。整个过程仍是脑内活动。
- ReAct 则像一位拿着手机的科学侦探。他会思考:"凶手可能用的是氰化物。" (思考) 然后马上行动 :"查询我的化学手册,氰化物的中毒症状是什么?" (行动) 看到结果 (观察) 后,他继续推理:"这和目击者描述的症状不符。我得换个方向,查查其他毒物......" 他通过不断与外部世界互动,最终拼凑出真相。
总结一下,ReAct之所以在Agent构建中占据核心地位,正是因为它解决了纯推理模式最大的局限:无法利用外部工具和真实世界信息来校准知识、执行操作。 而在实际的高级Agent系统中,这些模式常常是组合使用的。例如,在ReAct循环的单个"思考"步骤中,可以调用ToT来求解一个子问题,从而形成"ReAct + ToT"的混合策略,兼顾了外部交互与内部复杂推理。
面试回答
关于 Agent 的推理模式,目前主流的主要有三类:
- 第一类是纯推理型,像思维链CoT、思维树ToT,它们主要在模型内部做文字推理,不跟外界交互;
- 第二类是行动型,比如 ReAct,它把推理和行动结合起来;
- 第三类更高级一点,比如自我反思Reflexion 、规划与执行Plan-and-Solve等。
重点说一下 ReAct,它的核心理念就是:让模型一边思考,一边行动,同时观察结果再继续思考。
举个例子,如果用 ReAct 模式让 Agent 查'今天北京的天气并决定是否带伞',它会这样运作:
- Thought(思考) :我需要先查天气。
- Action(行动) :调用天气 API 查询北京。
- Observation(观察) :接口返回'大雨'。
- Thought(思考) :要下雨,我得带伞。
- Action(行动) :输出'建议带伞'。
这种模式最大的好处是能打破模型的'知识幻觉',模型不知道实时信息没关系,它会通过工具去获取,真正做到接地气。
对比 CoT、ToT 和 ReAct,它们三者的区别:
- 先说 CoT(思维链) :
-
- 它是一条线走到底。模型在内部'自言自语',把复杂问题拆成一步步逻辑推导。
- 缺点:它是静态的,没法纠正错误。比如第一步算错了,后面全错,而且模型拿不到外部真实信息。
- 再说 ToT(思维树):
-
- 它是CoT的升级版,不再是单条线,而是像树一样分叉。模型会在每一步尝试多种可能性,走不通就回溯换一条路。
- 适用场景:需要大量探索的数学题、策略游戏。缺点是计算量爆炸,成本高。
- 最后回到 ReAct:
-
- 它的轨迹更像是一个循环(思考-行动-观察) 。它不是纯内部推理,而是跟外部环境强交互。
- 核心区别:CoT只会'想',ReAct既会'想'也会'做'。在需要查数据库、上网搜索、操作软件的任务里,ReAct远强于CoT和ToT。
简单总结一句话:CoT 适合逻辑推导,ToT 适合复杂探索,ReAct 适合需要调用工具的真实任务环境。
在实际开发中,我不会只用一种。比如我会让 Agent 先用 CoT 做快速规划,然后在需要查信息的具体步骤上切换成 ReAct 模式调用工具,这其实就是更高级的 Plan-and-Solve 或 LLM Compiler 的思路。
追问:ReAct 有什么缺点?
ReAct 也有坑。因为要多次调用 LLM 和工具,延迟比较高;而且模型在'思考-行动'之间切换时,容易陷入死循环,比如反复查同一个东西。生产环境里通常要加最大循环次数限制 或者用格式约束来保证它收敛。