ReAct 速读精要¶
ReAct 速读精要¶
《ReAct: Synergizing Reasoning and Acting in Language Models》是 ICLR 2023 的一篇经典 Agent 论文。它提出的核心思想非常直接:让语言模型在同一条轨迹里交替生成推理(reasoning trace)和动作(action)。推理帮助模型规划、跟踪状态、处理异常;动作帮助模型访问外部环境,例如 Wikipedia、文本游戏环境、网页购物环境,从而获得新信息并修正推理。
核心问题¶
ReAct 要解决的问题是:过去的“推理”和“行动”通常被分开研究,CoT 会推理但不接触外部世界,Act-only 会行动但缺少抽象规划和状态跟踪。
ReAct 的核心答案是:把语言推理和环境行动交错放进同一条生成轨迹中,让模型一边想、一边查、一边做、一边根据观察更新下一步。这让语言模型不只是“写出答案”,而是能像一个简单智能体一样与外部环境闭环交互。
摘要¶
大型语言模型在语言理解和交互式决策任务上都展现了能力,但推理能力和行动能力此前主要被分开使用。ReAct 把二者合在一起:模型既生成自然语言推理轨迹,也生成任务相关动作,并且二者交替出现。
在知识密集型任务中,ReAct 可以通过 Wikipedia API 检索事实,减少 CoT 的幻觉和错误传播;在交互式决策任务中,ReAct 可以用推理来拆解目标、跟踪子任务、调整行动计划。论文在 HotpotQA、FEVER、ALFWorld、WebShop 上验证了 ReAct 的有效性,并强调它的可解释性和可控性。
1 引言¶
人类解决任务时,经常把语言化思考和具体行动交织在一起。做饭时,人会一边检查冰箱、一边思考下一步;找资料时,人会一边搜索、一边根据搜索结果更新问题。语言在这里不只是输出结果,而是工作记忆、计划和异常处理工具。
CoT 的问题在于,它虽然能生成推理链,但推理是静态的,完全依赖模型内部知识,不和外部世界交互。这容易导致事实幻觉和错误传播。Act-only 的问题相反:模型可以执行动作,但缺少高层语言推理,很容易不知道为什么要做下一步,也难以维护任务进度。

