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()

定义状态和工具:


# 定义智能体状态
classAgentState(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

classTaskEvaluation(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大模型成为越来越多程序员转行就业、升职加薪的首选

很简单,这些岗位缺人且高薪

智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200% ,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

在这里插入图片描述

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

那0基础普通人如何学习大模型 ?

深耕科技一线十二载,亲历技术浪潮变迁。我见证那些率先拥抱AI的同行,如何建立起效率与薪资的代际优势。如今,我将积累的大模型面试真题、独家资料、技术报告与实战路线系统整理,分享于此,为你扫清学习困惑,共赴AI时代新程。

我整理出这套 AI 大模型突围资料包【允许白嫖】:

  • ✅从入门到精通的全套视频教程

  • ✅AI大模型学习路线图(0基础到项目实战仅需90天)

  • ✅大模型书籍与技术文档PDF

  • ✅各大厂大模型面试题目详解

  • ✅640套AI大模型报告合集

  • ✅大模型入门实战训练

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

①从入门到精通的全套视频教程

包含提示词工程、RAG、Agent等技术点

在这里插入图片描述

② AI大模型学习路线图(0基础到项目实战仅需90天)

全过程AI大模型学习路线

在这里插入图片描述

③学习电子书籍和技术文档

市面上的大模型书籍确实太多了,这些是我精选出来的

在这里插入图片描述

④各大厂大模型面试题目详解

在这里插入图片描述

⑤640套AI大模型报告合集

在这里插入图片描述

⑥大模型入门实战训练

在这里插入图片描述

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:
有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

Logo

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

更多推荐