🧠 ReAct Pattern 是什么?

"凌晨1点08分,我看着日志里Agent的推理轨迹。它先是想了一下,然后去做了一件事,接着又想了想。我忽然理解了'ReAct'这个名字——它不是在思考,也不是在行动,而是在'思考-行动-思考-行动'的循环中,一点一点逼近真相。就像人类一样。"

更新时间:2026-04-18 | 阅读时间:约10分钟 | 分类:Agent推理模式
核心概念

一、ReAct 定义

ReAct(Reasoning + Acting,思考-行动模式)是 Google Research 在 2022 年提出的一种 LLM Agent 推理架构。它通过让模型交替进行思考(Reasoning)行动(Acting),并结合观察(Observation),来实现复杂任务的逐步解决。

ReAct 的核心思想是:智能不仅是思考,也不仅是行动,而是两者的有机结合。就像人类解决问题时会先思考,然后行动,观察结果,再思考下一步。

💡 一句话理解:ReAct = 让 AI 像人类一样"边想边做"——先思考(Thought),再行动(Action),然后观察结果(Observation),循环往复直到解决问题。

二、ReAct 的核心组成

ReAct 循环的三要素

1 Thought(思考)

LLM 分析当前状态,形成推理过程。这是"内心独白",决定了下一步做什么。

示例:"我需要查找2024年AI Agent市场规模的数据,让我先搜索一下。"
2 Action(行动)

基于思考结果,执行具体的操作,通常是调用工具。

示例:执行 web_search("2024 AI Agent market size")
3 Observation(观察)

获取行动的结果,作为下一步思考的输入。

示例:"搜索结果显示2024年全球AI Agent市场规模约为50亿美元..."

ReAct 循环示例

用户问题:"谁是美国历史上第一位女国务卿?"

┌────────────────────────────────────────────────────────────┐
│ Thought 1: 我需要搜索关于美国首位女国务卿的信息。          │
│ Action 1: web_search("first female Secretary of State US") │
│ Observation 1: [搜索结果] Madeleine Albright 于1997年...    │
├────────────────────────────────────────────────────────────┤
│ Thought 2: 搜索结果提到Madeleine Albright是首位女国务卿。  │
│ Action 2: 我需要验证她是否真的是第一位。                   │
│ Observation 2: [无需行动,思考完成]                        │
├────────────────────────────────────────────────────────────┤
│ Thought 3: 我已经找到了答案,可以回复用户了。              │
│ Action 3: 输出最终答案                                     │
│ Final Answer: 美国历史上第一位女国务卿是Madeleine          │
│ Albright(玛德琳·奥尔布赖特),于1997年上任。              │
└────────────────────────────────────────────────────────────┘

三、ReAct vs 其他推理模式

模式 特点 适用场景
Standard Prompting 直接问答,无推理过程 简单事实问答
Chain-of-Thought (CoT) 仅推理,不与外部交互 数学、逻辑题
Action Only 仅行动,无显式推理 简单工具调用
ReAct 推理+行动结合,可交互 复杂信息检索任务

ReAct 的优势

四、ReAct 的工作流程

┌─────────────────────────────────────────────────────────────────┐
│                         ReAct Loop                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌──────────┐     ┌──────────┐     ┌──────────┐               │
│   │  Thought │────→│  Action  │────→│Observation│               │
│   │  (思考)  │     │  (行动)  │     │  (观察)   │               │
│   └────┬─────┘     └──────────┘     └────┬─────┘               │
│        │                                 │                       │
│        └────────←←←←←←←←←←←←←←←←←←←←←───┘                       │
│                                                                 │
│   循环终止条件:                                                 │
│   • 找到答案 → 输出最终答案                                     │
│   • 达到最大步数 → 返回失败                                     │
│   • 无法继续 → 返回错误                                         │
└─────────────────────────────────────────────────────────────────┘

ReAct Prompt 模板结构

系统提示词:
你是一个智能助手。请按照以下格式解决问题:

思考(Thought):分析问题,决定下一步行动
行动(Action):调用工具,格式为 {"tool": "tool_name", "args": {...}}
观察(Observation):获取工具的返回结果

你可以使用以下工具:
- web_search: 搜索网络信息
- calculator: 进行数学计算
- read_file: 读取文件内容

现在请解决问题:

用户问题:{{question}}

之前的思考-行动轨迹:
{{trajectory}}

思考:

五、OpenClaw 中的 ReAct 实现

OpenClaw 原生支持 ReAct 模式,Agent 会自动进行思考-行动的循环迭代。

OpenClaw ReAct 执行示例

场景:用户提问"OpenClaw和LangChain相比有什么优势?"
# OpenClaw Agent 自动执行的 ReAct 轨迹

用户: "OpenClaw和LangChain相比有什么优势?"

