ReAct架构详解:打造能“边思考、边行动“的AI智能体!
ReAct(Reason+Act)架构通过"思考-行动-观察"循环迭代,使AI智能体具备动态解决复杂任务的能力。相比单次工具调用,ReAct能将多步骤任务分解执行,在多跳问答等任务上表现更优。文章提供了完整代码实现和评估方法,展示了ReAct的自适应处理能力,同时也讨论了其延迟、成本等挑战。这一架构使AI智能体更强大、更自适应,在现实任务中更有用。
ReAct(Reason+Act)架构通过"思考-行动-观察"的循环迭代,让AI智能体实现"边思考、边行动"的能力。文章对比了单次工具调用与ReAct架构,后者能将复杂任务分解为多个步骤,逐步解决。实验证明ReAct在多跳问答等任务上表现更优,但存在延迟和成本较高问题。文章提供了完整代码实现和评估方法,帮助开发者构建更强大的AI智能体。
什么是ReAct?
ReAct的全称是Reason + Act(推理+行动),这是一个在2022年由Yao等人提出的开创性架构。它的核心创新在于:让智能体在解决问题时,不是一次性规划所有步骤,而是采用动态迭代的方式——生成思考、执行行动、观察结果,然后基于新信息继续思考下一步。

ReAct Loop
这种think → act → observe的循环模式,让智能体从静态的工具调用者转变为自适应的问题解决者。
ReAct的工作流程
- 接收目标:智能体获得一个复杂任务
- 思考(Reason):生成内部推理,例如"要回答这个问题,我首先需要找到信息X"
- 行动(Act):基于思考执行动作,比如调用搜索工具
- 观察(Observe):获取工具返回的结果
- 循环迭代:将观察结果纳入上下文,生成新的思考,继续下一轮
这个循环会持续进行,直到智能体判断任务已完成。
适用场景
- 多跳问答:需要串联多个信息片段才能回答的问题
- 网络导航与研究:搜索初始信息后,根据结果决定下一步搜索策略
- 交互式工作流:环境动态变化,无法预先规划完整路径的任务
为什么需要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))
结果分析:
基础智能体会失败!它只能进行一次搜索,而这个问题需要:
- 找到制作《沙丘》的公司(Legendary Entertainment)
- 找到该公司的CEO(Joshua Grode)
- 找到该公司最新电影及其预算
单次搜索返回的结果往往混乱且不完整,智能体无法将问题分解为多个步骤。这正是我们需要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:搜索"Dune movie production company"
- 观察1:获得结果"Legendary Entertainment"
- 思考2:“现在我知道是Legendary,需要找CEO”
- 行动2:搜索"Legendary Entertainment CEO"
- 观察2:获得"Joshua Grode"
- 思考3:“还需要找最新电影预算…”
- 综合:最终组装所有收集的信息给出完整答案
这个迭代循环清晰地展示了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%免费】🆓

更多推荐

所有评论(0)