ReAct:在语言模型中协同推理与行动

发表于 ICLR 2023 会议论文

作者: Shunyu Yao*¹, Jeffrey Zhao², Dian Yu², Nan Du², Izhak Shafran², Karthik Narasimhan¹, Yuan Cao²

¹ 普林斯顿大学计算机科学系 · ² Google Research, Brain 团队

项目主页: https://react-lm.github.io/


摘要

尽管大型语言模型(LLM)在语言理解和交互式决策任务中展现出了令人印象深刻的能力,但其推理(如链式思维提示)和行动(如动作计划生成)能力主要被作为独立课题研究。在本文中,我们探索使用 LLM 以交替方式同时生成推理轨迹和任务特定动作,从而在两者之间实现更大的协同效应:推理轨迹帮助模型归纳、追踪和更新行动计划并处理异常情况,而行动则允许模型与知识库或环境等外部来源交互以获取额外信息。

我们将该方法命名为 ReAct,并将其应用于多种语言和决策任务,证明了其相较于最先进基线的有效性,以及相较于不含推理或行动组件的方法在人类可解释性和可信度方面的改进。具体而言:

  • 在问答任务(HotpotQA)和事实验证任务(Fever)上,ReAct 通过与简单的 Wikipedia API 交互,克服了链式思维推理中常见的幻觉和错误传播问题,并生成了比无推理轨迹基线更具可解释性的类人任务求解轨迹。
  • 在两个交互式决策基准(ALFWorld 和 WebShop)上,ReAct 在仅使用一到两个上下文示例的情况下,分别以 34%10% 的绝对成功率优于模仿学习和强化学习方法。

1 引言

人类智能的一个独特特征是能够将面向任务的行动语言推理(或内部语言)无缝结合。这种能力在理论上对于实现自我调节或策略化以及维持工作记忆发挥着重要作用。

以在厨房烹饪为例。在任意两个具体动作之间,我们可能会用语言进行推理:

  • 追踪进度:"现在所有东西都切好了,我应该烧一壶水"
  • 处理异常或调整计划:"我没有盐了,让我用酱油和胡椒代替"
  • 识别何时需要外部信息:"如何揉面团?让我在网上搜索一下"

我们也可能执行行动(打开食谱阅读配方、打开冰箱、检查食材)来支持推理并回答问题("我现在能做什么菜?")。这种"行动"与"推理"之间的紧密协同使人类能够快速学习新任务并进行稳健的决策或推理,即使在前所未见的情况下或面对信息不确定性时也是如此。

近期的研究已经暗示了将语言推理与交互式决策相结合的可能性:

  • 一方面,经过适当提示的 LLM 已展现出涌现能力,可以执行多步推理轨迹以在算术、常识和符号推理任务中推导出答案。然而,这种"链式思维"推理是一个静态黑盒——模型使用其内部表示来生成思维,并未基于外部世界进行 grounding,这限制了其反应性推理或更新知识的能力,可能导致事实幻觉错误传播
  • 另一方面,近期工作探索了使用预训练语言模型在交互式环境中进行规划和行动,重点是通过语言先验预测动作。然而,这些方法并未利用语言模型对高层目标进行抽象推理或维持工作记忆来支持行动。

