LangChain 高阶模式:Multi-agent —— 多 Agent 协作

发布时间:2026/7/14 22:07:14
LangChain 高阶模式:Multi-agent —— 多 Agent 协作 本文是 LangChain「高阶模式」系列的第 1 篇。在走完基础概念、工具调用、输出交互之后我们开始进入更复杂的编排领域——让多个 Agent 协作完成单个 Agent 难以胜任的任务。一、概念什么是 Multi-agentMulti-agent多 Agent 协作是指由多个独立的 Agent 实例共同完成一个任务每个 Agent 各自拥有独立的指令system prompt、工具集和上下文窗口彼此通过消息传递或共享状态来协调工作。打个比方单 Agent 像一个全能员工什么活都自己干多 Agent 像一个小团队每人有专长通过分工和沟通完成任务。Multi-agent 的核心要素要素说明Agent 分工每个 Agent 有独立的角色和职责研究员、编码员、审查员……通信机制Agent 之间如何传递信息——共享 state、handoff、消息队列调度模型谁来决策下一步派谁——中心化Supervisorvs 去中心化Swarm状态隔离子 Agent 的上下文是否独立哪些信息需要共享一句话总结Multi-agent 是把一个全能的 Agent拆成多个专精的子 Agent通过通信和调度协调工作。二、价值为什么需要多个 Agent1. 上下文天花板单 Agent 的问题不是不够聪明而是上下文窗口装不下。复杂任务涉及几十条业务规则——system prompt 越长注意力越分散。把任务拆给多个 Agent每个 Agent 只关注自己的子任务上下文更聚焦。2. 工具隔离与权限控制单 Agent 模式下所有工具对模型可见——既有读数据库又有删数据库风险很高。多 Agent 可以做到研究员只有读取权限操作员有写入权限但需 Supervisor 审批审查员只有校验权限。每个 Agent 的工具集最小化符合最小权限原则。3. 并行执行Supervisor 分解任务 ├─→ 研究员 Agent查文档─────┐ ├─→ 编码员 Agent写代码─────┤ 三路并行 └─→ 测试员 Agent跑测试─────┘4. 专业化提升质量维度单 AgentMulti-agentSystem prompt一段超长提示词每人一段简短专精提示词工具集所有工具混在一起每人只暴露需要的工具注意力随上下文增长而分散每人聚焦自己的子任务错误恢复全局回滚单个 Agent 失败不影响其他扩展性提示词越写越长加 Agent 即可5. 复用性一个代码审查员 Agent定义好之后可以在多个项目中复用——单 Agent 项目做不到这种粒度的复用。核心价值Multi-agent 不是让一个 Agent 更强而是让多个专精的小 Agent各司其职——通过分工、隔离和并行解决单 Agent 在上下文、权限和扩展性上的天花板。三、用法LangGraph 中的 Multi-agent 实现LangGraph 是 LangChain 生态中实现 multi-agent 的核心框架。它基于有向图定义 Agent 之间的流转关系——每个 Agent 是一个节点边定义了通信和调度逻辑。用法 1Supervisor 模式——中心化调度Supervisor 是最经典的 multi-agent 模式一个主管 Agent负责分析任务、分派子 Agent、汇总结果。子 Agent 不直接通信都通过 Supervisor 中转。from langgraph.graph import StateGraph, END from langgraph.prebuilt import create_react_agent from langgraph_supervisor import create_supervisor from langchain_deepseek import ChatDeepSeek from typing import TypedDict, Annotated from langgraph.graph.message import add_messages class MultiAgentState(TypedDict): messages: Annotated[list, add_messages] next: str model ChatDeepSeek(modeldeepseek-chat) researcher create_react_agent( modelmodel, tools[search_tool, read_doc], nameresearcher, prompt你是研究员负责查找信息。不要修改任何代码。, ) coder create_react_agent( modelmodel, tools[read_code, write_code, run_test], namecoder, prompt你是编码员负责编写代码。不要做信息检索。, ) supervisor create_supervisor( agents[researcher, coder], modelmodel, prompt你是项目主管。分析请求分派给合适的人\n - 需要查资料 → 派 researcher\n- 需要写代码 → 派 coder\n - 任务完成 → 输出 FINISH, ) builder StateGraph(MultiAgentState) builder.add_node(supervisor, supervisor) builder.add_node(researcher, researcher) builder.add_node(coder, coder) builder.set_entry_point(supervisor) builder.add_edge(researcher, supervisor) builder.add_edge(coder, supervisor) builder.add_conditional_edges(supervisor, lambda s: s[next], { researcher: researcher, coder: coder, FINISH: END, }) graph builder.compile()Supervisor 模式的精髓子 Agent 之间互不知晓调度逻辑集中在 Supervisor 一个节点上。用法 2Swarm 模式——去中心化 HandoffSwarm 模式没有中心调度者每个 Agent 通过handoff交接把任务转给另一个 Agentfrom langgraph.prebuilt import create_react_agent from langgraph.swarm import create_swarm from langchain_deepseek import ChatDeepSeek model ChatDeepSeek(modeldeepseek-chat) support_agent create_react_agent( modelmodel, namesupport, tools[lookup_order, cancel_order, handoff_to_billing, handoff_to_tech], prompt你是客服。遇到账单问题 → handoff_to_billing技术问题 → handoff_to_tech, ) billing_agent create_react_agent( modelmodel, namebilling, tools[check_invoice, process_refund, handoff_to_support], prompt你是账单专家。完成后 handoff_to_support。, ) tech_agent create_react_agent( modelmodel, nametech, tools[check_server, restart_service, handoff_to_support], prompt你是技术支持。完成后 handoff_to_support。, ) swarm create_swarm( agents[support_agent, billing_agent, tech_agent], default_active_agentsupport, modelmodel, ) result swarm.invoke({messages: [{role: user, content: 我的服务器宕机了}]})Swarm 与 Supervisor 的关键区别维度SupervisorSwarm调度方式中心化Supervisor 决策去中心化Agent 自主 handoff路由逻辑集中在 Supervisor 节点分散在各 Agent 的 handoff 工具中适用场景任务有明确的分解和审批流对话式的、动态路由场景用法 3Handoff 工具——子 Agent 作为工具调用将一个子 Agent 包装成工具让 Supervisor 像调用函数一样调用子 Agentfrom langgraph.prebuilt import create_react_agent from langgraph_supervisor import create_supervisor from langchain_deepseek import ChatDeepSeek model ChatDeepSeek(modeldeepseek-chat) def create_research_subagent(): return create_react_agent( modelmodel, tools[web_search, scrape_page], nameresearcher, prompt你是研究员。搜索并返回结构化结果。, ) def create_writer_subagent(): return create_react_agent( modelmodel, tools[save_draft], namewriter, prompt你是写手。根据研究员的资料撰写文章。, ) supervisor create_supervisor( agents[create_research_subagent(), create_writer_subagent()], modelmodel, prompt你是项目经理。\n1. 先调用 researcher 收集资料\n 2. 再调用 writer 撰写文章\n3. 完成后输出 FINISH, output_modelast, )这种模式下子 Agent 对 Supervisor 而言就像增强版工具——输入一段 prompt输出一段结果中间的子 Agent 循环对外部透明。用法 4状态共享——State 如何在不同 Agent 间流转Multi-agent 的核心难点是状态管理——哪些信息共享哪些隔离from typing import TypedDict, Annotated from langgraph.graph.message import add_messages class SharedState(TypedDict): messages: Annotated[list, add_messages] # 共享所有 Agent 可见 task_context: str # 共享全局任务上下文 # 私有状态通过子图的 private_state 机制实现不暴露给其他 Agent # 子图实现状态隔离 def build_sub_agent_with_private_state(agent_name: str): class PrivateState(TypedDict): internal_scratchpad: str # 只有这个 Agent 能看到 local_files: list[str] # 只有这个 Agent 能访问 builder StateGraph(PrivateState) # ... 子 Agent 内部逻辑 return builder.compile()状态共享策略对比策略做法优点缺点完全共享所有 Agent 共用一个 state实现简单信息透明上下文膨胀最小共享只共享任务描述 结果摘要上下文精简隔离性好需要精心设计字段混合模式共享必要信息私有信息在 Agent 内部最佳平衡实现复杂度高推荐混合模式messages和task_context共享中间推理过程保持私有。四、原理Multi-agent 的底层机制1. 通信机制共享 State vs Handoff【共享 State 模式】Agent A ──写入──→ State ──读取──→ Agent B公告板【Handoff 模式】Agent A ──直接传递──→ Agent B接力棒维度共享 StateHandoff通信方向多对多广播一对一定向耦合度松耦合紧耦合并行友好度高低串行传递调试难度中等追踪 state 变化低流程线性LangGraph同时支持两种模式StateGraph天然是共享 stateCommand对象支持 handoff 式定向传递。2. 调度模型中心化 vs 去中心化【中心化】Supervisor唯一决策者→ Agent1 / Agent2 / Agent3执行者不互相通信【去中心化】Agent1 ←──handoff──→ Agent2 ←──handoff──→ Agent3彼此直连选择建议场景推荐模式任务有清晰的分层结构分析 → 设计 → 开发 → 测试Supervisor对话式路由用户问题类型多变Swarm需要审批流或人工介入Supervisor审批者为特殊节点Agent 之间需要频繁协商Swarm / Peer-to-Peer3. 子 Agent 隔离隔离是 multi-agent 系统的安全基石发生在三个层面工具隔离researcher 只有 [search, read]coder 只有 [write, run]——工具集不重叠上下文隔离Agent A 的内部推理不暴露给 Agent B——通过 private_state 或子图实现权限隔离Agent 不能访问超出其角色的资源——结合 Guardrails 和 HITL 控制在 LangGraph 中使用子图subgraph实现天然隔离researcher_graph build_researcher_graph().compile() coder_graph build_coder_graph().compile() builder.add_node(researcher, researcher_graph) builder.add_node(coder, coder_graph)子图内部的 state、工具、prompt 完全独立——父图只能通过节点输入输出与之交互。4. 执行流程以 Supervisor 模式为例用户输入 → Supervisor 分析 → 路由决策检查 state[next]→ 子 Agent 执行内部 ReAct 循环思考→工具→观察→思考...→ 回到 Supervisor → 循环直到 FINISH关键洞察子 Agent 内部的 ReAct 循环对外部 Supervisor 完全透明——Supervisor 只看输入输出不关心中间过程。5. 与单 Agent 的深度对比维度单 AgentMulti-agent架构复杂度低一个 Agent 工具高多个 Agent 调度图 状态管理上下文管理全部塞进一个 context window每个 Agent 只加载需要的上下文工具安全性所有工具对模型可见靠 prompt 约束工具集最小化物理隔离并行能力不支持支持多 Agent 并行执行调试简单单条执行轨迹复杂需追踪跨 Agent 消息流成本低高多次调用 调度开销适用规模中小任务20 工具50 步大任务需分工、审批、并行决策框架任务超过 50 步且需要不同权限/工具集 → Multi-agent否则单 Agent 就够。6. 常见陷阱陷阱表现规避方法过度拆分3 步任务用了 5 个 Agent先单 Agent 跑通再考虑拆分Supervisor 瓶颈Supervisor 成了性能瓶颈Supervisor 只做路由不做业务状态污染Agent A 的输出被 Agent B 误解用结构化输出格式JSON Schema无限循环Agent 之间反复 handoff设置recursion_limit信息丢失子 Agent 输出被截断关键信息走共享 state不做摘要小原则能用单 Agent 搞定的不要上 Multi-agent。只有当任务在上下文“权限”并行三个维度中至少一个碰到天花板时多 Agent 才是合理选择。小结视角一句话概念多个专精 Agent 通过通信和调度协作替代单个全能 Agent价值突破单 Agent 的上下文天花板实现工具隔离、并行执行和专业分工用法Supervisor中心化调度、Swarm去中心化 handoff、子 Agent 即工具、混合状态共享原理共享 State / Handoff 两种通信模式中心化与去中心化调度子图天然隔离单 Agent 够用不拆分记住一件事Multi-agent 的核心不是Agent 越多越好而是“把对的工具给对的 Agent把对的任务派给对的人”——分工带来效率隔离带来安全但复杂度是你必须付出的代价。先单 Agent 跑通再考虑拆分。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】