什么是 ReAct?

ReAct = Reasoning(推理)+ Acting(行动)

这是 2022 年由 Yao 等人提出的 Agent 推理范式,核心理念极其简洁:让 LLM 在「思考」和「行动」之间交替进行

思考(Thought) → 行动(Action) → 观察(Observation) → 思考(Thought) → ...

在 ReAct 之前,LLM Agent 面临两个极端:

  • 只思考不行动:Chain-of-Thought 推理强,但无法获取外部信息
  • 只行动不思考:工具调用缺乏规划,容易陷入无效循环

ReAct 的突破在于:用推理指导行动,用行动反馈推理

ReAct 的工作流程

标准循环

┌──────────────────────────────────────────┐
│            用户输入任务                     │
└──────────────┬───────────────────────────┘
┌──────────────────────────────────────────┐
│  Thought: 分析任务,决定下一步该做什么       │
│  Action: 选择工具并构造参数                 │
└──────────────┬───────────────────────────┘
┌──────────────────────────────────────────┐
│  Observation: 工具返回结果                  │
└──────────────┬───────────────────────────┘
┌──────────────────────────────────────────┐
│  Thought: 根据观察结果继续推理              │
│  Action: 继续行动 OR 给出最终答案           │
└──────────────┬───────────────────────────┘
          循环直到完成

实际示例

任务:查询 2026 年 GPT-5 的发布日期并计算距今多少天。

Thought: 我需要先搜索 GPT-5 的发布日期信息。
Action: search("GPT-5 发布日期 2026")
Observation: OpenAI 于 2026 年 3 月 15 日发布 GPT-5...

Thought: 找到了,GPT-5 发布日期是 2026年3月15日。
         现在需要计算从那天到今天(6月18日)的天数。
Action: calculate("days_between('2026-03-15', '2026-06-18')")
Observation: 95

Thought: 我已经得到了答案,可以回复用户了。
Action: finish("GPT-5 于 2026年3月15日发布,距今 95 天。")

代码实现

基础 ReAct Agent

import json
from typing import Dict, Any

class ReActAgent:
    def __init__(self, llm, tools: Dict[str, Any]):
        self.llm = llm
        self.tools = tools
        self.history = []

    def run(self, task: str, max_steps: int = 10):
        prompt = self._build_prompt(task)

        for step in range(max_steps):
            # LLM 生成 Thought + Action
            response = self.llm.generate(prompt)
            thought, action = self._parse(response)

            print(f"\n--- Step {step + 1} ---")
            print(f"Thought: {thought}")
            print(f"Action: {action}")

            # 检查是否完成
            if action["name"] == "finish":
                return action["input"]

            # 执行工具
            tool = self.tools[action["name"]]
            observation = tool(action["input"])
            print(f"Observation: {observation}")

            # 更新历史
            self.history.append({
                "thought": thought,
                "action": action,
                "observation": observation
            })
            prompt = self._update_prompt(task)

        return "达到最大步数限制,未完成任务。"

    def _build_prompt(self, task):
        tools_desc = "\n".join([
            f"- {name}: {tool.__doc__}" for name, tool in self.tools.items()
        ])
        return f"""任务: {task}

可用工具:
{tools_desc}

请使用以下格式:
Thought: 你的推理过程
Action: {{"name": "工具名", "input": "参数"}}

历史记录:
{json.dumps(self.history, ensure_ascii=False, indent=2)}
"""

ReAct 的优势

1. 可解释性极强

每一步推理都有显式的 Thought,人类可以理解 Agent 的决策过程。这在调试和安全审计中至关重要。

2. 错误自纠正

Thought: 搜索 GPT-5 信息
Action: search("GPT-5")
Observation: 搜索结果为空(网络错误)

Thought: 搜索失败,换一个关键词重试
Action: search("OpenAI GPT-5 release 2026")
Observation: 成功获取结果...

Agent 能够在 Observation 不符合预期时,调整策略。

3. 工具组合使用

ReAct 可以自然地串联多个工具,形成复杂的工作流。

ReAct 的局限

1. 上下文窗口膨胀

每一步的 Thought + Action + Observation 都会追加到上下文中。长任务容易超出上下文窗口限制。

解决方案

  • 摘要压缩:定期对历史记录做摘要
  • 选择性遗忘:丢弃无关的中间步骤
  • 外部记忆:将历史存入向量数据库

2. 推理链断裂

LLM 可能在某一步「走神」,导致推理方向偏离。

Thought: 我需要计算价格
Action: calculate("100 * 0.8")
Observation: 80

Thought: 80 元很便宜,让我看看其他商品...  ← 这里跑偏了
Action: search("类似商品价格")

3. 无回溯能力

标准 ReAct 是线性的,无法回到之前的某个状态尝试不同路径。

ReAct 的进化

变体核心改进适用场景
Reflexion增加自我反思机制需要从失败中学习
Tree-of-Thought树状搜索多个推理路径需要探索多种可能
Plan-and-Execute先规划全局再执行复杂多步任务
LATS蒙特卡洛树搜索 + ReAct需要最优路径搜索

实践建议

  1. 工具描述要精确:LLM 靠工具描述决定用哪个工具,描述不清会导致错误选择
  2. 限制最大步数:防止无限循环消耗 token
  3. 设计好 finish 信号:让 Agent 知道什么时候该停下来
  4. 日志记录:保存每一步的 Thought/Action/Observation,方便调试
  5. Few-shot 示例:在 prompt 中给出 1-2 个成功示例,显著提升效果

结语

ReAct 是 Agent 推理范式的基石。理解 ReAct,就理解了 Agent「思考」的本质。在此基础上发展出的 Reflexion、ToT、Plan-and-Execute 等变体,都是在解决 ReAct 的某个局限。

在硅基 AGI 的探索中,简单而强大的范式往往最具生命力。ReAct 正是这样一个范式——用最少的假设,实现最灵活的推理。


深入理解 Agent 推理范式,请持续关注 硅基 AGI · guijiagi.com

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。