在本工作中,我们提出了 ReAct,一种结合语言模型推理和行动的通用范式,用于解决多种语言推理和决策任务。ReAct 提示 LLM 以交替方式生成与任务相关的语言推理轨迹和动作,使模型能够:

  1. 执行动态推理——创建、维护和调整高层行动计划(reason to act
  2. 与外部环境交互(如 Wikipedia)——将额外信息纳入推理(act to reason

2 ReAct:协同推理 + 行动

2.1 基本设定

考虑一个智能体与环境交互进行任务求解的通用设定。在时间步 t,智能体从环境中接收观察 oₜ,并按照某个策略 π(aₜ|cₜ) 采取动作 aₜ,其中 cₜ = (o₁, a₁, ···, oₜ₋₁, aₜ₋₁, oₜ) 是智能体的上下文。

2.2 核心思想

ReAct 的思想很简单:将智能体的动作空间扩充为 Â = A ∪ L,其中 L 是语言空间。语言空间中的动作(称为思维推理轨迹)不影响外部环境,因此不会产生观察反馈。相反,思维旨在通过对当前上下文进行推理来组合有用信息,并更新上下文以支持未来的推理或行动。

有用思维的类型包括:

  • 分解任务目标并创建行动计划
  • 注入与任务求解相关的常识知识
  • 从观察中提取重要部分
  • 追踪进度并转换行动计划
  • 处理异常并调整行动计划

2.3 实现方式

在本文中,我们主要关注使用冻结的大型语言模型 PaLM-540B,通过少样本上下文示例来提示其生成领域特定动作和自由形式语言思维。每个上下文示例是一个人类完成动作、思维和环境观察的轨迹。

  • 对于推理为主的任务:交替生成思维和动作,任务求解轨迹由多个"思维-动作-观察"步骤组成
  • 对于决策任务(可能涉及大量动作):思维仅需要在轨迹中最相关的位置稀疏出现

2.4 ReAct 的独特特性

  • A) 直观且易于设计:设计 ReAct 提示很简单,人类标注者只需在所采取的动作之上用语言写下思维即可
  • B) 通用且灵活:适用于具有不同动作空间和推理需求的多种任务
  • C) 高性能且稳健:在仅从一到六个上下文示例中学习的情况下表现出强泛化能力
  • D) 与人类对齐且可控:提供可解释的顺序决策和推理过程,人类可以轻松检查推理和事实正确性

3 知识密集型推理任务

3.1 实验设定

数据集:

  1. HotPotQA:多跳问答基准,需要对两个或更多 Wikipedia 段落进行推理
  2. FEVER:事实验证基准,每个声明被标注为 SUPPORTS(支持)、REFUTES(反驳)或 NOT ENOUGH INFO(信息不足)

动作空间: 设计了简单的 Wikipedia Web API,包含三种动作:

  1. search[entity]:返回对应实体维基百科页面的前 5 个句子
  2. lookup[string]:返回页面中包含该字符串的下一个句子(模拟浏览器的 Ctrl+F 功能)
  3. finish[answer]:以给定答案完成当前任务

3.2 方法

ReAct 提示: 从训练集中随机选择 HotpotQA 的 6 个和 Fever 的 3 个案例,手动编写 ReAct 格式的轨迹作为少样本示例。思维用于:

  • 分解问题
  • 从 Wikipedia 观察中提取信息
  • 执行常识或算术推理
  • 引导搜索重新表述
  • 综合最终答案

基线方法:

  • (a) 标准提示(Standard):移除所有思维、动作、观察
  • (b) 链式思维提示(CoT):移除动作和观察(纯推理基线);另有自洽性基线 CoT-SC
  • (c) 纯行动提示(Act):移除 ReAct 轨迹中的思维

结合内部和外部知识:

  • ReAct → CoT-SC:当 ReAct 在给定步数内未能返回答案时,退回到 CoT-SC
  • CoT-SC → ReAct:当 CoT-SC 样本中的多数答案出现次数少于 n/2 时,退回到 ReAct

3.3 结果与分析

提示方法 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

关键发现

1. ReAct 始终优于 Act

证明了推理对于指导行动的价值,尤其是在综合最终答案方面。

2. ReAct vs. CoT 的行为差异

通过对 200 个样本的人工分析,发现:

  • 幻觉是 CoT 的严重问题:CoT 的虚假正例率(14%)远高于 ReAct(6%),且幻觉占 CoT 失败模式的 56%。相比之下,ReAct 的问题求解轨迹更加基于事实、数据驱动且可信
  • 结构约束限制了 ReAct 的灵活性:交替推理、行动和观察步骤虽然提高了 ReAct 的 grounding 和可信度,但也降低了制定推理步骤的灵活性,导致更高的推理错误率。
  • 成功检索信息对 ReAct 至关重要:无信息的搜索(占错误案例的 23%)会使模型推理偏离轨道。

