ReAct 论文学习

论文标题:ReAct: Synergizing Reasoning and Acting in Language Models
中文译名:ReAct:在语言模型中协同推理与行动
发表会议:ICLR 2023(国际学习表示会议)
作者:Shunyu Yao, Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Karthik Narasimhan, Yuan Cao
机构:Princeton University & Google Research
arXiv:https://arxiv.org/abs/2210.03629
项目主页:https://react-lm.github.io
代码仓库:https://github.com/ysymyth/ReAct


目录

  1. 背景知识:读懂这篇论文需要了解什么
  2. 论文核心问题:作者在解决什么问题
  3. ReAct 的核心思想
  4. ReAct 的工作原理
  5. 具体的实验任务
  6. 实验结果与分析
  7. ReAct 的优势:为什么比之前方法更好
  8. ReAct 的局限性
  9. ReAct 的影响与后续发展
  10. 总结:一图看懂 ReAct

1. 背景知识:读懂这篇论文需要了解什么

在阅读这篇论文之前,我们需要理解几个关键概念:

1.1 大型语言模型(LLM, Large Language Model)

是什么:像 GPT-3、PaLM 这样的超大规模 AI 模型,通过在海量文本上训练,学会了理解和生成人类语言。

能做什么:回答问题、写文章、翻译、编程等等。

局限性

  • 知识是"冻结"的 —— 训练完成后就不再更新,无法获取最新信息
  • 可能产生"幻觉"(hallucination)—— 一本正经地说出错误内容
  • 推理复杂问题时容易出错

1.2 思维链(Chain-of-Thought, CoT)提示

是什么:一种让 LLM "一步一步思考"的提示技术。

举例

问题:Roger 有 5 个网球,买了 2 罐网球(每罐 3 个),现在有几个?
传统提示 → 模型直接回答:11
CoT 提示 → 模型先推理:
  思考:Roger 原来有 5 个。买了 2 罐,每罐 3 个,就是 6 个。5 + 6 = 11
  答案:11

问题:CoT 只是"闭卷推理"—— 模型只能依靠自己训练时学到的知识,无法查阅外部信息,容易出错。

1.3 行动计划生成(Action Plan Generation)

是什么:让 LLM 生成一系列操作步骤来完成任务,比如"先搜索X,再点击Y,然后填写Z"。

问题:只有行动,没有推理 —— 模型不知道"为什么这样做",遇到意外情况不会灵活应对。

1.4 少样本提示(Few-shot Prompting)

是什么:在给模型提问时,先提供几个"示范例子",让模型学习解题模式。

举例

示范1:问题... 答案...
示范2:问题... 答案...
现在回答:新问题...

1.5 幻觉(Hallucination)

是什么:LLM 生成的内容听起来很有道理,但实际上是错误或虚构的。

举例:问 AI “爱因斯坦在哪里出生”,AI 可能自信地回答"纽约"(错了,是德国乌尔姆市),因为它混淆了记忆。


2. 核心问题:作者在解决什么问题

2.1 现状

在 2022 年,研究者们发现了两种让 LLM 更强大的方向:

方向 方法 优点 缺点
推理(Reasoning) Chain-of-Thought 等 能逐步思考复杂问题 无法获取外部信息,容易产生幻觉
行动(Acting) WebGPT、SayCan 等 能与外部环境交互 缺乏推理,遇到意外不知如何应对

这两个方向一直是分开研究的!

2.2 核心问题

如果把推理和行动结合在一起会怎样?

论文的直觉很简单,类比人类解决问题的方式:

  • 当我们遇到一道不会的题,我们会先思考(推理)→ 去查资料(行动)→ 阅读资料(观察)→ 再思考(推理)→ 给出答案
  • 现有 AI 要么只会推理,要么只会行动,而人类是交替进行推理和行动的

2.3 解决方案预告

作者提出了 ReActReasoning + Acting 的组合词):

  • 让 LLM 在一个统一的框架下,交替生成推理轨迹(思考过程)和行动
  • 推理帮助模型制定计划、处理异常
  • 行动让模型能从外部获取最新、准确的信息

3. ReAct 的核心思想

3.1 核心理念:思考-行动-观察的循环

ReAct 的工作模式可以用这个简单的循环来理解:

┌─────────────────────────────────────────────┐
│                                             │
│   Thought(思考):分析当前情况,制定下一步  │
│         ↓                                   │
│   Action(行动):执行具体操作              │
│         ↓                                   │
│   Observation(观察):获取行动结果          │
│         ↓                                   │
│   重复上述过程,直到任务完成                 │
│                                             │
└─────────────────────────────────────────────┘

3.2 三类核心输出

在 ReAct 框架中,模型的每一步输出属于以下三类之一:

类型 描述 示例
Thought(思考/推理轨迹) 模型的内部推理过程,不直接与环境交互 “我需要先找到 X 的相关信息,再确认 Y”
Action(行动) 调用外部工具或接口 Search[爱因斯坦]Click[购买按钮]
Observation(观察) 来自外部环境的反馈信息 Wikipedia 返回的搜索结果

3.3 一个直观的完整示例(HotpotQA 问答任务)

问题:除了《古罗马帝国》,科罗拉多克里普尔克里克是否也是 George Carmack 出生地的所在州?

Thought 1: 我需要查找 George Carmack,然后找到他的出生地和出生州。
Action 1: Search[George Carmack]
Observation 1: George Washington Carmack(1860-1922),美国探险家,在加拿大育空地区发现了金矿。出生在加利福尼亚州的 Port Costa。

Thought 2: George Carmack 出生在加利福尼亚州。现在我需要确认科罗拉多克里普尔克里克是否在加利福尼亚州。
Action 2: Search[科罗拉多克里普尔克里克]
Observation 2: 克里普尔克里克(Cripple Creek)是美国科罗拉多州特勒尔县的一个城市。

Thought 3: 科罗拉多克里普尔克里克在科罗拉多州,而 George Carmack 出生在加利福尼亚州,两者不是同一个州。
Action 3: Finish[不是,科罗拉多克里普尔克里克在科罗拉多州,而 George Carmack 出生在加利福尼亚州]

关键洞察

  • Thought(思考) 帮助模型明确每一步要做什么
  • Action(行动) 让模型从外部获取准确信息,避免幻觉
  • Observation(观察) 让模型用真实信息更新自己的理解
  • 整个过程像人类解题一样自然、透明、可解释

4. ReAct 的工作原理(技术细节)

4.1 提示设计(Prompt Design)

ReAct 使用少样本提示(few-shot prompting)—— 即在给 LLM 真正的问题之前,提供几个完整的"思考-行动-观察"示例。

=== 少样本示例(Few-shot Example)===
Question: 科罗拉多造山带东麓海拔范围是什么?
Thought 1: 我需要搜索科罗拉多造山带,找到海拔范围信息。
Action 1: Search[Colorado orogeny]
Observation 1: 科罗拉多造山带是...形成于...
Thought 2: 搜索结果没有直接给出海拔数据,我应该搜索东麓(eastern flank)。
Action 2: Search[eastern flank Colorado orogeny]
Observation 2: 东麓的海拔范围是 1200 至 3300 米。
Thought 3: 已找到答案。
Action 3: Finish[1200 至 3300 米]

=== 真实问题 ===
Question: [用户的实际问题]
Thought 1: [模型开始生成...]

这里的关键技术点

  • 模型看到示例后,学会了"先思考后行动"的模式
  • 每次 Action 执行后,系统自动将 Observation 插入到上下文中
  • 模型继续在扩展的上下文中生成下一步

4.2 动作空间(Action Space)

对于不同的任务,ReAct 定义了不同的行动类型:

知识型问答任务(HotpotQA / FEVER)

Search[关键词]       → 在 Wikipedia 搜索
Lookup[关键词]       → 在当前页面中查找关键词
Finish[答案]         → 提交最终答案

交互式决策任务(ALFWorld 家务机器人)

go to [地点]         → 移动到某个位置
take [物品] from [容器] → 拿取物品
put [物品] in/on [容器] → 放置物品
open [容器/门]       → 打开容器或门
examine [物品]       → 查看物品
use [物品]           → 使用物品

网购任务(WebShop)

search[查询词]       → 搜索商品
click[按钮/选项]     → 点击界面元素

4.3 使用哪个 LLM?

论文使用了:

  • PaLM-540B(Google 的 5400 亿参数模型)
  • GPT-3(text-davinci-002)(OpenAI 的模型)

这两个模型都是**纯提示(prompting)**方式使用,不需要额外训练!这是 ReAct 的一大优点:对原始模型零修改。

4.4 与其他方法的对比

论文对比了 4 种方法:

