收藏备用!LangGraph多智能体架构详解(小白也能看懂,附完整实操代码)

张开发
2026/5/3 10:12:25 15 分钟阅读
收藏备用!LangGraph多智能体架构详解(小白也能看懂,附完整实操代码)
本文专为程序员和大模型小白打造深入拆解LangGraph框架下的多智能体架构从基础概念到实操落地详细讲解大模型多智能体系统的定义、核心优势及常见架构类型。通过可直接复制运行的实例手把手教你用LangGraph实现智能体间的切换、通信以及共享消息记录的两种管理方式。此外还重点拆解自定义多智能体、监督者架构和群体架构的设计逻辑、实操步骤及避坑技巧为想要入门并实践大模型多智能体系统的开发者提供可直接复用的指导方案助力快速掌握这一前沿技术。什么是大模型多智能体系统大模型多智能体系统Large Model Multi-Agent System 是由多个基于大语言模型LLM的智能体Agent组成的协作系统。每个智能体具备独立的任务处理能力通过协同工作解决单一智能体难以完成的复杂问题。其核心特征包括• 分布式协作智能体通过通信、协商或竞争实现目标。• 角色分工不同智能体承担专业角色如决策者、执行者、验证者。• 共享状态管理使用共享内存、消息传递或黑板机制同步信息。• 动态工作流任务根据上下文在智能体间动态流转。示例场景一个电商客服系统包含三个智能体① 订单查询Agent访问数据库获取订单状态② 退换货Agent处理退货策略③ 情感安抚Agent检测用户情绪并安抚用户提问时三个Agent协同生成完整响应。为什么复杂任务需要多智能体协作原因包括任务分解复杂任务可以分解为多个子任务由不同的智能体并行或顺序处理提高效率。专长分工不同的智能体可以专门训练或设计用于特定领域从而在各自领域表现更好。错误恢复当某个智能体失败时其他智能体可以介入提高系统的鲁棒性。知识互补多个智能体可以拥有不同的知识背景通过协作融合不同领域的知识。决策优化多个智能体可以从不同角度分析问题通过讨论或投票得到更优的解决方案。多智能体系统架构如上图所示按照多个智能体的相互联系和通信方式可以将多智能体系统分为以下几种类型的架构•网络每个智能体都可以与其他智能体进行通信。任何智能体都可以决定接下来呼叫哪个其他智能体。•监督者每个智能体与唯一监督者进行通信。监督者智能体决定接下来应该调用哪个智能体。•监督者工具调用这是 监督者架构的特例。单个智能体可以表示为工具。在这种情况下监督者智能体使用工具调用 LLM 来决定要调用哪些智能体工具以及要传递给这些智能体的参数。•分层您可以定义一个多智能体系统其中包含一个监督者的监督者。这是管理程序架构的推广允许更复杂的控制流。•自定义多智能体每个智能体仅与智能体子集通信。流的某些部分是确定性的只有某些智能体可以决定接下来要呼叫哪些其他智能体。多智能体之间的通信切换HandoffsLangGraph使用切换Handoffs作为多智能体之间的通信方式。切换就是把流程从一个智能体的任务委托给另一个智能体允许指定• 目的智能体要导航到的目标智能体例如要转到的节点的名称• 有效负载要传递给该智能体的信息例如状态更新LangGraph使用Command来实现切换的动作例如defagent(state)-Command[Literal[agent,another_agent]]:# the conditionforrouting/halting can be anything,e.g.LLM tool call/structured output,etc.gotoget_next_agent(...)#agent/another_agentreturnCommand(#Specifywhich agent to call next gotogoto,#Updatethe graph state update{my_state_key:my_state_value})消息记录在多智能体间的管理方式多智能体之间通讯是怎么共享消息记录呢是共享整个完整消息记录还是只是共享最后的结果呢Langgraph主要还是使用状态对象state来管理多智能体之间的消息的共享。from typingimportTypedDict,Annotated,Listfrom langgraph.graph.messageimportadd_messagesclassAgentState(TypedDict):# 共享的消息历史 messages:Annotated[List[dict],add_messages]# 自动追加新消息共享完整消息记录共享完整消息记录的好处是它可以帮助其他智能体做出更好的决策并提高整个系统的推理能力。缺点是随着代理数量及其复杂性的增加“暂存器”将迅速增长并且可能需要额外的内存管理策略。如果运行多个代理并且需要共享完整的消息记录那么可以使用同一个状态对象State Object即可示例代码defwriter_agent(state:AgentState):# 读取所有历史消息 full_historystate[messages]# 生成新消息 new_msg{role:writer,content:基于历史生成报告...}return{messages:[new_msg]}# 自动追加到全局历史 defreviewer_agent(state:AgentState):# 获取writer刚添加的消息 last_msgstate[messages][-1]# 验证内容并回复 feedback{role:reviewer,content:f验证结果: {last_msg[content][:30]}...}return{messages:[feedback]}只是共享智能体的最后输出结果只是共享其他智能体的最后输出结果而不是共享整个对话历史。这种方式适用于比较多智能体或者是更加复杂的场景实现这种方式只需要不同智能体定义自己的状态对象State Object即可.自定义多智能体架构自定义多智能体架构主要是使用自定义的切换Handoffs命令结合大模型工具调用来实现以下是一个旅行订票智能体的示例包括订机票和订酒店两个智能体组成importlangchain from typingimportAnnotatedfrom langchain_core.toolsimporttool,InjectedToolCallIdfrom langgraph.prebuiltimportcreate_react_agent,InjectedStatefrom langgraph.graphimportStateGraph,START,MessagesStatefrom langgraph.typesimportCommandfrom langchain_deepseekimportChatDeepSeekfrom dotenvimportload_dotenv # 用于加载环境变量load_dotenv()# 加载.env 文件中的环境变量 from langchain.globalsimport set_debug from langchain.globalsimport set_verboseset_debug(True)set_verbose(False)# 这里需要选择推理的大模型如 gpt-4o或deepseek-reasoner而不是聊天模型如deepseek-chat聊天模型有时无法理解智能体之间的转移和回答逻辑 modelChatOpenAI(modelgpt-4o)# 创建一个工具handoff,用于智能体的转移defcreate_handoff_tool(*,agent_name:str,description:str|NoneNone):nameftransfer_to_{agent_name}descriptiondescription orfTransfer to {agent_name}tool(name,descriptiondescription)defhandoff_tool(state:Annotated[MessagesState,InjectedState],tool_call_id:Annotated[str,InjectedToolCallId],)-Command:tool_message{role:tool,content:fSuccessfully transferred to {agent_name},name:name,tool_call_id:tool_call_id,}returnCommand(gotoagent_name,update{messages:state[messages][tool_message]},graphCommand.PARENT,)returnhandoff_tool # 创建Handoffs工具 transfer_to_hotel_assistantcreate_handoff_tool(agent_namehotel_assistant)transfer_to_flight_assistantcreate_handoff_tool(agent_nameflight_assistant)tooldefbook_hotel(hotel_name:str):Book a hotelreturnf成功预订了酒店 {hotel_name}.tooldefbook_flight(from_airport:str,to_airport:str):Book a flightreturnf成功预订了机票从 {from_airport} 到 {to_airport}.# 机票预订智能体 flight_assistantcreate_react_agent(# parallel_tool_callsFalse,设置大模型不要并发调用工具并发调用可能会导致以下错误 #ValueError:FoundAIMessageswithtool_calls thatdonot have a correspondingToolMessage.modelmodel.bind_tools([book_flight,transfer_to_hotel_assistant],parallel_tool_callsFalse),# 绑定两个工具transfer_to_hotel_assistant 决定当前智能体大模型可以根据需要转移到酒店预订智能体 tools[book_flight,transfer_to_hotel_assistant],promptYou are a flight booking assistant,nameflight_assistant)# 酒店预订智能体 hotel_assistantcreate_react_agent(modelmodel.bind_tools([book_hotel,transfer_to_flight_assistant],parallel_tool_callsFalse),tools[book_hotel,transfer_to_flight_assistant],promptYou are a hotel booking assistant,namehotel_assistant)# 定义多智能体图流程 multi_agent_graph(StateGraph(MessagesState).add_node(flight_assistant).add_node(hotel_assistant).add_edge(START,flight_assistant).compile())forchunkinmulti_agent_graph.stream({messages:[{role:user,content:帮我订一张机票从北京到广州并且要住在香格里拉大酒店}]}):print(chunk)print(\n)运行上述代码将返回以下结果[HumanMessage(content帮我订一张机票从北京到广州并且要住在香格里拉大酒店,...ToolMessage(content成功预订了机票从 北京 到 广州.,namebook_flight,...ToolMessage(contentSuccessfully transferred to hotel_assistant,nametransfer_to_hotel_assistant,...ToolMessage(content成功预订了酒店 香格里拉大酒店.,namebook_hotel,idbe5ada01-ac03-496d-9456-be824f633e52,tool_call_idcall_vcmljv9xYpkbx6wXlhh0bJJh),AIMessage(content您的行程已安排好机票从北京到广州已经成功预订并且在广州的香格里拉大酒店的住宿也已成功预订。祝您旅途愉快,这里需要特别注意两点1、这里需要选择推理能力较强的大模型如 gpt-4o或deepseek-reasoner我使用deepseek-chat很难获得正确的结果。不过使用deepseek-reasoner响应速度就比较慢2、绑定工具时需要设置parallel_tool_calls False, 设置大模型不要并发调用工具并发调用可能会导致以下错误ValueError: Found AIMessages with tool_calls that do not have a corresponding ToolMessage.监督者架构Supervisor监督者架构是定义一个监督者智能体它协调各个智能体的通讯和任务委派是一个扩展性比较好架构模式。LangGraph 提供了langgraph-supervisor包可以便利地创建一个监督者多智能体。如果要使用langgraph-supervisor包请安装langgraph-supervisor包pip install langgraph-supervisor还是以旅行机票和酒店预订为例创建一个多智能体示例from langchain_deepseekimportChatDeepSeekfrom langgraph_supervisorimportcreate_supervisor from langgraph.prebuiltimportcreate_react_agent from langchain_anthropicimportChatAnthropicfrom langchain_openaiimportChatOpenAIfrom dotenvimportload_dotenv # 用于加载环境变量load_dotenv()# 加载.env 文件中的环境变量defbook_hotel(hotel_name:str):Book a hotelreturnfSuccessfully booked a stay at {hotel_name}.defbook_flight(from_airport:str,to_airport:str):Book a flightreturnfSuccessfully booked a flight from {from_airport} to {to_airport}.# 机票预订智能体 flight_assistantcreate_react_agent(modelopenai:gpt-4o,tools[book_flight],promptYou are a flight booking assistant,nameflight_assistant)# 酒店预订智能体 hotel_assistantcreate_react_agent(modelopenai:gpt-4o,tools[book_hotel],promptYou are a hotel booking assistant,namehotel_assistant)# 创建一个监督者 supervisorcreate_supervisor(agents[flight_assistant,hotel_assistant],modelChatOpenAI(modelgpt-4o),# full_history 全消息记录last_message 最后智能体的输出 output_modefull_history,prompt(You manage a hotel booking assistant and aflight booking assistant. Assign work to them.)).compile()forchunkinsupervisor.stream({messages:[{role:user,content:帮我订一张机票从北京到广州并且要住在香格里拉大酒店}]}):print(chunk)print(\n)输出[HumanMessage(content帮我订一张机票从北京到广州并且要住在香格里拉大酒店,...ToolMessage(contentSuccessfully transferred to flight_assistant,nametransfer_to_flight_assistant,idec6038b2-d8e4-485f-9359-e95047838ab1,tool_call_idcall_QM3Yy1ZRk9kFyAftxG0NwVee),AIMessage(content您的航班已成功预订从北京PEK飞往广州CAN。关于香格里拉大酒店的住宿预订请您联系酒店预订服务。祝您旅途愉快 如果还有其他问题或需要帮助请告诉我。,...ToolMessage(contentSuccessfully transferred back to supervisor,nametransfer_back_to_supervisor,...ToolMessage(contentSuccessfully transferred to hotel_assistant,nametransfer_to_hotel_assistant,...AIMessage(content我已经帮您成功预订了香格里拉大酒店的住宿。如果您有其他需求或者问题请随时告诉我祝您旅途愉快,...ToolMessage(contentSuccessfully transferred back to supervisor,nametransfer_back_to_supervisor,...AIMessage(content您的航班已成功预订从北京飞往广州。此外我也帮您成功预订了香格里拉大酒店 的住宿。祝您旅途愉快若有其他需求请随时联系我。,监督者架构就是每次智能体执行完成后都会转移到监督者进行判断如果满足条件则将结果返回给用户或者再转移到下一个智能体。从架构上更加清晰更加符合实际场景。消息记录模式create_supervisor时指定output_mode参数值full_history 全消息记录last_message 最后智能体的输出可以比较节省上下文token多层监督者架构如果需要复杂的多组智能体组成可以构建多层监督者架构比如research_teamcreate_supervisor([research_agent,math_agent],modelmodel,supervisor_nameresearch_supervisor).compile(nameresearch_team)writing_teamcreate_supervisor([writing_agent,publishing_agent],modelmodel,supervisor_namewriting_supervisor).compile(namewriting_team)top_level_supervisorcreate_supervisor([research_team,writing_team],modelmodel,supervisor_nametop_level_supervisor).compile(nametop_level_supervisor)群体架构swarm前面介绍了网络多智能体的架构其实就是一种群体的智能体架构。LangGraph也支持这种架构通过引入langgraph-swarm包可以轻松实现。安装langgraph-swarm包pip install langgraph-swarm还是以订机票和酒店为例from langgraph.prebuiltimportcreate_react_agent from langgraph_swarmimportcreate_swarm,create_handoff_tool from langchain_core.toolsimporttool from langchain_deepseekimportChatDeepSeekfrom langchain_openaiimportChatOpenAIfrom dotenvimportload_dotenv # 用于加载环境变量load_dotenv()# 加载.env 文件中的环境变量 # modelChatDeepSeek(modeldeepseek-reasoner)modelChatOpenAI(modelgpt-4o)tooldefbook_hotel(hotel_name:str):Book a hotelreturnfSuccessfully booked a stay at {hotel_name}.tooldefbook_flight(from_airport:str,to_airport:str):Book a flightreturnfSuccessfully booked a flight from {from_airport} to {to_airport}.transfer_to_hotel_assistantcreate_handoff_tool(agent_namehotel_assistant,descriptionTransfer user to the hotel-booking assistant.,)transfer_to_flight_assistantcreate_handoff_tool(agent_nameflight_assistant,descriptionTransfer user to the flight-booking assistant.,)flight_assistantcreate_react_agent(modelmodel.bind_tools([book_flight,transfer_to_hotel_assistant],parallel_tool_callsFalse),tools[book_flight,transfer_to_hotel_assistant],# 有些大模型parallel_tool_callsFalse可能不生效为避免并发调用工具的错误可以在提示词加上一次只能调用一个工具工具不能并发调用 #Onlyone tool can be called at a time,and tools cannot be calledinparallel promptYou are a flight booking assistant, Only one tool can be called at a time, and tools cannot be called in parallel,nameflight_assistant)hotel_assistantcreate_react_agent(modelmodel.bind_tools([book_hotel,transfer_to_flight_assistant],parallel_tool_callsFalse),tools[book_hotel,transfer_to_flight_assistant],promptYou are a hotel booking assistant, Only one tool can be called at a time, and tools cannot be called in parallel,namehotel_assistant)# 定义一个群体的智能体节点 swarmcreate_swarm(agents[flight_assistant,hotel_assistant],default_active_agentflight_assistant).compile()forchunkinswarm.stream({messages:[{role:user,content:帮我订一张机票从北京到广州并且要住在香格里拉大酒店}]}):print(chunk)print(\n)运行以上代码会输出HumanMessage(content帮我订一张机票从北京到广州并且要住在香格里拉大酒店,...ToolMessage(contentSuccessfully booked a flight from Beijing to Guangzhou.,namebook_flight,...ToolMessage(contentSuccessfully transferred to hotel_assistant,nametransfer_to_hotel_assistant,...ToolMessage(contentSuccessfully booked a stay at 香格里拉大酒店.,name0, AIMessage(content您的行程已 经成功安排您将从北京飞往广州并入住香格里拉大酒店。祝您旅途愉快如果还有其他需求请告诉我。小结多智能体架构之间的切换原理主要是通过Handoff 和 tool来实现的LangGraph 提供了自定义的Handoff函数也提供了langgraph-supervisor和langgraph-swarm 包来方便实现监督者架构和群体架构避坑点选择大模型很重要需要推理能力比较强的才能较好地处理多智能体或者可以优化更细致的提示词大模型默认为并发调用工具会导致报错需要配置parallel_tool_callsFalse或者也可以通过提示词来控制不并行调用工具如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2026 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《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大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取

更多文章