ReAct vs ReWOO 调研 & 对比
对比 ReAct 与 ReWOO 两种 LLM Agent 工具调用范式,覆盖机制、成本、场景、工程实现和混合架构建议。
📌
核心结论:ReAct 是“观察驱动”的动态 Agent 范式,强在不确定环境中的逐步纠偏;ReWOO 是“规划驱动”的高效率增强语言模型范式,强在固定或半固定流程里的成本、延迟和可观测性。工程上不必二选一:更稳的方案是以 ReWOO 承担全局规划与并行执行,以 ReAct 处理失败分支、信息不足和交互式环境。
1. 背景与问题定义
LLM Agent 的核心问题是:模型如何把“思考”和“使用工具”组织起来。传统 Chain-of-Thought 只解决推理,不直接连接外部世界;单纯 Action Plan 又容易缺少中间推理和异常处理。ReAct 与 ReWOO 都在解决“推理 + 工具调用”的编排问题,但二者选择了相反的时序结构。
范式 | 核心问题 | 关键取舍 |
|---|---|---|
ReAct | 如何让模型边看外部反馈边调整行动? | 用更多轮次换灵活性和纠错能力。 |
ReWOO | 如何减少重复 prompt、重复推理和串行等待? | 用预规划换成本、延迟和结构化执行。 |
2. 论文脉络
2.1 ReAct
ReAct 论文全名是 ReAct: Synergizing Reasoning and Acting in Language Models,arXiv:2210.03629。论文提出让 LLM 交替生成 reasoning traces 和 task-specific actions。推理轨迹用于维护、更新行动计划和处理异常;行动用于访问知识库或外部环境获取信息。
论文覆盖的任务包括 HotpotQA、FEVER、ALFWorld、WebShop 等。其关键价值不是单纯提升指标,而是降低幻觉、缓解错误传播,并产生更接近人类任务求解过程的轨迹。
2.2 ReWOO
ReWOO 论文全名是 ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models,arXiv:2305.18323。论文指出,交替式工具调用会反复把上下文、观察和中间推理送入 LLM,导致冗余 prompt、重复执行和较高计算复杂度。
ReWOO 将流程拆成 Planner、Worker、Solver:Planner 在不等待观察的情况下生成带变量的完整计划;Worker 执行工具并填充变量;Solver 基于计划和观察结果汇总答案。论文报告其在 HotpotQA 上达到约 5x token efficiency 和约 4% accuracy improvement,并展示了将 175B GPT-3.5 的推理能力迁移到 7B LLaMA 的潜力。
3. 架构机制对比
维度 | ReAct | ReWOO |
|---|---|---|
核心循环 | Thought → Action → Observation → Thought | Plan → Execute → Solve |
计划生成 | 分步生成,受上一轮观察影响 | 一次性生成,观察前完成计划 |
工具调用 | 通常串行,每次调用后回到模型 | 工具调用可批量化、并行化、缓存化 |
上下文成本 | 高;历史轨迹会不断增长 | 低;Planner 与 Worker 解耦,减少重复输入 |
异常处理 | 天然支持,观察异常后可改计划 | 需要额外 Validator 或 fallback 机制 |
可解释性 | 强,完整轨迹直接展示决策过程 | 强,计划结构可审计,但临场纠偏较弱 |
适配任务 | 动态、交互、不确定、多分支 | 可分解、可预规划、工具结果稳定 |
4. 流程示意
4.1 ReAct 流程
User Goal ↓LLM Thought ↓Tool Action ↓Observation ↓LLM updates plan ↓Repeat until Final Answer4.2 ReWOO 流程
User Goal ↓Planner: Plan step 1 #E1 = Tool[A] Plan step 2 using #E1 #E2 = Tool[B] ↓Worker: Execute #E1, #E2 ↓Solver: Fill variables, reason over evidence, final answer5. 示例 Prompt 结构
5.1 ReAct 示例
Question: ...Thought: I need to identify the entity first.Action: Search[entity]Observation: ...Thought: The observation mentions a related event. I should verify it.Action: Search[event + source]Observation: ...Thought: I now have enough evidence.Final Answer: ...5.2 ReWOO 示例
Plan: Find the basic profile of the target company.#E1 = Search[target company profile]Plan: Find the latest product or research related to #E1.#E2 = Search[#E1 product research]Plan: Compare #E1 and #E2 and summarize implications.Solver: Use #E1 and #E2 to produce the final answer.6. 成本、延迟与可靠性
指标 | ReAct 表现 | ReWOO 表现 | 工程含义 |
|---|---|---|---|
Token 成本 | 随步骤数线性甚至超线性增长 | 更可控,工具阶段不必反复调用 LLM | 高频任务优先考虑 ReWOO。 |
端到端延迟 | 串行工具调用 + 多轮模型调用 | 可并行执行部分工具调用 | 检索汇总类任务可显著降延迟。 |
计划质量 | 可随观察不断修正 | 依赖初始 Planner 能力 | 动态任务需要 ReAct fallback。 |
工具失败 | 模型可直接观察失败并调整 | 需要 Worker/Validator 记录失败并触发重规划 | ReWOO 必须显式设计失败协议。 |
输出稳定性 | 受中间循环影响,可能发散 | 结构更稳定 | 报告、报表、批处理更适合 ReWOO。 |
7. 适用场景矩阵
场景 | 推荐 | 理由 | 注意事项 |
|---|---|---|---|
网页浏览、登录态操作、表单填写 | ReAct | 页面状态每一步都可能变化。 | 设置最大循环步数,避免卡死。 |
生产问题排查 | ReAct + 局部 ReWOO | 需要边观察边调整,但日志查询可批量化。 | 把 trace、SQL、LogQL 查询作为结构化证据。 |
竞品调研、技术调研 | ReWOO | 可拆成搜索、阅读、提取、对比、汇总。 | 需要证据去重和来源可信度评分。 |
知识库问答 | ReWOO 或 RAG + ReWOO | 检索子任务可预先规划。 | 对冲突证据要有裁决逻辑。 |
数据报表生成 | ReWOO | SQL、指标、维度可结构化规划。 | Planner 输出应严格约束为 schema。 |
开放式复杂任务 | 混合 | 先全局规划,再对不确定分支 ReAct。 | 需要 Validator 判断何时 fallback。 |
8. 工程实现建议
8.1 ReAct 实现要点
- 定义工具白名单,限制模型可以调用的 Action 类型。
- 每轮必须输出结构化字段:thought、action、action_input、observation、stop_reason。
- 设置最大步数、最大 token、最大工具失败次数。
- 加入循环检测:相同 action_input 连续出现时触发停止或人工接管。
- 对外展示时可以隐藏完整 thought,只展示可审计的 action trace 和 evidence。
8.2 ReWOO 实现要点
- Planner 输出必须是可解析结构,例如 JSON、YAML 或 DSL,不要只输出自然语言。
- 每个执行步骤需要唯一变量名,例如 #E1、#E2,并声明依赖关系。
- Worker 只负责执行,不负责重新规划;失败、超时、空结果必须结构化返回。
- Solver 只消费计划、变量结果和证据,不重新调用外部工具,避免职责混乱。
- Validator 判断证据完整性、冲突、工具失败和是否需要 fallback 到 ReAct。
8.3 推荐数据结构
{ "goal": "compare ReAct and ReWOO", "steps": [ { "id": "E1", "tool": "search", "input": "ReAct paper arxiv", "depends_on": [] }, { "id": "E2", "tool": "search", "input": "ReWOO paper arxiv", "depends_on": [] }, { "id": "E3", "tool": "summarize", "input": "compare #E1 and #E2", "depends_on": ["E1", "E2"] } ]}9. 混合架构推荐
✅
推荐把 ReWOO 作为主干,把 ReAct 作为异常恢复机制。这样既能控制成本和延迟,又不会牺牲复杂任务中的动态纠偏能力。
Planner (ReWOO) ↓Static task graph ↓Worker pool: search / database / browser / code / API ↓Validator: - enough evidence? - conflicting evidence? - tool failure? - stale data? ↓If pass: SolverIf fail: Local ReAct loop for failed branch ↓Final answer with evidence and uncertainty10. 评估指标
指标 | 说明 | 适用范式 |
|---|---|---|
Task success rate | 最终任务是否完成。 | 两者都需要。 |
Answer accuracy | 答案正确性,适合 QA、事实验证和报告类任务。 | 两者都需要。 |
Token per task | 单任务平均 token 消耗。 | ReWOO 优势指标。 |
Latency p50 / p95 | 端到端耗时。 | ReWOO 优势指标。 |
Tool call count | 工具调用次数与重复调用率。 | 两者都需要。 |
Recovery rate | 工具失败后能否恢复。 | ReAct / 混合架构关键指标。 |
Trace auditability | 是否能复盘每一步行动和证据。 | 两者都需要。 |
11. 风险与治理
- 幻觉风险:ReAct 可能在观察不足时继续编造推理;ReWOO 可能在 Planner 阶段生成错误依赖。
- 循环风险:ReAct 更容易重复搜索或陷入无效行动,需要步数与重复检测。
- 计划失效:ReWOO 对动态环境敏感,执行时若观察与计划假设不一致,需要触发重规划。
- 证据污染:多工具结果可能冲突,Solver 必须保留来源、时间、置信度和冲突处理策略。
- 权限与安全:工具调用要做最小权限、参数校验、敏感数据脱敏和操作确认。
12. 落地路线
- 先用 ReAct 实现通用 Agent baseline,打通工具、trace、错误恢复和停止条件。
- 挑选高频稳定任务,抽象为 ReWOO Planner + Worker + Solver。
- 为 ReWOO 增加 Validator:检查空结果、冲突证据、工具失败和计划依赖缺失。
- 对 Validator 未通过的分支启动局部 ReAct,而不是整条任务重跑。
- 建立评估集,按 accuracy、token、latency、tool call count、recovery rate 做 A/B。
- 沉淀工具调用 schema、错误协议和证据格式,避免每个任务重复设计。
13. 最终选型建议
判断问题 | 倾向方案 |
|---|---|
下一步行动是否强依赖刚拿到的观察? | 是:ReAct;否:ReWOO。 |
任务能否提前拆成稳定子任务? | 能:ReWOO;不能:ReAct。 |
是否对成本和延迟敏感? | 敏感:ReWOO 或混合。 |
是否存在大量异常分支或交互页面? | 存在:ReAct 或混合。 |
是否需要审计、复盘和可控执行? | 两者都可以,但 ReWOO 更适合结构化治理。 |
14. 参考资料
- ReAct: Synergizing Reasoning and Acting in Language Models,arXiv:2210.03629。
- ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models,arXiv:2305.18323。
- LangChain / LangGraph Agent 与 ReWOO 实现示例。