资讯详情 新手必备!LangGraph多智能体架构实战教程(收藏版)
📅 2026/11/4 16:31:41
本文深入解析了LangGraph框架下的多智能体系统介绍了大模型多智能体系统的概念、优势及架构类型。通过实际案例详细阐述了多智能体间的通信方式、消息记录管理及自定义多智能体架构的实现。同时还介绍了监督者架构和群体架构的设计与应用为读者提供了从基础到高级的多智能体系统开发全面指南。什么是大模型多智能体系统大模型多智能体系统Large Model Multi-Agent System 是由多个基于大语言模型LLM的智能体Agent组成的协作系统。每个智能体具备独立的任务处理能力通过协同工作解决单一智能体难以完成的复杂问题。其核心特征包括分布式协作智能体通过通信、协商或竞争实现目标。角色分工不同智能体承担专业角色如决策者、执行者、验证者。共享状态管理使用共享内存、消息传递或黑板机制同步信息。动态工作流任务根据上下文在智能体间动态流转。示例场景一个电商客服系统包含三个智能体① 订单查询Agent访问数据库获取订单状态② 退换货Agent处理退货策略③ 情感安抚Agent检测用户情绪并安抚用户提问时三个Agent协同生成完整响应。为什么复杂任务需要多智能体协作原因包括1. 任务分解复杂任务可以分解为多个子任务由不同的智能体并行或顺序处理提高效率。2. 专长分工不同的智能体可以专门训练或设计用于特定领域从而在各自领域表现更好。3. 错误恢复当某个智能体失败时其他智能体可以介入提高系统的鲁棒性。4. 知识互补多个智能体可以拥有不同的知识背景通过协作融合不同领域的知识。5. 决策优化多个智能体可以从不同角度分析问题通过讨论或投票得到更优的解决方案。多智能体系统架构如上图所示按照多个智能体的相互联系和通信方式可以将多智能体系统分为以下几种类型的架构网络每个智能体都可以与其他智能体进行通信。任何智能体都可以决定接下来呼叫哪个其他智能体。监督者每个智能体与唯一监督者进行通信。监督者智能体决定接下来应该调用哪个智能体。监督者工具调用这是 监督者架构的特例。单个智能体可以表示为工具。在这种情况下监督者智能体使用工具调用 LLM 来决定要调用哪些智能体工具以及要传递给这些智能体的参数。分层您可以定义一个多智能体系统其中包含一个监督者的监督者。这是管理程序架构的推广允许更复杂的控制流。自定义多智能体每个智能体仅与智能体子集通信。流的某些部分是确定性的只有某些智能体可以决定接下来要呼叫哪些其他智能体。多智能体之间的通信切换HandoffsLangGraph使用切换Handoffs作为多智能体之间的通信方式。切换就是把流程从一个智能体的任务委托给另一个智能体允许指定目的智能体要导航到的目标智能体例如要转到的节点的名称有效负载要传递给该智能体的信息例如状态更新LangGraph使用Command来实现切换的动作例如def agent(state) - Command[Literal[agent, another_agent]]: # the condition for routing/halting can be anything, e.g. LLM tool call / structured output, etc. goto get_next_agent(...) # agent / another_agent return Command( # Specify which agent to call next gotogoto, # Update the graph state update{my_state_key: my_state_value} )消息记录在多智能体间的管理方式多智能体之间通讯是怎么共享消息记录呢是共享整个完整消息记录还是只是共享最后的结果呢Langgraph主要还是使用状态对象state来管理多智能体之间的消息的共享。from typing import TypedDict, Annotated, List from langgraph.graph.message import add_messages class AgentState(TypedDict): # 共享的消息历史 messages: Annotated[List[dict], add_messages] # 自动追加新消息共享完整消息记录共享完整消息记录的好处是它可以帮助其他智能体做出更好的决策并提高整个系统的推理能力。缺点是随着代理数量及其复杂性的增加“暂存器”将迅速增长并且可能需要额外的内存管理策略。如果运行多个代理并且需要共享完整的消息记录那么可以使用同一个状态对象State Object即可示例代码def writer_agent(state: AgentState): # 读取所有历史消息 full_history state[messages] # 生成新消息 new_msg {role: writer, content: 基于历史生成报告...} return {messages: [new_msg]} # 自动追加到全局历史 def reviewer_agent(state: AgentState): # 获取writer刚添加的消息 last_msg state[messages][-1] # 验证内容并回复 feedback {role: reviewer, content: f验证结果: {last_msg[content][:30]}...} return {messages: [feedback]}只是共享智能体的最后输出结果只是共享其他智能体的最后输出结果而不是共享整个对话历史。这种方式适用于比较多智能体或者是更加复杂的场景实现这种方式只需要不同智能体定义自己的状态对象State Object即可.自定义多智能体架构自定义多智能体架构主要是使用自定义的切换Handoffs命令结合大模型工具调用来实现以下是一个旅行订票智能体的示例包括订机票和订酒店两个智能体组成import langchain from typing import Annotated from langchain_core.tools import tool, InjectedToolCallId from langgraph.prebuilt import create_react_agent, InjectedState from langgraph.graph import StateGraph, START, MessagesState from langgraph.types import Command from langchain_deepseek import ChatDeepSeek from dotenv import load_dotenv # 用于加载环境变量 load_dotenv() # 加载 .env 文件中的环境变量 from langchain.globalsimport set_debug from langchain.globalsimport set_verbose set_debug(True) set_verbose(False) # 这里需要选择推理的大模型如 gpt-4o或deepseek-reasoner而不是聊天模型如deepseek-chat聊天模型有时无法理解智能体之间的转移和回答逻辑 model ChatOpenAI(modelgpt-4o) # 创建一个工具handoff,用于智能体的转移 defcreate_handoff_tool(*, agent_name: str, description: str | None None): name ftransfer_to_{agent_name} description description 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, } return Command( gotoagent_name, update{messages: state[messages] [tool_message]}, graphCommand.PARENT, ) return handoff_tool # 创建Handoffs工具 transfer_to_hotel_assistant create_handoff_tool(agent_namehotel_assistant) transfer_to_flight_assistant create_handoff_tool(agent_nameflight_assistant) tool defbook_hotel(hotel_name: str): Book a hotel returnf成功预订了酒店 {hotel_name}. tool defbook_flight(from_airport: str, to_airport: str): Book a flight returnf成功预订了机票从 {from_airport} 到 {to_airport}. # 机票预订智能体 flight_assistant create_react_agent( # parallel_tool_calls False, 设置大模型不要并发调用工具并发调用可能会导致以下错误 # ValueError: Found AIMessages with tool_calls that do not have a corresponding ToolMessage. 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_assistant create_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() ) for chunk in multi_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_deepseek import ChatDeepSeek from langgraph_supervisor import create_supervisor from langgraph.prebuilt import create_react_agent from langchain_anthropic import ChatAnthropic from langchain_openai import ChatOpenAI from dotenv import load_dotenv # 用于加载环境变量 load_dotenv() # 加载 .env 文件中的环境变量 defbook_hotel(hotel_name: str): Book a hotel returnfSuccessfully booked a stay at {hotel_name}. defbook_flight(from_airport: str, to_airport: str): Book a flight returnfSuccessfully booked a flight from {from_airport} to {to_airport}. # 机票预订智能体 flight_assistant create_react_agent( modelopenai:gpt-4o, tools[book_flight], promptYou are a flight booking assistant, nameflight_assistant ) # 酒店预订智能体 hotel_assistant create_react_agent( modelopenai:gpt-4o, tools[book_hotel], promptYou are a hotel booking assistant, namehotel_assistant ) # 创建一个监督者 supervisor create_supervisor( agents[flight_assistant, hotel_assistant], modelChatOpenAI(modelgpt-4o), # full_history 全消息记录last_message 最后智能体的输出 output_modefull_history, prompt( You manage a hotel booking assistant and a flight booking assistant. Assign work to them. ) ).compile() for chunk in supervisor.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_team create_supervisor( [research_agent, math_agent], modelmodel, supervisor_nameresearch_supervisor ).compile(nameresearch_team) writing_team create_supervisor( [writing_agent, publishing_agent], modelmodel, supervisor_namewriting_supervisor ).compile(namewriting_team) top_level_supervisor create_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.prebuilt import create_react_agent from langgraph_swarm import create_swarm, create_handoff_tool from langchain_core.tools import tool from langchain_deepseek import ChatDeepSeek from langchain_openai import ChatOpenAI from dotenv import load_dotenv # 用于加载环境变量 load_dotenv() # 加载 .env 文件中的环境变量 # model ChatDeepSeek(modeldeepseek-reasoner) model ChatOpenAI(modelgpt-4o) tool defbook_hotel(hotel_name: str): Book a hotel returnfSuccessfully booked a stay at {hotel_name}. tool defbook_flight(from_airport: str, to_airport: str): Book a flight returnfSuccessfully booked a flight from {from_airport} to {to_airport}. transfer_to_hotel_assistant create_handoff_tool( agent_namehotel_assistant, descriptionTransfer user to the hotel-booking assistant., ) transfer_to_flight_assistant create_handoff_tool( agent_nameflight_assistant, descriptionTransfer user to the flight-booking assistant., ) flight_assistant create_react_agent( modelmodel.bind_tools([book_flight,transfer_to_hotel_assistant], parallel_tool_callsFalse), tools[book_flight, transfer_to_hotel_assistant], # 有些大模型parallel_tool_callsFalse可能不生效为避免并发调用工具的错误可以在提示词加上一次只能调用一个工具工具不能并发调用 # Only one tool can be called at a time, and tools cannot be called in parallel 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_assistant create_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 ) # 定义一个群体的智能体节点 swarm create_swarm( agents[flight_assistant, hotel_assistant], default_active_agentflight_assistant ).compile() for chunk in swarm.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您的行程已 经成功安排您将从北京飞往广州并入住香格里拉大酒店。祝您旅途愉快如果还有其他需求请告诉我。小结1. 多智能体架构之间的切换原理主要是通过Handoff 和 tool来实现的2. LangGraph 提供了自定义的Handoff函数也提供了langgraph-supervisor和langgraph-swarm 包来方便实现监督者架构和群体架构3. 避坑点选择大模型很重要需要推理能力比较强的才能较好地处理多智能体或者可以优化更细致的提示词大模型默认为并发调用工具会导致报错需要配置parallel_tool_callsFalse或者也可以通过提示词来控制不并行调用工具大模型的知识又多又杂到底怎么学做这行久了被问最多的问题就一个大模型的知识又多又杂我到底先学啥翻了一堆资料看啥都像重点结果啥都没学进去。今天把我自己一路摸出来的顺序捋一遍零基础、应届生、转行的都适用。跟着走至少方向不乱、不瞎忙学完拿得出手。第一阶段10天初阶应用这一阶段就一个目标把大模型真正玩明白不是只会聊天那种而是能调教它、能用代码把大模型和业务接起来。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用这阶段正式进实战目标很实在做出两个能拿出手的东西——一个私有知识库一个 agent 对话机器人。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…走完这 30 天Python 或 JavaScript 背景的基本能独立做一套 RAG 应用简历上也敢写大模型应用开发了。第三阶段约20天动手微调学到这你已经开始 “造” 模型了 —— 通过微调搞出垂直领域的专用小模型。为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你从 “只会用” 变成 “能造” 的 AI 小子。那么你还想往下探索吗想要入局AI大模型赛道、抢占行业红利的朋友微信扫描下方CSDN官方认证二维码即可100%免费领取全套学习资料第四阶段20天商业闭环部署落地技术学完落地才算数。这阶段带你搞明白大模型怎么真正跑起来、用起来。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…想要入坑大模型的朋友给大家准备了一份2026 年最新 AI 大模型全套学习资料1、大模型系统化学习路线2、大模型学习视频教程3、大模型学习书籍电子文档4、AI大模型最新行业报告5、大模型项目实战配套源码6、2026大模型大厂面试真题7、为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年人才缺口已超百万凸显培养不足。随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。8、适合谁学传统后端 / Java / 前端开发想转型 AI 应用大学生、应届生想拿更好的 offer产品经理、运营想武装职业竞争力技术负责人想给团队落地提效学习是反人性的但回报是真金白银。技术会更新赛道会切换但只要你先动手机会就永远站在你这边。9、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。想要入局AI大模型赛道、抢占行业红利的朋友微信扫描下方CSDN官方认证二维码即可100%免费领取全套学习资料好了就写到这。路线是死的人是活的卡住了随时来问我。觉得有用就点个收藏别让它进收藏夹吃灰——动起来比啥都强。