ReAct(Reason+Act)架构通过"思考-行动-观察"的循环迭代,让AI智能体实现"边思考、边行动"的能力。文章对比了单次工具调用与ReAct架构,后者能将复杂任务分解为多个步骤,逐步解决。实验证明ReAct在多跳问答等任务上表现更优,但存在延迟和成本较高问题。文章提供了完整代码实现和评估方法,帮助开发者构建更强大的AI智能体。

什么是ReAct?

ReAct的全称是Reason + Act(推理+行动),这是一个在2022年由Yao等人提出的开创性架构。它的核心创新在于:让智能体在解决问题时,不是一次性规划所有步骤,而是采用动态迭代的方式——生成思考、执行行动、观察结果,然后基于新信息继续思考下一步。

ReAct Loop

这种think → act → observe的循环模式,让智能体从静态的工具调用者转变为自适应的问题解决者。

ReAct的工作流程

  1. 接收目标:智能体获得一个复杂任务
  2. 思考(Reason):生成内部推理,例如"要回答这个问题,我首先需要找到信息X"
  3. 行动(Act):基于思考执行动作,比如调用搜索工具
  4. 观察(Observe):获取工具返回的结果
  5. 循环迭代:将观察结果纳入上下文,生成新的思考,继续下一轮

这个循环会持续进行,直到智能体判断任务已完成。

适用场景

  • 多跳问答:需要串联多个信息片段才能回答的问题
  • 网络导航与研究:搜索初始信息后,根据结果决定下一步搜索策略
  • 交互式工作流:环境动态变化,无法预先规划完整路径的任务

为什么需要ReAct?单次工具调用的局限

在正式实现ReAct之前,让我们先构建一个基础的单次工具调用智能体,看看它在复杂任务上会遇到什么问题。

实战:构建基础智能体

首先安装必要的依赖:

pip install -q -U langchain-openai langchain langgraph rich python-dotenv tavily-python

然后导入所需的库并配置API密钥:


import os
from typing import Annotated, TypedDict
from dotenv import load_dotenv

# LangChain组件
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import BaseMessage

# LangGraph组件
from langgraph.graph import StateGraph, END
from langgraph.graph.message import AnyMessage, add_messages
from langgraph.prebuilt import ToolNode, tools_condition

# 美化输出
from rich.console import Console
from rich.markdown import Markdown

# 加载环境变量
load_dotenv()
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "Agentic Architecture - ReAct"

console = Console()

定义状态和工具:


# 定义智能体状态
class AgentState(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]

# 配置LLM和搜索工具
llm = ChatOpenAI(
    base_url=os.environ.get("base_url"),
    api_key=os.environ.get("api_key"),
    model=os.environ.get("model")  
)
search_tool = TavilySearchResults(max_results=2, name="web_search")
llm_with_tools = llm.bind_tools([search_tool])

构建基础智能体图(单次工具调用):


def basic_agent_node(state: AgentState):
    console.print("--- 基础智能体:思考中... ---")
    system_prompt = "你是一个有用的助手。你可以使用网络搜索工具。根据工具结果回答用户问题。你必须在一次工具调用后给出最终答案。"
    messages = [("system", system_prompt)] + state["messages"]
    response = llm_with_tools.invoke(messages)
    return {"messages": [response]}

# 构建线性图
basic_graph_builder = StateGraph(AgentState)
basic_graph_builder.add_node("agent", basic_agent_node)
basic_graph_builder.add_node("tools", ToolNode([search_tool]))
basic_graph_builder.set_entry_point("agent")

# 关键:工具执行后直接结束,没有循环
basic_graph_builder.add_conditional_edges(
    "agent", 
    tools_condition, 
    {"tools": "tools", "__end__": "__end__"}
)
basic_graph_builder.add_edge("tools", END)

basic_tool_agent_app = basic_graph_builder.compile()
print("基础单次工具调用智能体编译成功")

测试:多步骤问题挑战

