ReAct框架构建Agent智能体:推理-行动循环训练与实现2026完整教程

ReAct框架构建Agent智能体:推理-行动循环训练与实现2026完整教程

ReAct(Reasoning + Acting)是当前Agent智能体领域最经典的推理框架之一,由Yao et al.在2022年提出。它通过将大语言模型的推理能力工具调用能力交替执行,使Agent能够像人类一样"先思考、再行动、再观察结果",从而解决复杂的多步骤任务。2026年,随着LangGraph的成熟,ReAct框架的落地门槛大幅降低,开发者可以用几行代码构建出具备记忆持久化和多工具协调能力的智能体。本教程将从原理到实现,完整讲解ReAct Agent的构建与训练方法。

3步循环
Thought-Action-Observation
一键编排
create_react_agent
MemorySaver
记忆持久化
2022
Yao et al.提出

一、ReAct框架原理与起源

ReAct由Shunyu Yao等研究者在2022年的论文《ReAct: Synergizing Reasoning and Acting in Language Models》中首次提出。核心思想是让语言模型在解决问题时交替进行推理(Reasoning/Thought)行动(Acting/Action),而非单纯依赖链式思维(Chain-of-Thought)或单一的工具调用。这种交替模式让模型在每一步行动后都能获取外部反馈(Observation),从而动态调整后续推理路径,显著减少了幻觉和错误累积。

与纯CoT相比,ReAct的最大优势在于 grounding——模型通过工具调用与真实环境交互,将推理建立在可验证的事实之上。例如在回答"今天北京天气如何"时,纯CoT只能依赖训练数据猜测,而ReAct会调用搜索工具获取实时数据,保证答案准确性。

二、核心循环:Thought-Action-Observation

ReAct的运行机制由三个核心步骤构成的循环驱动,直到任务完成:

ReAct框架构建Agent智能体:推理-行动循环训练与实现2026完整教程

  • Thought(思考):分析当前状态和已有信息,决定下一步应该做什么。模型输出一段自然语言推理。
  • Action(行动):根据Thought的结论,调用外部工具,格式为 tool_name(args)
  • Observation(观察):接收工具返回的结果,将其加入上下文,进入下一轮Thought。

以下是一个经典的ReAct轨迹示例,展示Agent如何回答"《流浪地球2》的导演还导过哪些电影":

Thought: 我需要先查找《流浪地球2》的导演是谁
Action: search("流浪地球2 导演")
Observation: 《流浪地球2》由郭帆执导
Thought: 现在我需要搜索郭帆还导过哪些电影
Action: search("郭帆 导演作品")
Observation: 郭帆执导过《李献计历险记》《同桌的你》《流浪地球》《流浪地球2》
Thought: 我已经获得了答案,可以回复用户了
Action: finish("郭帆还执导过《李献计历险记》《同桌的你》《流浪地球》等")

三、LangGraph实现:create_react_agent一键编排

LangGraph提供了 create_react_agent 函数,将ReAct的推理循环、工具调用和响应格式化封装为一键调用。开发者只需提供模型和工具列表,即可获得一个完整可运行的Agent:

from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent

# 定义工具
@tool
def search(query: str) -> str:
    """搜索互联网获取实时信息"""
    # 实际实现中接入搜索API
    return f"搜索结果: {query} 的相关信息..."

@tool
def calculator(expression: str) -> str:
    """数学计算工具"""
    return str(eval(expression))

# 创建模型和Agent
model = ChatOpenAI(model="gpt-4o", temperature=0)
tools = [search, calculator]
agent = create_react_agent(model, tools)

# 运行Agent
result = agent.invoke({
    "messages": [{"role": "user", "content": "2024年中国GDP是多少万亿?乘以1.1"}]
})
print(result["messages"][-1].content)

create_react_agent 内部自动构建了一个状态图(StateGraph),包含 agent 节点(负责推理和工具调用决策)和 tools 节点(负责执行工具),两者之间通过条件边连接,形成完整的Thought-Action-Observation循环。

四、记忆配置:MemorySaver实现持久化