方法 有推理? 有行动? 特点
Standard(标准提示) 直接回答,无推理无行动
CoT(思维链) 只推理,不与外部交互
Act(仅行动) 只行动,无推理过程
ReAct(本文) 推理+行动交替进行

5. 具体的实验任务

论文在 4 个任务上进行了实验,覆盖了两大类场景:

5.1 知识密集型推理任务

任务一:HotpotQA(多跳问答)

是什么:一个需要通过多个步骤才能回答的问答数据集。
难点:单一搜索往往无法得到答案,需要"多跳推理"(multi-hop reasoning)—— 先找到 A,从 A 的结果中发现需要查 B,再从 B 得到最终答案。

示例问题

“演员 Jason Statham 出演的 The Expendables 系列,该系列导演是谁?他导演的另一部电影是什么?”
(需要先查 Jason Statham → 找到 Expendables → 查导演信息 → 查导演其他作品)

评价指标:EM(Exact Match,完全匹配)—— 预测答案与正确答案完全一致

任务二:FEVER(事实验证)

是什么:给定一个陈述,判断其是否真实(SUPPORTS/REFUTES/NOT ENOUGH INFO)。
难点:需要从 Wikipedia 查找相关事实,并做出真假判断。

示例

声明:“尼古拉·特斯拉是美国人”
需要查证:特斯拉出生在克罗地亚(当时是奥匈帝国领土),后来移民美国
结论:支持(SUPPORTS)

5.2 交互式决策任务

任务三:ALFWorld(家务机器人)

是什么:一个文本描述的虚拟家庭环境,模拟机器人执行家务任务。
难点:需要在多个房间中找到物品、执行操作,任务有多步骤依赖关系。

示例任务

“找到并拿起一个苹果,然后把它放进冰箱”
(需要:进入厨房 → 查看桌子/柜台 → 找到苹果 → 拿起苹果 → 打开冰箱 → 放入)

评价指标:Success Rate(成功率)

任务四:WebShop(网络购物)

是什么:模拟在网络商城(类似 Amazon)上根据需求购买商品的环境。
难点:需要理解用户需求(如颜色、尺寸、品牌等),在真实商品列表中筛选、点击、选择。

示例任务

“帮我找一件男士蓝色短袖 T恤,尺码 M,价格不超过 50 美元”
(需要:搜索 → 浏览结果 → 点击商品 → 确认规格 → 购买)

评价指标:Score(得分,基于属性匹配程度)和 Success Rate(成功率)


6. 实验结果与分析

6.1 HotpotQA 结果(问答准确率 EM)

方法 PaLM-540B GPT-3
Standard(标准提示) 25.7 29.7
CoT(只推理) 29.4 33.4
Act(只行动) 25.2 28.0
ReAct(推理+行动) 27.4 35.1
CoT + ReAct 结合 36.8

解读

  • ReAct 比纯 CoT 和纯 Act 都强
  • GPT-3 用 ReAct 达到 35.1%,比 Standard 提升 +5.4%
  • 结合 CoT 和 ReAct 效果最好(36.8%)

6.2 FEVER 结果(事实验证准确率)

方法 PaLM-540B GPT-3
Standard(标准提示) 58.9 56.3
CoT(只推理) 56.3 57.3
Act(只行动) 58.9 57.3
ReAct(推理+行动) 62.2 60.9

解读

  • ReAct 在事实验证任务上显著超越所有 baseline
  • PaLM 用 ReAct 达到 62.2%,比 Standard 提升 +3.3%

6.3 ALFWorld 结果(家务机器人成功率)

方法 成功率
BUTLER(模仿学习方法) 26%
纯行动(Act only) 45%
ReAct 71%
ReAct(最佳单次运行) 79%

解读

  • ReAct 比专门训练的 BUTLER 模型高出 +45%
  • 仅凭 1-2 个少样本示例,就大幅超越了用大量训练数据的模仿学习方法

6.4 WebShop 结果(网购任务)

方法 分数 成功率
模仿学习(IL) 59.9 29.1%
强化学习(RL) 62.4 28.7%
Act(只行动) 62.0 30.0%
ReAct 66.6 40.0%

解读

  • ReAct 成功率 40%,比最好的 RL 方法高出 +11.3%
  • 这是在零训练、仅少样本提示的情况下实现的!

6.5 错误分析

论文对 ReAct 的失败案例进行了分析:

在 HotpotQA 上,错误类型分布

错误类型 比例 说明
搜索结果不充分 23% Wikipedia 没有相关内容
推理错误 47% 模型思考过程出错
搜索策略不当 30% 使用了错误的搜索关键词

关键发现

  • 幻觉问题大幅减少:CoT 有 14% 的错误是幻觉,ReAct 只有 6%
  • 错误传播减少:CoT 一旦某步推理错误,后续全错;ReAct 可以通过查询纠正

7. ReAct 的优势:为什么比之前方法更好

7.1 解决了幻觉问题

传统 CoT 的问题

问题:苹果公司创始人是谁?
CoT 推理:我知道苹果公司是一家科技公司。
         史蒂夫·乔布斯是最著名的 CEO,所以他应该是创始人。
         答案:史蒂夫·乔布斯
(实际上苹果有三个联合创始人:乔布斯、沃兹尼克、韦恩)

ReAct 的做法

Thought 1: 我需要查找苹果公司的创始人信息
Action 1: Search[Apple Inc founders]
Observation 1: 苹果公司由史蒂夫·乔布斯、史蒂夫·沃兹尼克和罗纳德·韦恩于1976年联合创立
Thought 2: 有三个联合创始人
Action 2: Finish[史蒂夫·乔布斯、史蒂夫·沃兹尼克、罗纳德·韦恩]

7.2 提高了可解释性和可信度

ReAct 生成的推理轨迹就像人类的"解题过程",用户可以:

  • 清晰看到模型是如何一步步得出答案的
  • 识别模型在哪一步出了问题
  • 人工干预和纠正特定步骤

举例:如果 ReAct 在某一步搜索了错误的关键词,人类可以直接修改那一个 Thought,而不需要重新开始。

7.3 动态调整计划

ReAct 能在执行过程中根据观察到的结果动态调整计划:

Thought 1: 我认为答案是 X,我去搜索验证一下
Action 1: Search[X]
Observation 1: (发现搜索结果显示 X 是错的)
Thought 2: 哦,我之前的假设是错误的,正确答案应该是 Y,让我验证 Y
Action 2: Search[Y]
...

这就像一个人在查资料时发现了新信息,能够及时调整思路。

7.4 少样本即强大

ReAct 只需要 1-6 个示例就能在多个任务上表现出色,不需要大量标注数据进行训练。


8. ReAct 的局限性

8.1 依赖强大的基础模型

ReAct 的提示策略需要模型本身具有较强的理解和指令跟随能力。在较小的模型上效果会大打折扣。

8.2 上下文窗口限制

每次推理步骤都会增加上下文长度(Thought + Action + Observation),对于复杂任务,上下文可能会超出模型的处理能力(早期 GPT-3 的上下文窗口只有 4096 个 token)。

8.3 外部工具的依赖

ReAct 的效果很大程度上取决于外部工具(如 Wikipedia API)的质量。如果工具返回的信息不准确或不完整,模型的推理也会受影响。

8.4 有时会陷入循环

模型有时会在同一个信息上反复搜索,进入无效循环,论文称之为"重复模式"(repetitive pattern)。

示例

Thought 1: 我需要查找 X
Action 1: Search[X]
Observation 1: (相关但不够详细)
Thought 2: 我需要查找更多关于 X 的信息
Action 2: Search[X]  ← 完全相同的搜索!
...

8.5 微调实验初步

论文也做了初步的**微调(fine-tuning)**实验——用 ReAct 生成的轨迹来训练更小的模型:

  • 小模型(1B 参数)微调后可以超过大模型(175B 参数)的提示效果
  • 说明 ReAct 的轨迹是高质量的训练数据

9. ReAct 的影响与后续发展

ReAct 论文发表后产生了巨大影响,成为 AI Agent 领域的基础工作之一。

9.1 在工业界的应用

LangChain 框架:最流行的 LLM 应用开发框架,其核心的 ReAct Agent 直接基于此论文实现。

# LangChain 中使用 ReAct Agent 的示例
from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub

# 加载 ReAct 提示模板
prompt = hub.pull("hwchase17/react")

# 定义工具(如搜索、计算器等)
tools = [search_tool, calculator_tool]

# 创建 ReAct Agent
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)

# 运行
result = executor.invoke({"input": "2024年世界人口是多少的两倍是多少?"})

9.2 启发了众多后续工作