现在让我们用一个需要多步推理的问题来测试这个基础智能体:


multi_step_query = "制作科幻电影《沙丘》的公司现任CEO是谁?该公司最新电影的预算是多少?"

console.print(f"[bold yellow]测试基础智能体的多步骤问题:[/bold yellow] '{multi_step_query}'\n")

basic_agent_output = basic_tool_agent_app.invoke({
    "messages": [("user", multi_step_query)]
})

console.print("\n--- [bold red]基础智能体的最终输出[/bold red] ---")
console.print(Markdown(basic_agent_output['messages'][-1].content))

结果分析:

基础智能体会失败!它只能进行一次搜索,而这个问题需要:

  1. 找到制作《沙丘》的公司(Legendary Entertainment)
  2. 找到该公司的CEO(Joshua Grode)
  3. 找到该公司最新电影及其预算

单次搜索返回的结果往往混乱且不完整,智能体无法将问题分解为多个步骤。这正是我们需要ReAct架构的原因!

实现ReAct:赋予智能体循环推理能力

ReAct的核心差异在于图结构的设计——我们引入一个循环,让智能体可以反复"思考-行动-观察"。

构建ReAct智能体图


def react_agent_node(state: AgentState):
    console.print("--- ReAct智能体:思考中... ---")
    response = llm_with_tools.invoke(state["messages"])
    return {"messages": [response]}

# 工具节点保持不变
react_tool_node = ToolNode([search_tool])

# 路由函数:决定是继续调用工具还是结束
def react_router(state: AgentState):
    last_message = state["messages"][-1]
    if last_message.tool_calls:
        console.print("--- 路由器:决定调用工具 ---")
        return "tools"
    console.print("--- 路由器:决定结束 ---")
    return "__end__"

# 构建带循环的图
react_graph_builder = StateGraph(AgentState)
react_graph_builder.add_node("agent", react_agent_node)
react_graph_builder.add_node("tools", react_tool_node)
react_graph_builder.set_entry_point("agent")

react_graph_builder.add_conditional_edges(
    "agent", 
    react_router, 
    {"tools": "tools", "__end__": "__end__"}
)

# 关键差异:从工具节点返回到智能体节点,形成循环!
react_graph_builder.add_edge("tools", "agent")

react_agent_app = react_graph_builder.compile()
print("ReAct智能体编译成功,具备推理循环能力")

测试ReAct智能体


console.print(f"[bold green]测试ReAct智能体的同一个多步骤问题:[/bold green] '{multi_step_query}'\n")

final_react_output = None
for chunk in react_agent_app.stream(
    {"messages": [("user", multi_step_query)]}, 
    stream_mode="values"
):
    final_react_output = chunk
    console.print("--- [bold purple]当前状态[/bold purple] ---")
    chunk['messages'][-1].pretty_print()
    console.print("\n")

console.print("\n--- [bold green]ReAct智能体的最终输出[/bold green] ---")
console.print(Markdown(final_react_output['messages'][-1].content))

执行过程分析:

你会看到ReAct智能体展现出完全不同的、更智能的处理过程:

  1. 思考1:“我需要先找到《沙丘》的制作公司”
  2. 行动1:搜索"Dune movie production company"
  3. 观察1:获得结果"Legendary Entertainment"
  4. 思考2:“现在我知道是Legendary,需要找CEO”
  5. 行动2:搜索"Legendary Entertainment CEO"
  6. 观察2:获得"Joshua Grode"
  7. 思考3:“还需要找最新电影预算…”
  8. 综合:最终组装所有收集的信息给出完整答案

这个迭代循环清晰地展示了ReAct架构在复杂多步骤任务上的优势。

定量评估:LLM作为裁判

为了科学地比较两种方法,我们使用LLM-as-a-Judge来评分:


from pydantic import BaseModel, Field