默认情况下,ReAct Agent是无状态的——每次调用都是独立会话。通过配置 MemorySaver 检查点,Agent可以跨对话轮次记住上下文,实现真正的记忆持久化:

ReAct框架构建Agent智能体:推理-行动循环训练与实现2026完整教程

from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent

memory = MemorySaver()
agent = create_react_agent(model, tools, checkpointer=memory)

# 第一轮对话 - thread_id标识会话
config = {"configurable": {"thread_id": "session_001"}}
agent.invoke(
    {"messages": [{"role": "user", "content": "我叫张三"}]},
    config=config
)

# 第二轮对话 - Agent记住上一轮信息
result = agent.invoke(
    {"messages": [{"role": "user", "content": "我刚才告诉你我叫什么?"}]},
    config=config
)
print(result["messages"][-1].content)  # 输出: 你叫张三

thread_id 是会话标识,相同thread_id的调用共享同一记忆上下文。生产环境中可替换为 SqliteSaverPostgresSaver 实现持久化存储。

五、训练优化:SFT与RLVR提升推理质量

对于自研模型,ReAct格式的遵循能力需要通过专门的训练来强化。2026年主流的训练方案分为两个阶段:

1. SFT(监督微调)训练格式遵循:构建高质量的ReAct轨迹数据集,让模型学会按Thought-Action-Observation格式输出。数据格式示例:

{
  "instruction": "查询上海明天天气",
  "output": "Thought: 需要调用天气查询工具\nAction: weather_api(city=\"上海\", date=\"明天\")\nObservation: 晴,最高温32度\nThought: 已获取天气信息\nAction: finish(\"上海明天晴,最高温32度\")"
}

2. RLVR(强化学习+可验证奖励)提升推理质量:对推理轨迹的正确性设置可验证的奖励信号——工具调用是否成功、最终答案是否正确,通过PPO或GRPO算法优化模型的推理策略,使其学会在复杂场景下选择更优的行动路径。

六、ReAct与其他框架对比

维度ReActPlan-and-ExecuteCoT
核心模式推理与行动交替先规划再执行纯推理链
工具调用每步可调用规划后执行不调用
动态调整支持较弱不支持
适用场景多步骤交互任务明确流程任务纯推理问题
实现复杂度中等较高

七、应用场景

ReAct框架在以下场景中表现优异:智能客服(查询知识库+订单系统)、数据分析助手(调用SQL+计算工具+可视化)、研究助手(搜索+阅读+总结)、自动化运维(诊断+执行修复命令)。其核心价值在于让LLM从"只会说"进化为"能做事"的智能体。

八、FAQ常见问题

Q1:ReAct和Function Calling有什么区别?

Function Calling是模型层面的能力(输出结构化工具调用JSON),ReAct是框架层面的范式(包含Thought推理+Action调用+Observation观察的完整循环)。ReAct可以使用Function Calling作为Action的底层实现,两者是互补关系而非替代。

Q2:create_react_agent最大循环次数有限制吗?

有。默认通过 recursion_limit 参数控制,默认值通常为25。可通过 config={"recursion_limit": 50} 调整,防止Agent陷入无限循环。

Q3:MemorySaver能用于生产环境吗?

MemorySaver是内存级存储,进程重启后数据丢失,仅适合开发测试。生产环境应使用 PostgresSaverRedisSaver 实现持久化检查点。

Q4:SFT训练ReAct格式需要多少数据?

通常5000-10000条高质量ReAct轨迹即可让模型学会格式遵循。关键不在数量而在质量——轨迹应覆盖多样化工具组合和复杂推理路径,避免模型过拟合到固定模式。

Q5:ReAct Agent如何处理工具调用失败?

Observation会返回错误信息,Agent在下一轮Thought中识别到失败并选择重试、换用其他工具或告知用户无法完成。这种自我纠错能力正是ReAct交替循环的优势所在。

本教程涵盖了ReAct框架的原理、核心循环、LangGraph实现、记忆配置、训练优化及框架对比。2026年,create_react_agent已成为构建推理型Agent的标准方案,结合SFT+RLVR训练范式,开发者可以打造出具备强推理能力和工具协调能力的智能体系统。