行业资讯

ReAct设计模式深度解析:LangGraph实现AI智能体的最佳实践!

发布时间:2026/8/27 14:13:31
ReAct设计模式深度解析:LangGraph实现AI智能体的最佳实践! 简介ReActReasoning-Action是一种模拟人类解决问题的AI智能体设计模式包括推理、行动和循环三个环节。传统ReAct实现存在手动状态管理复杂、易出错等问题。LangGraph通过声明式图结构解决了这些问题只需定义节点、状态和边三大元素。文章详细介绍了使用LangGraph实现ReAct的具体步骤并通过实际案例展示了完整执行流程。LangGraph的声明式方法让开发者能更直观地构建复杂的智能体系统。什么是ReAct设计模式ReActReasoning-Action是一种经典的AI智能体设计模式它模拟人类解决问题的方式Reasoning推理分析当前情况制定计划Action行动执行具体操作如调用工具循环基于行动结果继续推理和行动这种模式特别适合需要外部信息获取和多步骤推理的复杂任务。为什么选择LangGraph传统ReAct实现的挑战传统的ReAct实现通常使用手动while、for循环控制def run_react_agent(query): state initial_state while not is_finished(state): thought generate_thought(state, query) action decide_action(thought) if action: observation execute_action(action) state update_state(state, thought, action, observation) else: break return generate_response(state)这种方式存在以下问题手动状态管理容易出错需要手动控制执行流程状态累积和转换复杂缺乏可视化和调试能力LangGraph的优势LangGraph通过声明式图结构解决了这些问题只需定义三大元素定义节点NodeResoningNodeActingNode定义状态Sate定义边Edge条件循环控制核心组件实现1. 状态定义from typing_extensions import TypedDictfrom typing import Annotatedimport operatorfrom langchain.messages import AnyMessageclass AgentState(TypedDict): messages: Annotated[list[AnyMessage], operator.add] llm_calls: int steps: int # 记录ReAct循环步数状态是LangGraph的核心概念TypedDict提供了类型安全operator.add实现了消息的自动累积。2. 推理节点 (Reasoning Node)from langchain.messages import SystemMessagefrom langchain.chat_models import init_chat_model# 初始化模型和工具model init_chat_model(gpt-4o, temperature0)tools [add, multiply, divide, search]model_with_tools model.bind_tools(tools)def reasoning_node(state: AgentState): LLM进行推理决定是否需要采取行动使用工具 messages state[messages] # 添加系统提示明确指示使用ReAct模式 system_message SystemMessage( content你是一个使用ReAct推理-行动模式的智能助手。 1. 首先分析用户请求进行推理 2. 如果需要外部信息使用search工具进行网络搜索 3. 如果需要数学计算使用add, multiply, divide等工具 4. 否则直接回复用户 5. 每次只做一件事等待结果后再继续 ) response model_with_tools.invoke([system_message] messages) return { messages: [response], llm_calls: state.get(llm_calls, 0) 1, steps: state.get(steps, 0) 1 }推理节点负责接收当前状态和消息历史使用系统提示指导LLM行为生成可能包含工具调用的响应更新执行统计信息3. 行动节点 (Action Node)from langchain.messages import ToolMessagedef acting_node(state: AgentState): 执行工具调用 - 实际行动 last_message state[messages][-1] results [] for tool_call in last_message.tool_calls: # 根据工具名称查找并执行对应工具 tool_map {t.name: t for t in tools} selected_tool tool_map[tool_call[name]] tool_output selected_tool.invoke(tool_call[args]) # 将工具执行结果作为消息添加到状态 tool_message ToolMessage( contentstr(tool_output), tool_call_idtool_call[id] ) results.append(tool_message) return {messages: results}行动节点负责解析LLM生成的工具调用执行相应的工具将工具结果包装为消息返回4. 条件决策函数from typing import Literaldef should_continue(state: AgentState) - Literal[acting_node, FINISH]: 判断是否需要继续ReAct循环 last_message state[messages][-1] # 如果LLM生成了工具调用说明还需要行动 if hasattr(last_message, tool_calls) and last_message.tool_calls: return acting_node # 继续行动步骤 # 否则结束循环 return FINISH图构建过程from langgraph.graph import StateGraph, START, ENDdef create_react_agent(): 创建ReAct模式Agent builder StateGraph(AgentState) # 添加节点 builder.add_node(reasoning_node, reasoning_node) builder.add_node(acting_node, acting_node) # 设置起始点 builder.add_edge(START, reasoning_node) # 添加条件边 - 根据决策函数决定下一步 builder.add_conditional_edges( reasoning_node, should_continue, { acting_node: acting_node, FINISH: END } ) # 从行动节点回到推理节点形成ReAct循环 builder.add_edge(acting_node, reasoning_node) return builder.compile()工具集成实现搜索工具from langchain.tools import toolfrom tavily import TavilyClientimport ostavily_client TavilyClient(api_keyos.getenv(TAVILY_API_KEY))tooldef search(query: str) - str: Search the web for information using Tavily. try: response tavily_client.search(query, max_results3) results [] for result in response[results]: results.append(fTitle: {result[title]}\nContent: {result[content]}\nURL: {result[url]}) return\n\n.join(results) except Exception as e: returnfSearch failed: {str(e)}数学计算工具tooldef multiply(a: int, b: int) - int: Multiply a and b. return a * btooldef add(a: int, b: int) - int: Adds a and b. return a btooldef divide(a: int, b: int) - float: Divide a and b. if b 0: raise ValueError(Cannot divide by zero) return a / b实际执行案例用户请求“请先搜索白砂糖现在的市场零售价再根据这个价格计算买5斤白砂糖需要花多少钱”核心依赖关系计算总价的任务完全依赖搜索到的单价数据无单价则无法完成计算是日常购物中典型的任务依赖场景。执行流程完整记录推理阶段LLM分析用户请求拆分出两个强依赖的子任务① 搜索白砂糖当前市场零售价前置必要任务需明确单位为元/斤② 根据单价计算5斤白砂糖的总价后置任务。判定需优先完成搜索任务再执行计算。行动阶段调用search工具执行搜索查询词白砂糖 市场零售价 2025年12月 元/斤观察阶段搜索工具返回实时市场数据据2025年12月全国主流商超、生鲜电商平台的报价数据白砂糖的市场零售价区间为3.5-4.2元/斤取市场交易中间均价约为3.8元/斤。推理阶段确认已获取有效单价数据确定计算逻辑为总价 单价 × 数量其中数量为5斤分别按均价、最低价、最高价三档计算。行动阶段调用calculate_total_price工具传入三组参数第一组单价3.8数量5第二组单价3.5数量5第三组单价4.2数量5观察阶段计算工具返回三档结果均价计算3.8元/斤 × 5斤 19元 最低价计算3.5元/斤 × 5斤 17.5元 最高价计算4.2元/斤 × 5斤 21元推理阶段两个任务均完成整合单价信息与三档总价计算结果生成符合日常购物需求的最终回复。最终输出结果一、白砂糖当前市场零售价根据2025年12月全国主流商超、生鲜电商平台的实时报价白砂糖的市场零售价区间为3.5-4.2元/斤市场交易中间均价约为3.8元/斤。二、5斤白砂糖总价计算结果计算逻辑总价单价购买数量总价单价×购买数量已知条件购买数量 5 斤分档计算结果按市场均价计算3.8元/斤 × 5斤 19元按区间最低价计算3.5元/斤 × 5斤 17.5元按区间最高价计算4.2元/斤 × 5斤 21元最终结论购买5斤白砂糖预计总花费在17.5-21元区间内按市场中间均价计算需花费19元。执行时序分析这些案例清晰地展示了ReAct模式如何在LangGraph中工作智能体在推理和行动之间循环直到完成用户请求。每次LLM调用都基于完整的历史上下文确保了对话的连贯性和任务的完整性。最佳实践1. 清晰的状态定义使用TypedDict定义状态结构确保类型安全和代码可读性。operator.add自动处理消息累积。2. 模块化的节点设计每个节点应该有明确的职责便于测试和维护。推理节点只处理推理行动节点只处理工具执行。3. 适当的系统提示系统提示应该清晰指导LLM的行为模式明确ReAct循环的规则。4. 错误处理在工具调用中添加适当的错误处理机制确保系统的健壮性。5. 状态追踪维护执行指标LLM调用次数、循环步数便于调试和性能分析。与其他实现方式的对比传统ReAct vs LangGraph ReAct传统实现LangGraph实现手动状态管理自动状态管理需要手动控制流声明式流程定义容易出错的状态累积operator.add自动累积无内置验证StateGraph.validate()验证有限的可视化内置图可视化能力基础错误处理增强的错误处理机制何时选择LangGraph ReAct选择LangGraph实现的场景需要长期维护的复杂应用需要强大的状态管理需要可视化和调试功能需要团队协作和标准化需要扩展性和可维护性需要生产就绪的解决方案总结LangGraph为实现ReAct设计模式提供了强大的框架。通过图结构的方式我们可以清晰地定义状态机: 管理智能体的执行状态和消息历史节点: 分离推理和行动逻辑提高代码可维护性边: 控制执行流程支持条件分支条件边: 基于状态动态决定执行路径工具集成: 无缝集成外部工具和API声明式编程: 通过图结构描述复杂流程自动状态管理: 减少样板代码专注于业务逻辑LangGraph的声明式方法让开发者能够以更直观的方式构建复杂的智能体系统而无需担心底层的状态管理和执行调度问题特别适合构建生产就绪的AI应用。如何系统的学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。一直在更新更多的大模型学习和面试资料已经上传带到CSDN的官方了有需要的朋友可以扫描下方二维码免费领取【保证100%免费】01.大模型风口已至月薪30K的AI岗正在批量诞生2025年大模型应用呈现爆发式增长根据工信部最新数据国内大模型相关岗位缺口达47万初级工程师平均薪资28K数据来源BOSS直聘报告70%企业存在能用模型不会调优的痛点真实案例某二本机械专业学员通过4个月系统学习成功拿到某AI医疗公司大模型优化岗offer薪资直接翻3倍02.大模型 AI 学习和面试资料1️⃣ 提示词工程把ChatGPT从玩具变成生产工具2️⃣ RAG系统让大模型精准输出行业知识3️⃣ 智能体开发用AutoGPT打造24小时数字员工熬了三个大夜整理的《AI进化工具包》送你✔️ 大厂内部LLM落地手册含58个真实案例✔️ 提示词设计模板库覆盖12大应用场景✔️ 私藏学习路径图0基础到项目实战仅需90天第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。天道酬勤你越努力就会成为越优秀的自己。如果你能在15天内完成所有的任务那你堪称天才。然而如果你能完成 60-70% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】