后续工作 改进点
Reflexion(反思) 让 Agent 在失败后自我反思,下次做得更好
Tree of Thoughts(思维树) 推理时不走单一路径,而是探索多个分支
Self-Ask(自问自答) 将复杂问题分解为更小的子问题
AutoGPT 自主循环执行 ReAct 思路,完成更长期的任务
LangGraph 以图结构组织复杂的多 Agent ReAct 工作流

9.3 定义了现代 AI Agent 的基本范式

ReAct 确立的 Agent 核心循环:

┌──────────────────────────────────────────────────────┐
│                                                      │
│   用户输入任务                                        │
│        ↓                                             │
│   LLM 思考(Thought)→ 生成行动(Action)             │
│        ↓                                             │
│   工具执行(Tool Execution)→ 返回结果(Observation) │
│        ↓                                             │
│   重复,直到生成最终答案(Finish)                    │
│                                                      │
└──────────────────────────────────────────────────────┘

这个循环已经成为现代 AI Agent 系统的标准架构。

9.4 意义:从语言模型到行动模型

ReAct 的核心贡献是证明了:

  • LLM 不仅仅是"文本生成器",还可以成为"行动执行者"
  • 推理和行动的结合比单独的任何一种都更强大
  • 通过简单的提示工程就能释放 LLM 的巨大潜力

这为后来的 ChatGPT Plugins、GPT-4 with Code Interpreter、Claude 的 Tool Use 等功能奠定了理论基础。


10. 总结

10.1 一句话总结

ReAct = 让 AI 像人类一样"边思考边查资料"来解决问题

10.2 核心贡献三点

  1. 提出了新的提示格式:将推理(Thought)和行动(Action)交织在一起,形成 Thought-Action-Observation 的循环

  2. 在多种任务上验证了有效性

    • 知识型问答(HotpotQA):减少幻觉,提升准确率
    • 事实验证(FEVER):更准确判断真假
    • 家务机器人(ALFWorld):成功率提升 34%+
    • 网络购物(WebShop):成功率提升 10%+
  3. 无需额外训练:只用少样本提示就能实现,门槛极低

10.3 ReAct vs CoT vs Act 对比总结

            有推理轨迹?  能查外部信息?  抗幻觉?  可解释?
Standard:     ❌            ❌           弱       弱
CoT:         ✅            ❌           一般     强
Act:         ❌            ✅           强       弱
ReAct:       ✅            ✅           强       强

10.4 为什么说 ReAct 是里程碑式工作?

在 2022 年,ReAct 第一次系统地证明了 “思考 + 工具使用” 的组合可以让 LLM 做到以前做不到的事。这篇论文启发了整个 AI Agent 领域的发展方向,今天我们看到的各种智能助手(能够搜索网络、运行代码、操作文件的 AI)都在以这篇论文为基础进行构建。

10.5 学习 ReAct 后能做什么?

  • 理解 LangChain、LangGraph 等框架的核心设计理念
  • 自己构建能使用工具的 AI Agent
  • 理解 ChatGPT 的插件系统和 Function Calling 的底层思想
  • 为进一步学习更复杂的 Agent 架构(如 AutoGPT、BabyAGI)打下基础

附录:关键术语表

术语 英文 解释
大型语言模型 LLM (Large Language Model) 在海量文本上训练的超大规模语言模型,如 GPT、PaLM
思维链 CoT (Chain-of-Thought) 让模型"一步步思考"的提示技术
幻觉 Hallucination LLM 生成听起来合理但实际错误的内容
少样本提示 Few-shot Prompting 提供少量示例让模型学习解题模式
推理轨迹 Reasoning Trace 模型的逐步思考过程记录
多跳推理 Multi-hop Reasoning 需要经过多个中间步骤才能得出答案的推理
模仿学习 Imitation Learning (IL) 通过模仿专家行为来学习的机器学习方法
强化学习 Reinforcement Learning (RL) 通过奖惩信号来学习行为策略的机器学习方法
精确匹配 Exact Match (EM) 评估指标:预测答案与标准答案完全一致才算正确
上下文学习 In-context Learning 在推理时通过上下文示例学习,无需更新模型参数
微调 Fine-tuning 用特定数据集对预训练模型进行进一步训练
提示工程 Prompt Engineering 设计有效输入提示以引导模型输出期望结果的技术
Agent Agent 能够自主感知环境、规划并执行行动的 AI 系统
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