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 Answer

4.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 answer

5. 示例 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 uncertainty

10. 评估指标

指标

说明

适用范式

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. 落地路线

  1. 先用 ReAct 实现通用 Agent baseline,打通工具、trace、错误恢复和停止条件。
  2. 挑选高频稳定任务,抽象为 ReWOO Planner + Worker + Solver。
  3. 为 ReWOO 增加 Validator:检查空结果、冲突证据、工具失败和计划依赖缺失。
  4. 对 Validator 未通过的分支启动局部 ReAct,而不是整条任务重跑。
  5. 建立评估集,按 accuracy、token、latency、tool call count、recovery rate 做 A/B。
  6. 沉淀工具调用 schema、错误协议和证据格式,避免每个任务重复设计。

13. 最终选型建议

判断问题

倾向方案

下一步行动是否强依赖刚拿到的观察?

是:ReAct;否:ReWOO。

任务能否提前拆成稳定子任务?

能:ReWOO;不能:ReAct。

是否对成本和延迟敏感?

敏感:ReWOO 或混合。

是否存在大量异常分支或交互页面?

存在:ReAct 或混合。

是否需要审计、复盘和可控执行?

两者都可以,但 ReWOO 更适合结构化治理。

14. 参考资料