class TaskEvaluation(BaseModel):
    """任务评估模式"""
    task_completion_score: int = Field(
        description="任务完成度评分(1-10)"
    )
    reasoning_quality_score: int = Field(
        description="推理质量评分(1-10)"
    )
    justification: str = Field(
        description="评分理由"
    )

judge_llm = llm.with_structured_output(TaskEvaluation)

def evaluate_agent_output(query: str, agent_output: dict):
    trace = "\n".join([
        f"{m.type}: {m.content}" 
        for m in agent_output['messages']
    ])

    prompt = f"""你是AI智能体的专家评审。请评估以下智能体在给定任务上的表现(1-10分)。
10分表示完美完成,1分表示完全失败。

**用户任务:**
{query}

**智能体对话轨迹:**

{trace}


"""
    return judge_llm.invoke(prompt)

# 评估基础智能体
console.print("--- 评估基础智能体输出 ---")
basic_eval = evaluate_agent_output(multi_step_query, basic_agent_output)
console.print(basic_eval.model_dump())

# 评估ReAct智能体
console.print("\n--- 评估ReAct智能体输出 ---")
react_eval = evaluate_agent_output(multi_step_query, final_react_output)
console.print(react_eval.model_dump())

评估结果:

  • 基础智能体
  • 任务完成度:2/10
  • 推理质量:4/10
  • 理由:提供了部分相关信息,但未能直接回答问题,缺乏重点
  • ReAct智能体
  • 任务完成度:6/10
  • 推理质量:8/10
  • 理由:正确识别了CEO信息,展现了高质量的推理过程,但未完全找到预算信息

量化评分清晰地证明了ReAct架构的价值!

相关研究进展

ReAct架构自提出以来引发了广泛的研究热潮。让我分享一些相关的前沿工作:

核心论文:

  • ReAct: Synergizing Reasoning and Acting in Language Models(发表于3年前)是这一领域的奠基性工作,展示了推理与行动协同如何增强LLM在复杂任务上的能力。

改进与扩展:

  • Pre-Act: Multi-Step Planning and Reasoning Improves Acting in LLM Agents(7个月前)提出在执行前增强多步规划,进一步提升ReAct的性能。
  • Agentic Reasoning: A Streamlined Framework for Enhancing LLM Reasoning(10个月前)引入了一个简化框架,通过集成外部工具使用智能体来增强LLM推理能力,动态利用网络搜索和代码执行。

大规模应用:

  • Agent-R1: Training Powerful LLM Agents with End-to-End Reinforcement Learning(15天前)探索了使用端到端强化学习来训练具有环境交互能力的强大LLM智能体。
  • Scaling Agents via Continual Pre-training(3个月前,来自阿里)展示了通过持续预训练来扩展智能体能力,强调了自主工具使用和多步推理。

综述类:

  • Agentic Large Language Models, a survey(8个月前)提供了智能体LLM领域的全面综述,涵盖了最新的研究进展。
  • The Landscape of Emerging AI Agent Architectures(2年前)系统地调研了用于推理、规划和工具调用的AI智能体架构。

ReAct的优势与挑战

优势:

  • 自适应与动态:能够根据新信息动态调整计划
  • 处理复杂性:擅长需要链接多个依赖步骤的问题
  • 透明性:推理过程可追溯,便于调试

挑战:

  • ⚠️ 延迟与成本:涉及多次顺序LLM调用,速度较慢、成本较高
  • ⚠️ 循环风险:引导不当可能陷入重复无效的思考-行动循环
  • ⚠️ 停止条件:需要设计合理的终止机制

总结

在这篇文章中,我们不仅实现了ReAct架构,还通过对比实验清晰地展示了它相对于基础方法的优越性。通过构建一个允许智能体循环执行"推理-行动"的工作流,我们使其能够解决复杂的多步骤问题。

观察行动结果并用这些信息指导下一步的能力,是智能行为的基本组成部分。 ReAct模式为我们的AI智能体提供了一种简单而深刻有效的方式来构建这种能力,使它们在现实任务中更强大、更自适应、更有用。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2025 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