← 返回 AI Agent 课程

【中文精读】ReAct: Synergizing Reasoning and Acting in Language Models

原文:https://arxiv.org/abs/2210.03629 · 本文为中文精读版(忠实转述+关键段落翻译),非逐句全译 · 生成于 2026-07-03 · 精读整理:
导读:如果你只打算精读一篇 agent 论文,那大概率就是这篇。ReAct(Yao et al., 2022,普林斯顿 × Google Brain)是现代工具调用智能体(tool-use agent)循环的奠基范式——今天几乎所有 agent 框架(LangChain 的 AgentExecutor、AutoGPT、OpenAI function calling 的多轮循环、Claude 的 agentic tool use)里那个「思考 → 动作 → 观察 → 再思考」的循环,源头都指向这篇论文。它回答了一个根本问题:为什么语言模型不能只推理、也不能只行动,而必须把两者交错起来?论文用一个极简的机制(把「说一句思考」也当成一种动作)在四个截然不同的任务上验证了这一点,并且给出了至今仍在被引用的错误分析:纯推理会幻觉,纯行动会瞎撞,交错才既有依据又有方向。读懂这篇,你就理解了 agent loop 的第一性原理,而不只是会调框架 API。

一、背景与动机:推理与行动的割裂

论文开篇指出,大语言模型(Large Language Model, LLM)的两种能力此前一直被分开研究:

论文用一个日常例子说明人类是怎么做的:在厨房做一道菜时,我们会在动作之间用语言自我推理——「东西都切好了,现在该烧水了」(追踪进度)、「没有盐,那就用酱油和胡椒代替」(处理异常)、「酱怎么做?我该上网查一下」(意识到需要外部信息)。推理指导行动("acting to reason"的对偶),行动反哺推理——这种紧密协同正是人类能在陌生情境下快速学习和稳健决策的来源,而当时的语言模型范式恰恰把它拆开了。

ReAct 的主张由此而来:让 LLM 以交错(interleaved)的方式同时生成推理轨迹(reasoning trace)任务动作(action)。原文的核心表述值得直译:

推理轨迹帮助模型归纳、追踪和更新行动计划,并处理异常;而动作让模型能够与外部来源(如知识库或环境)交互,获取额外信息。(reasoning traces help the model induce, track, and update action plans as well as handle exceptions, while actions allow it to interface with external sources to gather additional information.)

二、方法:把「思考」也变成一种动作

2.1 形式化:动作空间扩充为语言空间

先看一般的 agent 设定:在时间步 t,智能体从环境接收观察(observation)ot ∈ O,依据策略 π(at|ct) 执行动作 at ∈ A,其中上下文 ct = (o₁, a₁, …, ot−1, at−1, ot) 是至今为止的交互历史。当「上下文 → 正确动作」的映射高度隐式、需要大量计算时,直接学这个策略非常困难——论文举例:纯行动的 agent 面对「sinkbasin 1 里没有 peppershaker 1」这样的局面,会持续生成幻觉动作,因为它没有推理出「东西不在这、该去别处找」。

ReAct 的全部机制可以浓缩成一行:把动作空间扩充为 Â = A ∪ L,其中 L 是语言空间。语言空间中的一次「动作」ât ∈ L 称为一次思考(thought)或推理轨迹,它的特殊之处在于:

思考不影响外部环境,因此不产生观察反馈。(a thought does not affect the external environment, thus leading to no observation feedback.)

思考做的事情是:针对当前上下文 ct 组合、推理出有用的信息,并把自己追加进上下文 ct+1 = (ct, ât),供之后的推理或行动使用。于是一条 ReAct 轨迹就是 Thought → Action → Observation → Thought → Action → Observation → … 的交错序列——这正是今天所有 agent loop 的原型。

论文列举了思考可以承担的角色:分解任务目标、制定行动计划;注入与任务相关的常识知识;从观察中提取关键信息;追踪进度、调整行动计划;处理异常等。

2.2 Few-shot prompt 怎么写

由于语言空间 L 是无限的,在其中学会「说有用的思考」需要很强的语言先验——所以 ReAct 直接用冻结的 PaLM-540B,以少样本上下文示例(few-shot in-context examples)提示,不做任何训练。prompt 的构造方式非常朴素:

每个上下文示例都是一条人类书写的轨迹,由解决一个任务实例的动作、思考和环境观察组成。(Each in-context example is a human trajectory of actions, thoughts, and environment observations to solve a task instance.)

