论文学习《ReAct: 在大语言模型中协同推理与行动》
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
目录
- 背景知识:读懂这篇论文需要了解什么
- 论文核心问题:作者在解决什么问题
- ReAct 的核心思想
- ReAct 的工作原理
- 具体的实验任务
- 实验结果与分析
- ReAct 的优势:为什么比之前方法更好
- ReAct 的局限性
- ReAct 的影响与后续发展
- 总结:一图看懂 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 解决方案预告
作者提出了 ReAct(Reasoning + 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 核心贡献三点
-
提出了新的提示格式:将推理(Thought)和行动(Action)交织在一起,形成 Thought-Action-Observation 的循环
-
在多种任务上验证了有效性:
- 知识型问答(HotpotQA):减少幻觉,提升准确率
- 事实验证(FEVER):更准确判断真假
- 家务机器人(ALFWorld):成功率提升 34%+
- 网络购物(WebShop):成功率提升 10%+
-
无需额外训练:只用少样本提示就能实现,门槛极低
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 系统 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)