ReAct 与工具推理
概述
ReAct(Reasoning + Acting)由 Yao et al. (2022) 提出,是 LLM 智能体最重要的架构范式之一。它将推理(Thought)和行动(Action)统一在一个交错的序列中,使 LLM 能够通过与外部环境交互来完成复杂任务。本文深入分析 ReAct 的原理、实现和扩展。
1. 动机:推理与行动的统一
1.1 纯推理的局限
Chain-of-Thought 让 LLM 展示推理过程,但存在根本局限:
- 知识过时:模型参数中的知识有截止日期
- 事实幻觉:推理过程可能基于错误的前提
- 无法验证:只能在内部推理,无法查证信息
- 不能行动:只能生成文本,无法执行操作
1.2 纯行动的局限
直接让 LLM 调用工具(如 Toolformer)也有问题:
- 缺乏规划:不知道为什么要调用某个工具
- 无法推理:无法对工具返回的信息进行分析
- 盲目行动:可能重复无效的操作
1.3 ReAct 的核心洞察
人类在解决问题时,思考和行动是交替进行的:思考指导行动,行动的结果又更新思考。
2. ReAct 核心机制
2.1 Thought-Action-Observation 循环
graph TD
Q[问题/任务] --> T1[Thought 1<br/>分析问题,制定策略]
T1 --> A1[Action 1<br/>调用工具/执行操作]
A1 --> O1[Observation 1<br/>工具返回结果]
O1 --> T2[Thought 2<br/>分析结果,决定下一步]
T2 --> A2[Action 2<br/>调用另一个工具]
A2 --> O2[Observation 2<br/>新的结果]
O2 --> T3[Thought 3<br/>综合信息,得出结论]
T3 --> ANS[Final Answer]
2.2 形式化定义
给定任务 \(q\),ReAct 生成一个交错序列:
其中:
- \(t_i \sim P_{\text{LLM}}(\cdot \mid q, t_1, a_1, o_1, \ldots, o_{i-1})\) — LLM 生成的思考
- \(a_i \sim P_{\text{LLM}}(\cdot \mid q, t_1, a_1, o_1, \ldots, t_i)\) — LLM 选择的动作
- \(o_i = \text{Env}(a_i)\) — 环境执行动作后的观察
关键:Thought \(t_i\) 是 LLM 内部生成的(不传递给环境),用于:
- 追踪当前进度和目标
- 推理应该采取什么行动
- 分析观察结果的含义
- 决定是否已有足够信息回答
2.3 与 CoT 和 Act-Only 的对比
| 方法 | 序列格式 | 外部信息 | 推理可见 |
|---|---|---|---|
| Standard | \(q \rightarrow a\) | 无 | 无 |
| CoT | \(q \rightarrow t_1, t_2, \ldots \rightarrow a\) | 无 | 有 |
| Act-Only | \(q \rightarrow a_1, o_1, a_2, o_2, \ldots\) | 有 | 无 |
| ReAct | \(q \rightarrow t_1, a_1, o_1, t_2, a_2, o_2, \ldots\) | 有 | 有 |
3. 示例解析
3.1 知识问答示例
问题:Apple Remote 能控制的设备上运行什么程序?
Thought 1: 我需要先查找 Apple Remote 能控制什么设备。
Action 1: Search[Apple Remote]
Observation 1: Apple Remote 是 Apple 推出的遥控器,可以控制
Mac、Apple TV 和 iPhone 上的 Front Row 媒体程序。
Thought 2: Apple Remote 能控制运行 Front Row 的设备。
但 Front Row 是什么?让我确认一下。
Action 2: Search[Front Row software]
Observation 2: Front Row 是 Apple 开发的已停产的媒体中心软件,
用于 Mac,类似于 Windows Media Center。
Thought 3: 根据搜索结果,Apple Remote 控制的设备上运行的是
Front Row 媒体程序。
Action 3: Finish[Front Row]
3.2 对比分析
纯 CoT 可能的错误:
Thought: Apple Remote 是 Apple 的遥控器...它可能控制 iTunes...
Answer: iTunes ← 幻觉!
纯 Act-Only 可能的问题:
Action 1: Search[Apple Remote program] ← 搜索词不精确
Observation 1: (不相关结果)
Action 2: Search[Apple Remote software] ← 盲目重试
ReAct 的优势:Thought 引导了更精确的搜索,Observation 纠正了可能的幻觉。
4. MRKL 系统
MRKL(Modular Reasoning, Knowledge and Language,读作"miracle")由 Karpas et al. (2022) 提出,是另一种工具推理架构。
4.1 架构
graph TD
INPUT[用户输入] --> ROUTER[路由器/LLM]
ROUTER --> M1[数学模块<br/>计算器/Wolfram]
ROUTER --> M2[搜索模块<br/>Google/Wikipedia]
ROUTER --> M3[数据库模块<br/>SQL查询]
ROUTER --> M4[代码模块<br/>Python执行]
ROUTER --> M5[知识模块<br/>LLM自身知识]
M1 --> AGG[聚合器]
M2 --> AGG
M3 --> AGG
M4 --> AGG
M5 --> AGG
AGG --> OUTPUT[最终回答]
4.2 与 ReAct 的区别
| 维度 | ReAct | MRKL |
|---|---|---|
| 控制流 | 顺序迭代 | 路由分发 |
| 模块选择 | 每步动态选择 | 一次性路由 |
| 推理可见性 | Thought 显式可见 | 路由决策隐式 |
| 多步推理 | 天然支持 | 需要额外机制 |
5. 动作选择的数学分析
5.1 动作空间
定义动作空间 \(\mathcal{A} = \{a_1, a_2, \ldots, a_K\}\),每个动作 \(a_i\) 可能是:
- 工具调用(带参数)
- 终止动作(输出答案)
- 内部动作(推理、等待)
5.2 选择概率
LLM 选择动作 \(a_i\) 的概率:
其中 \(c\) 是当前上下文(包含之前的所有 thought、action、observation),\(T\) 是温度。
5.3 Grounding 效果
ReAct 的 Observation 提供了接地(Grounding)效果。定义推理准确性:
当外部观察提供了相关和正确的信息时,基于事实的推理比纯内部推理更可靠。
6. 实现模式
6.1 Prompt 模板
REACT_PROMPT = """
Answer the following question by reasoning step by step
and using tools when needed.
Available tools:
- Search[query]: Search Wikipedia for information
- Lookup[keyword]: Look up a keyword in the current page
- Finish[answer]: Return the final answer
Question: {question}
{examples}
Question: {input_question}
"""
6.2 解析与执行循环
def react_loop(question, tools, max_steps=10):
context = f"Question: {question}\n"
for step in range(max_steps):
# LLM 生成 Thought + Action
response = llm.generate(REACT_PROMPT + context)
thought, action = parse_response(response)
context += f"Thought {step+1}: {thought}\n"
context += f"Action {step+1}: {action}\n"
# 检查是否为终止动作
if action.startswith("Finish"):
return extract_answer(action)
# 执行动作获取观察
observation = execute_tool(action, tools)
context += f"Observation {step+1}: {observation}\n"
return "Maximum steps reached"
6.3 工具定义最佳实践
tools = [
{
"name": "search",
"description": "Search for information on the web. "
"Use when you need factual information.",
"parameters": {
"query": {
"type": "string",
"description": "The search query"
}
}
},
{
"name": "calculator",
"description": "Perform mathematical calculations. "
"Use when you need precise arithmetic.",
"parameters": {
"expression": {
"type": "string",
"description": "Mathematical expression to evaluate"
}
}
}
]
7. ReAct 的变体与扩展
7.1 ReAct + Self-Consistency
多次运行 ReAct,对最终答案进行多数投票:
7.2 ReAct + Reflexion
失败后进行反思,将经验存入记忆:
[第一次尝试失败]
Reflection: 上次我搜索了错误的关键词,导致获取了不相关的信息。
下次应该先分析问题的关键实体,再构造搜索词。
[第二次尝试,带有反思记忆]
7.3 ReWOO (Reasoning WithOut Observation)
Xu et al. (2023) 提出先生成完整的推理计划(不需要观察),再批量执行:
优势:减少 LLM 调用次数,适合工具调用延迟低的场景。
交叉引用
工具使用的详细讨论见 工具使用综述。
8. 局限性与挑战
- 上下文窗口:长交互历史消耗大量 Token,可能超出窗口限制
- 工具选择错误:LLM 可能选择错误的工具或传递错误的参数
- 无限循环:可能陷入重复的思考-行动循环
- 观察噪声:工具返回的信息可能不准确或不相关
- 规划深度:ReAct 本质上是贪心的,缺乏全局规划
- 成本:每一步都需要 LLM 推理,Token 消耗大
参考文献
- Yao, S. et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023.
- Karpas, E. et al. (2022). MRKL Systems: A Modular, Neuro-Symbolic Architecture that Combines Large Language Models, External Knowledge Sources and Discrete Reasoning. arXiv:2205.00445.
- Schick, T. et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. NeurIPS 2023.
- Xu, B. et al. (2023). ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models. arXiv:2305.18323.
- Nakano, R. et al. (2021). WebGPT: Browser-assisted Question-answering with Human Feedback. arXiv:2112.09332.