3. ReAct + CoT-SC 在 LLM 提示中表现最佳

在 HotpotQA 和 Fever 上分别通过 ReAct → CoT-SC 和 CoT-SC → ReAct 取得最佳结果。

4. ReAct 在微调中表现最佳

仅用 3,000 个示例微调后,ReAct 成为四种方法中最佳的方法。PaLM-8B 微调 ReAct 优于所有 PaLM-62B 提示方法,PaLM-62B 微调 ReAct 优于所有 540B 提示方法。


4 决策任务

4.1 ALFWorld

ALFWorld 是一个合成的基于文本的游戏,旨在与具身化 ALFRED 基准对齐。它包括 6 种类型的任务,智能体需要通过文本动作导航并与模拟家庭环境交互来实现高层目标(例如"在台灯下检查纸张")。

实验结果:

方法 Pick Clean Heat Cool Look Pick 2 All
Act (best of 6) 88 42 74 67 72 41 45
ReAct (avg) 65 39 83 76 55 24 57
ReAct (best of 6) 92 58 96 86 78 41 71
BUTLER (best of 8) 46 39 74 100 22 24 37

最佳 ReAct 试验达到了 71% 的平均成功率,显著优于最佳 Act(45%)和 BUTLER(37%)。

4.2 WebShop

WebShop 是一个包含 118 万真实商品和 1.2 万人类指令的在线购物网站环境。

方法 Score 成功率 (SR)
Act 62.3 30.1
ReAct 66.6 40.0
IL 59.9 29.1
IL+RL 62.4 28.7
Human Expert 82.1 59.6

ReAct 相比之前最佳成功率取得了 10% 的绝对提升

4.3 内部推理 vs. 外部反馈的价值

与 Inner Monologue(IM)方法的对比实验表明,ReAct 大幅优于 IM 风格的提示(总体成功率 71 vs. 53)。ReAct-IM 经常在识别子目标完成或确定下一个子目标时犯错,因为缺乏高层目标分解和常识推理。


5 相关工作

语言模型用于推理

最知名的工作是链式思维(CoT),后续工作包括:

  • Least-to-most 提示:用于解决复杂任务
  • Zero-shot-CoT:零样本链式思维
  • Self-consistency:自洽性推理
  • Selection-Inference:将推理分为"选择"和"推断"两步
  • STaR:通过模型自身生成的正确推理进行引导式微调
  • Faithful Reasoning:将多步推理分解为三个步骤

与这些方法不同,ReAct 不仅仅是孤立的、固定的推理,而是将模型动作及其相应观察整合到一个连贯的输入流中。

语言模型用于决策

  • WebGPT:使用 LM 与浏览器交互,但不显式建模思维和推理过程
  • SayCan:使用 LLM 进行机器人动作规划
  • Inner Monologue:添加了环境反馈注入,但其"内心独白"并非真正的内心思维

6 结论

我们提出了 ReAct——一种简单而有效的方法,用于在大型语言模型中协同推理和行动。通过在多跳问答、事实核查和交互式决策任务上的多种实验,我们表明 ReAct 在提供可解释决策轨迹的同时实现了优越的性能。

尽管方法简单,但具有大动作空间的复杂任务需要更多的示范来良好学习,这不幸地容易超出上下文学习的输入长度限制。我们在 HotpotQA 上探索了微调方法并取得了初步的积极结果,但从更多高质量的人类标注中学习将是进一步提高性能的理想途径。

未来方向: 通过多任务训练扩展 ReAct,并将其与强化学习等互补范式相结合,可能会产生更强的智能体,进一步释放大型语言模型在更多应用中的潜力。


关键参考文献

  • Wei et al., 2022 — Chain-of-thought prompting elicits reasoning in large language models
  • Wang et al., 2022a — Self-consistency improves chain of thought reasoning
  • Chowdhery et al., 2022 — PaLM: Scaling language modeling with pathways
  • Yang et al., 2018 — HotpotQA: A dataset for diverse, explainable multi-hop question answering
  • Thorne et al., 2018 — FEVER: A large-scale dataset for fact extraction and verification
  • Shridhar et al., 2020b — ALFWorld: Aligning text and embodied environments
  • Yao et al., 2022 — WebShop: Towards scalable real-world web interaction
  • Nakano et al., 2021 — WebGPT: Browser-assisted question-answering
  • Huang et al., 2022b — Inner Monologue: Embodied reasoning through planning

