跳转至

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 的核心洞察

人类在解决问题时,思考和行动是交替进行的:思考指导行动,行动的结果又更新思考。

\[ \text{ReAct}: \underbrace{\text{Thought}}_{\text{推理}} \rightarrow \underbrace{\text{Action}}_{\text{行动}} \rightarrow \underbrace{\text{Observation}}_{\text{观察}} \rightarrow \text{Thought} \rightarrow \cdots \]

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 生成一个交错序列:

\[ \tau = (t_1, a_1, o_1, t_2, a_2, o_2, \ldots, t_n, a_n, o_n) \]

其中:

  • \(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 内部生成的(不传递给环境),用于:

  1. 追踪当前进度和目标
  2. 推理应该采取什么行动
  3. 分析观察结果的含义
  4. 决定是否已有足够信息回答

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\) 的概率:

\[ P(a_i \mid c) = \frac{\exp(\text{logit}(a_i \mid c) / T)}{\sum_j \exp(\text{logit}(a_j \mid c) / T)} \]

其中 \(c\) 是当前上下文(包含之前的所有 thought、action、observation),\(T\) 是温度。

5.3 Grounding 效果

ReAct 的 Observation 提供了接地(Grounding)效果。定义推理准确性:

\[ \text{Acc}_{\text{ReAct}} = P(\text{correct} \mid q, \{o_i\}) \geq P(\text{correct} \mid q) = \text{Acc}_{\text{CoT}} \]

当外部观察提供了相关和正确的信息时,基于事实的推理比纯内部推理更可靠。


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,对最终答案进行多数投票:

\[ a^* = \arg\max_a \sum_{i=1}^{K} \mathbb{1}[\text{ReAct}_i(q) = a] \]

7.2 ReAct + Reflexion

失败后进行反思,将经验存入记忆:

[第一次尝试失败]
Reflection: 上次我搜索了错误的关键词,导致获取了不相关的信息。
            下次应该先分析问题的关键实体,再构造搜索词。
[第二次尝试,带有反思记忆]

7.3 ReWOO (Reasoning WithOut Observation)

Xu et al. (2023) 提出先生成完整的推理计划(不需要观察),再批量执行:

\[ \text{Plan}: (t_1, a_1), (t_2, a_2), \ldots \quad \text{(一次性生成)} \]
\[ \text{Execute}: o_1, o_2, \ldots \quad \text{(批量执行)} \]
\[ \text{Solve}: \text{answer} = \text{LLM}(\text{Plan}, \text{Observations}) \]

优势:减少 LLM 调用次数,适合工具调用延迟低的场景。

交叉引用

工具使用的详细讨论见 工具使用综述


8. 局限性与挑战

  1. 上下文窗口:长交互历史消耗大量 Token,可能超出窗口限制
  2. 工具选择错误:LLM 可能选择错误的工具或传递错误的参数
  3. 无限循环:可能陷入重复的思考-行动循环
  4. 观察噪声:工具返回的信息可能不准确或不相关
  5. 规划深度:ReAct 本质上是贪心的,缺乏全局规划
  6. 成本:每一步都需要 LLM 推理,Token 消耗大

参考文献

  1. Yao, S. et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023.
  2. 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.
  3. Schick, T. et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. NeurIPS 2023.
  4. Xu, B. et al. (2023). ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models. arXiv:2305.18323.
  5. Nakano, R. et al. (2021). WebGPT: Browser-assisted Question-answering with Human Feedback. arXiv:2112.09332.

评论 #