具体数量:HotpotQA 用 6 条、FEVER 用 3 条人工标注轨迹(作者发现更多示例并不提升性能);ALFWorld 每类任务标注 3 条;WebShop 只用 1~2 条。论文特别强调「没有使用任何特设的格式选择、思考设计或示例挑选」——标注者只需在动作序列之上,把自己当时的自然语言想法写下来即可。这个「随手能写」的性质是 ReAct 四大特性之一(直观易设计、通用灵活、少样本即强健、与人类对齐可控——人类可以直接阅读推理轨迹判断 agent 意图,甚至通过编辑 thought 实时纠偏)。

2.3 密集思考 vs 稀疏思考:两种模式

论文根据任务性质区分了两种思考-动作配比,这个区分在工程上很实用:

三、知识密集型推理:HotpotQA 与 FEVER

3.1 任务设置与极简工具:一个 Wikipedia API、三个动作

两个基准都采用 question-only 设置:模型只拿到问题或声明,不提供任何支持段落,必须靠内部知识或主动检索。HotpotQA 是多跳问答(答案需跨两篇以上 Wikipedia 段落推理,指标为精确匹配 EM);FEVER 是事实核验(判断声明为 SUPPORTS / REFUTES / NOT ENOUGH INFO,指标为准确率)。

ReAct 给模型接的「工具」是一个刻意做得很弱的 Wikipedia API,只有三个动作:

作者明说这个动作空间远弱于 SOTA 检索器,只能按精确页名取回页面的一小部分——目的正是模拟人类与维基的真实交互,迫使模型靠显式的语言推理来驱动检索,而不是把功劳让给一个强检索器。

3.2 主结果(Table 1):单打不如 CoT-SC,组合起来全面领先

方法(PaLM-540B)HotpotQA (EM)FEVER (Acc)
Standard(直接答)28.757.1
CoT(思维链)29.456.3
CoT-SC(自洽性,采样 21 条取多数)33.460.4
Act(只行动、无思考)25.758.9
ReAct27.460.9
CoT-SC → ReAct34.264.6
ReAct → CoT-SC35.162.0
有监督 SoTA(参考)67.589.5

几个诚实且重要的观察:ReAct 一致优于 Act(HotpotQA 27.4 vs 25.7,FEVER 60.9 vs 58.9),证明思考对行动的指导价值;但在 HotpotQA 上 ReAct 单独使用甚至略低于 CoT(27.4 vs 29.4)——论文没有回避这一点,而是用错误分析(下节)解释了原因,并给出组合策略:

两种组合在各采样数下都一致超过纯 CoT-SC,且只需 3~5 条采样就达到 CoT-SC 用 21 条采样的水平。这个「内部知识与外部检索按置信度互为兜底」的思想,是本文除主循环外第二个被后世大量复用的设计。

3.3 错误分析(Table 2):幻觉 0% 换来推理灵活性下降

作者对 ReAct 和 CoT 各随机抽取 50 条成功 + 50 条失败轨迹(共 200 例)人工标注,这张表是全文最有洞察力的部分:

模式定义ReActCoT
成功·真阳性推理与事实都正确94%86%
成功·假阳性答对了,但推理或事实是幻觉6%14%
失败·推理错误推理轨迹错误(含陷入重复循环跳不出来)47%16%
失败·搜索结果错误搜索返回空或无有用信息23%
失败·幻觉幻觉的推理或事实0%56%
失败·标签歧义预测正确但与标签不精确匹配29%28%

解读:幻觉是 CoT 压倒性的失败原因(56%),而 ReAct 把它压到了 0%,连成功案例里的「蒙对」(假阳性)也从 14% 降到 6%——每一步推理都被真实观察接地,这是 acting 对 reasoning 的价值。但代价同样清晰:交错的思考-动作-观察结构约束了推理的自由组织,ReAct 的推理错误率反而高于 CoT(47% vs 16%);其中一种 ReAct 特有的高频错误是重复动作循环——模型不断复读之前的思考和动作,无法推断出正确的下一步。作者推测这源于贪婪解码的次优性,更好的解码策略(如 beam search)或可缓解。此外,检索质量成了硬依赖:无信息量的搜索占失败案例的 23%,会让模型推理「脱轨」且难以恢复。这组「事实性 vs 灵活性」的权衡,正是上一节两种组合策略的动机。还有个有趣的附注:部分 HotpotQA 的标准答案本身已过时,只有 ReAct 这种真实联网交互的方法才可能拿到最新答案。