Read more

Mac 上 Skill CLI 无法执行的坑:最后其实一条命令就够了

我在做 Amazon skills 的过程中,逐步把本地 CLI 从 Python 脚本切到 Go 二进制。这样做的好处很明显:用户不用装 Python、不用配依赖,解压 skill 后直接运行。但在 macOS 上,我们反复遇到一个看起来很玄的问题:同一个二进制,在 Linux/Windows 上正常,在 Mac 上就是执行不了。 当时遇到的现象 常见报错大概有几类: * 双击或 agent 调用 CLI 时,系统提示文件来自未知开发者,无法打开。 * 终端里执行时提示 Permission denied。 * 已经 chmod +x 了,仍然被 macOS 拦截。 * Apple

By ladydd

当我把全世界人群的基因 PCA 跑出来后,看见了一个倒 L 型

最近我把之前学的一些分子人类学知识,终于真正落地了。 不是停留在看论文、看别人画图、看别人解释“人群结构”这些概念,而是自己把数据处理完,自己跑 PCA,自己把全世界不同人群放到一张图上。 然后那一刻,我真的被击中了。 图上出现了一个非常漂亮的倒 L 型。 一端是非洲,另一端逐渐拉向东亚,中间有中东、欧洲、南亚、欧亚大陆上的各种过渡人群。它不是那种随机散点图,而是有方向、有骨架、有历史感的结构。 我第一眼看到的时候,脑子里直接冒出一句话: 这不像是一张普通统计图,这像是人类迁徙史在二维空间里留下的影子。 当然,后来我也提醒自己,PCA 不能被过度浪漫化。它不是地图,也不是时间轴,更不是“谁从哪里走到哪里”的直接证据。PCA 本质上是把高维基因差异压缩到几个主成分上,用最大方差方向把样本摊开。它可以帮助我们观察人群结构、相似性、分化和混合,但不能单独承担全部历史解释。PCA 在群体遗传学里常用于观察 population structure

By ladydd

吞吐与延迟:一个厨房比喻讲透性能压测

写于 2026-06-26。背景: MCP 服务 跑在 3 台 ClickHouse(每台 16 核 / 64G,1 分片 3 副本)上。 我们花了一整轮做公网压测,把这套系统的极限、天花板和杠杆全摸清了。这篇把"吞吐 / 延迟 / 排队"这三个最容易混的概念讲透,配我们自己的真实实测数据。 一句话结论 我们这套系统的吞吐天花板 ≈ 76 req/s。 往里塞再多并发(100、200、300、500),每秒"做完"的还是大约 76 个,多出来的全在排队。系统不会崩,只会让每个人等得更久。 天花板能不能抬?

By ladydd

四卡 3090 本地模型部署复盘:Ollama 跑通 35B,以及 GPU0 掉卡问题

这次做的是一轮真实的本地模型部署摸底。 目标不是搭一个临时 Demo,而是把一台四卡 3090 GPU 机器接进自己的日常 AI 使用环境:本机跑 Open WebUI,负责账号、会话和前端配置;GPU 机器只负责模型推理。这样以后换模型、换推理框架、重启服务,都尽量不影响本机的使用入口。 最后结论比较清楚:qwen3.5:35b 的 GGUF Q4_K_M 量化版已经通过 Ollama 跑通,本机 Open WebUI 可以接入,热加载后的聊天速度也能用;但 GPU0 存在明显稳定性问题,重启后能短暂恢复,跑过负载后又会掉到 NVML 异常状态。 状态快照 当前能用的部分: * 本机 Open WebUI 已部署,

By ladydd
陕公网安备61011302002223号 | 陕ICP备2025083092号