Figure 1: Comparison of 4 prompting methods.
图1:四种提示方法的比较。
解释:图1对比了标准提示、CoT、Act-only 和 ReAct。标准提示直接回答;CoT 只推理;Act-only 只搜索或行动;ReAct 则在 Thought、Action、Observation 之间循环。这个图是全文的核心图:ReAct 的关键不是多一个动作接口,而是把“想”和“做”放进同一个闭环轨迹。
论文的贡献可以概括为四点:提出 ReAct 这种推理-行动协同范式;在问答、事实验证、文本游戏和网页购物中验证效果;通过消融分析说明推理对行动、行动对推理都重要;讨论 prompting 设置下的局限,并初步探索微调 ReAct 轨迹的潜力。
2 ReAct:协同推理与行动¶
ReAct 的形式化非常简洁。普通智能体在时间步 t 接收环境观察 o_t,根据上下文选择动作 a_t。上下文包含过去观察和动作:
ReAct 的关键改造是扩展动作空间:
其中 A 是环境动作空间,L 是语言空间。也就是说,模型下一步可以生成一个真实动作,也可以生成一段自然语言 thought。
语言 thought 不直接改变外部环境,因此不会得到环境 observation;它的作用是更新内部上下文,帮助后续推理或行动。动作则会作用于环境,并返回 observation。于是轨迹变成:
Thought → Action → Observation → Thought → Action → Observation
这里的 thought 可以承担多种功能:拆解任务目标、制定行动计划、提取观察中的关键信息、注入常识、跟踪进度、发现异常、调整搜索方向、综合最终答案。
ReAct 在不同任务中的 thought 密度不同。知识问答和事实验证需要密集的 Thought-Action-Observation 交替,因为每次检索结果都可能影响下一步推理。决策任务如 ALFWorld 和 WebShop 动作很多,thought 可以更稀疏,只在关键位置出现,例如拆解目标、决定下一子目标、判断是否购买。
ReAct 的几个特点也来自这个设计:
- 直观易设计:标注者只需要在动作轨迹中写下自然语言想法。
- 通用灵活:不同任务可以有不同动作空间和 thought 出现频率。
- 鲁棒性更好:推理帮助行动,行动也用外部信息校正推理。
- 可解释、可控制:人可以直接检查 thought,也可以通过编辑 thought 纠正模型行为。
3 知识密集型推理任务¶
ReAct 首先被用于 HotpotQA 和 FEVER。两者都需要知识检索和推理:HotpotQA 是多跳问答,FEVER 是事实验证。模型只拿到问题或声明,不直接给支持段落,需要依赖内部知识或外部检索。
3.1 设置¶
论文设计了一个简单 Wikipedia API,包含三类动作:
search[entity]:搜索实体页面,返回前几句或相似实体。lookup[string]:在当前页面中查找包含某字符串的下一句。finish[answer]:结束任务并输出答案。
这个 API 故意比较弱,不是强检索器。目的不是靠检索系统堆性能,而是模拟人类如何通过搜索、阅读、再搜索来解决问题,并迫使模型用语言推理决定下一步查什么。
3.2 方法¶
HotpotQA 和 FEVER 使用少量人工写的 ReAct 示例作为 few-shot prompt。每条轨迹由 Thought、Action、Observation 交替组成。
这些 thought 的作用很具体:拆解问题,决定先搜哪个实体;从 Wikipedia observation 中抽取关键信息;发现搜索失败后改写查询;做常识或算术推理;最后综合答案。
对比方法包括:
- Standard:直接回答。
- CoT:只保留推理,不使用行动和观察。
- Act:只保留行动,不写 thought。
- CoT-SC:采样多条 CoT,用多数答案。
- ReAct 与 CoT-SC 的组合:在内部知识不足或 ReAct 没完成时切换到另一种方式。
这里最重要的设计动机是:CoT 擅长组织推理结构,但容易幻觉;ReAct 更接地,因为它能通过外部检索获得事实,但结构约束也可能降低推理灵活性。因此论文还探索了 ReAct 和 CoT-SC 的互补。
3.3 结果与观察¶
HotpotQA 和 FEVER 上,ReAct 相比 Act 更好,说明 thought 对行动有价值。FEVER 上 ReAct 也明显优于 CoT,因为事实验证很依赖精确、外部、可更新的信息。
关键结果:
| 方法 | HotpotQA EM | FEVER Acc |
|---|---|---|
| Standard | 28.7 | 57.1 |
| CoT | 29.4 | 56.3 |
| CoT-SC | 33.4 | 60.4 |
| Act | 25.7 | 58.9 |
| ReAct | 27.4 | 60.9 |
| CoT-SC → ReAct | 34.2 | 64.6 |
| ReAct → CoT-SC | 35.1 | 62.0 |
单独看 ReAct,它不总是压过 CoT;但 ReAct 与 CoT-SC 结合后效果最好。这说明内部知识推理和外部信息检索是互补的。
Table 2 分析了 HotpotQA 的成功与失败类型。
表2:ReAct 和 CoT 在 HotpotQA 上的成功与失败模式。
解释:CoT 的主要失败来自幻觉,失败样本中 56% 是 hallucination;ReAct 的轨迹更 grounded,成功样本中的 false positive 也低于 CoT。但 ReAct 也有自己的问题:如果搜索结果不够有用,模型容易被错误检索带偏;还有时会重复生成相同 thought/action,陷入循环。