┌──────────────────────────────────────────────────────────────┐
│ Thought 1: 用户想了解OpenClaw和LangChain的对比。我需要     │
│ 先搜索OpenClaw的最新特性,然后搜索LangChain的特性,再进行   │
│ 对比分析。                                                   │
├──────────────────────────────────────────────────────────────┤
│ Action 1: web_search("OpenClaw features advantages 2026")    │
├──────────────────────────────────────────────────────────────┤
│ Observation 1: [搜索结果摘要] OpenClaw 特性包括:           │
│ - 内置丰富工具集                                             │
│ - 原生 MCP 支持                                              │
│ - 子 Agent 管理                                              │
│ - 定时任务系统                                               │
│ - Gateway 配置管理                                           │
├──────────────────────────────────────────────────────────────┤
│ Thought 2: 好的,我获取了OpenClaw的主要特性。现在我需要     │
│ 搜索LangChain的特性进行对比。                                │
├──────────────────────────────────────────────────────────────┤
│ Action 2: web_search("LangChain features architecture")      │
├──────────────────────────────────────────────────────────────┤
│ Observation 2: [搜索结果摘要] LangChain 特点:              │
│ - 模块化设计                                                 │
│ - 多模型支持                                                 │
│ - 丰富的集成                                                 │
│ - 更依赖代码开发                                             │
├──────────────────────────────────────────────────────────────┤
│ Thought 3: 现在我可以进行对比分析了。OpenClaw的优势在于:   │
│ 开箱即用、内置工具丰富、原生支持MCP标准等。                  │
├──────────────────────────────────────────────────────────────┤
│ Final Answer:                                                │
│ OpenClaw相比LangChain的主要优势:                            │
│ 1. 开箱即用:内置大量工具,无需额外配置                      │
│ 2. MCP原生支持:无缝对接标准工具协议                         │
│ 3. 子Agent管理:内置多Agent协调机制                          │
│ 4. 运维友好:内置定时任务和Gateway管理                       │
│ ...                                                          │
└──────────────────────────────────────────────────────────────┘

OpenClaw 配置 ReAct Agent

# agent_config.yaml
agent:
  name: "research_assistant"
  reasoning_mode: "react"  # 启用 ReAct 模式
  
  # ReAct 配置
  react_config:
    max_iterations: 10        # 最大迭代次数
    max_tool_calls: 5         # 单次对话最大工具调用次数
    
    # 是否让模型显式输出思考过程
    show_thoughts: true
    
    # 工具调用后是否自动继续推理
    auto_continue: true
    
    # 思考模板
    thought_template: |
      请分析当前情况,决定下一步行动:
      - 如果已经找到答案,输出 "Final Answer"
      - 如果需要更多信息,调用合适的工具
      - 注意避免重复调用相同的工具
  
  tools:
    - web_search
    - web_fetch
    - read
    - write
    
  model: anthropic/claude-3-sonnet

自定义 ReAct 工具调用逻辑

# 在 OpenClaw 中自定义 ReAct 行为

async function customReactAgent(userQuery) {
  const context = {
    query: userQuery,
    thoughts: [],
    actions: [],
    observations: []
  };
  
  for (let i = 0; i < maxIterations; i++) {
    // 1. Thought: 让 LLM 分析并决定下一步
    const thought = await llm.generate({
      prompt: buildReactPrompt(context),
      tools: availableTools
    });
    
    context.thoughts.push(thought.content);
    
    // 2. Action: 执行工具调用
    if (thought.hasToolCall) {
      const action = thought.toolCall;
      context.actions.push(action);
      
      // 执行工具
      const observation = await executeTool(action);
      context.observations.push(observation);
      
      // 检查是否完成任务
      if (await isTaskComplete(context)) {
        break;
      }
    } else {
      // 没有工具调用,直接返回答案
      return thought.content;
    }
  }
  
  // 生成最终答案
  return await generateFinalAnswer(context);
}

六、ReAct 的最佳实践

✅ 最佳实践:
  1. 清晰的工具描述:让模型知道每个工具能做什么、不能做什么
  2. 设置最大迭代次数:防止无限循环,通常 5-10 次足够
  3. 提供 Few-shot 示例:在 Prompt 中给出 1-2 个 ReAct 轨迹示例
  4. 错误处理:工具调用失败时给出清晰错误信息,让模型重新决策
  5. 日志记录:记录完整的 Thought-Action-Observation 轨迹用于调试
⚠️ 常见陷阱:

Few-shot ReAct 示例模板

问题:2023年诺贝尔文学奖获得者是谁?

思考:我需要搜索2023年诺贝尔文学奖的信息。
行动:{"tool": "web_search", "args": {"query": "2023年诺贝尔文学奖获得者"}}
观察:2023年诺贝尔文学奖授予了挪威剧作家约恩·福瑟(Jon Fosse)。

思考:我已经找到了答案,可以回复用户了。
行动:{"tool": "final_answer", "args": {"answer": "2023年诺贝尔文学奖获得者是挪威剧作家约恩·福瑟(Jon Fosse)。"}}

---

问题:3的平方加上4的平方等于多少?

思考:这是一个数学计算问题,我可以直接计算。
行动:{"tool": "calculator", "args": {"expression": "3^2 + 4^2"}}
观察:25

思考:计算结果是25,这是正确的(因为3-4-5直角三角形的斜边平方)。
行动:{"tool": "final_answer", "args": {"answer": "3的平方加上4的平方等于25。"}}

七、ReAct 的变体与演进

变体 特点
Self-Ask 分解复杂问题为子问题,逐一回答
Plan-and-Solve 先制定计划,再执行
Tree-of-Thoughts 探索多条推理路径,选择最优
Reflexion 失败后反思并修正策略

八、总结

ReAct 模式是构建智能 Agent 的基石。它通过显式的思考-行动-观察循环,让 LLM 能够像人类一样逐步推理、动态决策、与外部世界交互。在 OpenClaw 中,你可以轻松配置和扩展 ReAct Agent,实现从简单问答到复杂任务自动化的各种应用场景。

"世界上有一种模式叫 ReAct,它让 AI 学会了'停下来想想'。在这个追求速度和效率的时代,这种愿意停下来思考的能力,反而成了最大的竞争力。"

© 2026 妙趣AI | miaoquai.com - 让AI变得妙趣横生