四、交互式决策:ALFWorld 与 WebShop

4.1 ALFWorld:71% vs 37%,两条示例胜过十万条专家轨迹

ALFWorld 是与具身基准 ALFRED 对齐的合成文本游戏,含 6 类家务任务(Pick / Clean / Heat / Cool / Look / Pick 2),agent 要用文本命令在虚拟家居中达成高层目标(如「检查台灯下的纸」),一个实例可能有 50 多个位置、专家也要 50 步以上。评估用 134 个未见过的游戏。ReAct 每类任务只标 3 条轨迹(以 3 选 2 排列出 6 组 prompt),用稀疏思考;Act 基线用同样的轨迹但删掉全部 thought。

结果(成功率,总分列):ReAct 最佳 71%,Act 最佳 45%,而对照的 BUTLER——一个在每类任务 10 万条专家轨迹上训练的模仿学习(Imitation Learning, IL)agent——只有 37%。更强的是稳健性:ReAct 六组试验中最差的一组(48%)也超过 Act 与 BUTLER 的最佳;逐组对比 ReAct 对 Act 的相对增益在 33%~90% 之间,平均 62%。去掉 thought 后模型无法追踪「拿到东西没有、下一步去哪」,这正印证了「思考 = 工作记忆」的假设。

论文还消融了一个变体 ReAct-IM(模仿 Inner Monologue 风格,思考仅限于观察环境和确认子目标完成,没有目标分解与常识推理):总成功率 53%,在 6 类任务中 5 类输给 ReAct(71%)。它常常错判子目标是否完成,也推不出物品可能在哪——说明思考的价值在于高层规划与常识推理,而不只是复述环境状态

4.2 WebShop:真实商品网站上一条示例的收益

WebShop 是含 118 万真实商品、1.2 万条人类指令的模拟购物网站环境,按 500 条测试指令评估,指标为平均得分(所购商品覆盖期望属性的比例)与成功率(完全满足全部要求)。ReAct 只用 one-shot 提示,稀疏思考用于决定探索什么、何时买、哪些选项相关。结果(图表结论转述):ReAct 得分 66.6 / 成功率 40.0%,超过 Act(62.3 / 30.1)、用 1012 条人工轨迹训练的 IL(59.9 / 29.1)、以及再加 10587 条指令做强化学习的 IL+RL(62.4 / 28.7)——比此前最佳方法成功率绝对提升 10%;但仍远低于人类专家(82.1 / 59.6),说明这类真实环境远未被解决。

五、微调实验:小模型 + ReAct 微调反超大模型 prompting

论文用类 STaR 的自举法,把 ReAct(含回退到 CoT-SC)在 HotpotQA 上答对的 3000 条轨迹拿来微调较小的 PaLM-8B 和 PaLM-62B。图 3 的结论(转述):纯 prompting 时,ReAct 在小模型上是四种方法里最差的——小模型难以从上下文示例中同时学会推理和行动这么复杂的技能;但微调之后 ReAct 变成四种方法里最好的:微调后的 PaLM-8B ReAct 超过所有 PaLM-62B 的 prompting 方法,微调后的 62B ReAct 超过所有 540B 的 prompting 方法。相反,微调 Standard 和 CoT 的收益明显更差——因为那是在教模型「背诵(可能幻觉的)知识」,而微调 ReAct/Act 是在教模型「如何行动、去 Wikipedia 获取信息」,后者是一种可泛化得多的元技能。这一发现是后来所有 agent 轨迹微调(agent trajectory finetuning)工作的先声。

六、结论与局限

结论:ReAct 用一个极简、直观的机制,在两个知识推理任务和两个决策任务上同时取得超过纯推理与纯行动基线的表现,且推理轨迹让 agent 的决策过程可解释、可诊断、可被人类编辑纠偏(附录的人机协同实验显示,仅手工改两条 thought 就能扭转一条失败轨迹)。

局限(论文自陈):

附录中另一个值得记的数字:GPT-3(text-davinci-002)跑 ReAct 在 HotpotQA(30.8 EM)和 ALFWorld(78.4%)上都优于 PaLM-540B(29.4 / 70.9%)——方法对底座模型是通用的。

对开发者的启示