Figure 3 展示了 prompting 和 finetuning 的缩放结果。
图3:HotpotQA 上 ReAct 与基线在 prompting 和 finetuning 下的缩放结果。
解释:小模型直接 prompting ReAct 较难,因为要同时学习推理和行动;但用 3000 条正确 ReAct 轨迹微调后,ReAct 成为最强方法。这说明 ReAct 不只是 prompt trick,也适合作为一种可训练的行为轨迹格式。
4 决策任务¶
ReAct 还被用于 ALFWorld 和 WebShop。这两个任务不是单纯回答问题,而是需要模型在环境中多步行动。
ALFWorld 是文本版家庭环境任务,例如找到物品、清洁、加热、放置。任务可能需要很多步,模型要计划、找物品、跟踪当前状态。
WebShop 是网页购物环境,模型需要根据用户需求搜索商品、筛选选项并购买。环境包含真实商品标题、描述和选项,观察文本噪声更大。
ReAct 在这些任务里使用稀疏 thought。模型不需要每一步都想,而是在关键位置推理:拆目标、决定搜索方向、判断当前商品是否满足约束、跟踪子目标是否完成。
关键结果:
| 任务 | 关键结果 |
|---|---|
| ALFWorld | ReAct best-of-6 平均成功率 71%,Act best-of-6 为 45%,BUTLER 为 37% |
| WebShop | ReAct 成功率 40.0%,Act 为 30.1%,IL 为 29.1%,IL+RL 为 28.7% |
ALFWorld 中,Act 没有 thought,常见问题是不会正确拆解目标,或者忘记当前环境状态。ReAct 通过 sparse reasoning 维护子目标和搜索策略,因此整体更稳。
WebShop 中,ReAct 能把用户指令和商品页面里的噪声文本连接起来,例如判断某个尺寸、颜色、价格是否符合需求。这说明推理对行动的价值不只是“解释”,而是直接影响动作选择。
论文还比较了 ReAct 和 Inner Monologue 风格的 ReAct-IM。ReAct-IM 更像密集外部反馈,但缺少灵活的内部高层推理。ALFWorld 上 ReAct 明显高于 ReAct-IM,说明只反应环境反馈不够,模型还需要主动拆目标、用常识判断物品位置、决定下一子任务。
5 相关工作¶
ReAct 连接了两条研究线。
第一条是语言模型推理。CoT、Self-Consistency、Least-to-Most、STaR、Scratchpad 等工作都说明 LLM 可以通过中间推理提升任务表现。但这些方法通常只在模型内部推理,缺少外部行动和环境反馈。ReAct 的区别是把行动和 observation 放进推理流中,让推理不再完全依赖内部知识。
第二条是语言模型决策。WebGPT、SayCan、Inner Monologue 等方法都让 LLM 参与环境行动或规划。但很多方法不显式建模自然语言推理轨迹,或者依赖昂贵的人类反馈和强化学习。ReAct 则用少量示例把 thought 和 action 一起写进 prompt,使模型以更便宜、更可解释的方式学会行动策略。
ReAct 的位置可以概括为:它把 CoT 的语言推理能力和语言模型智能体的环境行动能力接在了一条闭环轨迹里。
6 结论¶
ReAct 是一个简单但影响很大的范式:让语言模型交替生成推理和动作。推理用于计划、记忆、抽象和纠错;动作用于访问外部知识或改变环境;观察再反过来更新推理。
它的优势不仅在指标上,也在可解释性上。人可以直接看到模型为什么搜索某个实体、为什么选择某个动作、为什么修正计划。相比纯 CoT,ReAct 更接地;相比 Act-only,ReAct 更有计划。
局限也很清楚:复杂任务和大动作空间需要更多示例,容易受上下文长度限制;prompting 方式下,模型有时会循环或搜索失败;未来需要更多高质量轨迹、多任务训练,以及与强化学习等方法结合。
最终核心¶
ReAct 的思想链路可以压成一句:
CoT 只会想,Act-only 只会做;ReAct 让语言模型在同一条轨迹里交替“想”和“做”,用推理指导行动,用行动获取信息来修正推理。
这篇论文最重要的贡献不是某个具体 benchmark 的分数,而是提出了一种后来 Agent 系统非常核心的执行格式:Thought → Action → Observation 的闭环。