文章目录
- 前言
- 先澄清一个最常见的误区
- [ReAct 的六步循环](#ReAct 的六步循环)
- [ReAct 解决了什么,又带了什么新坑](#ReAct 解决了什么,又带了什么新坑)
- [Plan-and-Execute 怎么补位](#Plan-and-Execute 怎么补位)
- 选型决策
- 面试怎么答
- 结语
前言
很多面试者对 ReAct Agent 存在理解误区,分不清模型和代码各自承担的职责。本文拆解 ReAct 完整运行流程,剖析它的两大工程缺陷,对比 Plan-and-Execute 优化方案,贴合面试答题逻辑,帮你精准吃透 Agent 推理架构。
先澄清一个最常见的误区
很多人面试说到 ReAct 时,张口就是"模型自己在循环调用工具"。面试官听到这句话,脑子里直接打上一个标签:你不懂。
实际是怎么回事?模型不负责循环。模型每次只做一件事:看一眼当前的 history,输出下一步是什么(Thought + Action),或者直接给最终答案(Final Answer)。输出完它就停了,等着代码框架把结果喂回来。循环是谁做的?是你的代码。模型是大脑,代码框架是身体。
ReAct 的六步循环
从代码框架视角,ReAct 一次完整迭代是六个步骤:
- 拼接 prompt:把系统提示、用户输入、历史 Thought / Action / Observation 全拼成一段 prompt
- 调 LLM:把 prompt 发给模型,等它返回
- 检测 Final Answer:判断输出里有没有 Final Answer,有就结束
- 解析 Action:没有 Final Answer 就从输出里拆出 Action(工具名 + 参数)
- 执行工具:调用外部工具,拿到 Observation
- 追加到 history:把 Observation 追加进 history,回到步骤 1
模型只参与了第 2 步的输出。其余五个步骤全是代码框架的事。面试里把这个关系说清楚,基本分到手。
ReAct 解决了什么,又带了什么新坑
ReAct 出现之前,CoT 让模型能写出推理过程,但它只能纯文字推,调用不了外部工具。ReAct 把 Reasoning 和 Acting 合在一起,每一步都能调用外部工具获取真实信息,这是它相对于 CoT 的核心进步。
但它也带进来两个工程上很实在的问题。
第一个坑:循环漂移。 想象一个没有导航的旅行者,每到一个路口都根据眼前的路牌临时决定往哪走。路牌清晰的时候能顺利到目的地,但路上的"风景"也在不断吸引他注意力,走着走着就拐进岔路,忘了最初要去哪。ReAct 每一步都是根据当前 history 重新决策,缺少全局计划约束方向。步骤越长,history 越长,漂移概率越大。
第二个坑:错误传播。 ReAct 的每一步决策都建立在前面所有步骤的结果之上。如果中间某一步拿到了错误信息,后面的推理全部被带跑。更麻烦的是,ReAct 没有内置"回头检查"机制,它不会停下来问"前面那步的结果靠谱吗",默认前面的 Observation 都对,一路往前冲。错误出现在早期步骤,整条链后面全白费。
两个问题的根源是同一个:ReAct 是纯粹的"前向推理",走一步看一步,没有全局规划约束方向,也没有反思机制纠正错误。
Plan-and-Execute 怎么补位
针对漂移问题,工程上引入了 Plan-and-Execute,分两个阶段:
规划阶段(Planner): 让 LLM 先不急动手,站在全局角度想清楚:这个任务分几步?每一步做什么?步骤间的依赖是什么?输出一份结构化的执行计划。这一步 LLM 只做规划,不执行任何工具调用。
执行阶段(Executor): 拿着计划按顺序执行。每一步的执行本身可以用 ReAct 来跑,执行器处理单个子任务时仍然"思考→行动→观察"地循环。区别在于,执行器始终知道自己在整体计划的哪一步、下一步做什么,不会像 ReAct 那样漫无目的地漂移。
一个比较直观的类比:Plan-and-Execute 负责"做什么"的全局规划,ReAct 负责"怎么做"的单步执行。两者是配合关系,不是替代关系。
选型决策
ReAct 的优势是灵活,每一步都能根据最新情况调整,适合任务边界不明确、需要探索性获取信息的场景(开放式问答、信息搜索)。代价是容易漂移,而且每一步都把完整 history 带上调 LLM,步骤多了 token 消耗线性增长。
Plan-and-Execute 的优势是有全局视野,不容易跑偏,适合目标明确、需要多步骤协作的复杂任务(深度研究、长文写作、多工具协同的数据分析)。代价是初始规划本身就要一次 LLM 调用,任务如果一两步就搞定,规划这一步就是多余开销。
实际工程里通常混合用:Plan-and-Execute 做全局规划,ReAct 做每步执行。规划阶段用更强的模型保证方向正确,执行阶段用更快更便宜的模型控制成本。
面试怎么答
回到面试场景,核心就两个点:
- ReAct 的本质是"思考→行动→观察"的循环,推理过程显式化,又能动态调用外部工具,解决了 CoT 只能纯文字推理的局限
- 这个循环是代码框架驱动的,模型每次只输出 Thought + Action,你的代码负责解析、执行工具、把 Observation 填回 history,再传给模型进入下一轮
说清这两点之后,主动提一下两个实战局限(漂移和错误传播),再说 Plan-and-Execute 是怎么通过"先规划再执行"解决漂移的,以及实际项目里两者经常混合使用。整个回答的深度就出来了。
结语
ReAct 是 Agent 基础推理框架,但缺少全局规划能力,结合 Plan-and-Execute 搭配使用,才能兼顾灵活探索与任务可控性,这套组合思路也是工业级智能体项目的主流落地方案。