【干货收藏】LangGraph多智能体系统构建指南:从单体瓶颈到协作突破
多智能体系统通过将复杂问题拆解为可治理的自治单元,解决单体智能体的工具过载、上下文负担和领域专精冲突等问题。LangGraph提供五种典型架构(网络、监督者、层级等),支持显式交接协议(Command)和状态管理,实现模块化、专精化和可控性。文章详细介绍了三种交接模式的代码实现及工程化落地要点,建议从简单模式起步,逐步演进至复杂架构。
多智能体系统通过将复杂问题拆解为可治理的自治单元,解决单体智能体的工具过载、上下文负担和领域专精冲突等问题。LangGraph提供五种典型架构(网络、监督者、层级等),支持显式交接协议(Command)和状态管理,实现模块化、专精化和可控性。文章详细介绍了三种交接模式的代码实现及工程化落地要点,建议从简单模式起步,逐步演进至复杂架构。
为什么要“多智能体”?
- 智能体(Agent)是什么
本质是一个能感知环境、基于策略行动以实现目标的“自主体”。在 LangChain/LangGraph 中,哪怕最简单的对话循环也可视为一个智能体。
- 具备感知(输入)、决策(策略/推理)、行动(工具/调用)、学习(记忆/更新)能力。
- 形式上可以是软件角色、机器人、业务微服务、甚至一个“LLM + 工具”组合。
- 为什么会走向多智能体(Multi-agent)
单体智能体在复杂问题上会遭遇三类瓶颈:
- 工具过载:工具太多导致“调用哪个”的决策困难。
- 上下文负担:长对话导致推理退化。
- 领域专精冲突:规划、检索、计算、执行等专业能力难以在单一提示词里兼顾。
解决方法是“模块化 + 专精化”:将系统拆分为多个职责单一的小智能体,组合成中/大型系统。
- 多智能体的核心收益
- 模块化:开发、测试、维护成本更低。
- 专精化:专家智能体的鲁棒性更强。
- 可控性:通信/交接路径与策略可显式定义,而不是完全交给 LLM 即兴发挥。
五种典型架构
- 网络(Fully-connected Network)
任意智能体都可与其他智能体通信。灵活但易“泛滥”,适合探索性、弱流程约束场景。 - 监督者(Supervisor)
引入一个“调度/路由”智能体,由它决定调用哪个专家。结构清晰,利于审计与限流。 - 监督者(工具调用变体)
把专家抽象为“工具”,监督者是 ReAct 智能体,通过工具调用来路由。利于快速落地。 - 层级(Hierarchical)
多个团队各自有监督者,顶层再由总监督者统筹。适合大规模系统或多产品线场景。 - 自定义工作流(Deterministic/Dynamic Mix)
部分边是固定顺序,部分由 LLM 通过Command动态路由。工程中较常见的折中方案。
如果你不确定选哪种架构,先用“监督者(工具调用)”起步,随后按复杂性迭代。
Handoffs & Command
- 交接概念
智能体执行完当前职责后,决定“结束/继续/转交给他人”。交接的关键是显式描述:
- 目标智能体:
goto - 携带负载(状态更新):
update - 图域(在哪个图生效):
graph,常见为当前图或Command.PARENT(从子图跳回父图)
- 最小 Command 模式
- 智能体节点函数返回
Command,用于控制下一步路由;否则返回状态更新结束当前轮次。 - 在工具调用场景中,务必插入配对的“工具结果消息”,以满足多数 LLM 提供商的协议约束(每个
ai_msg的工具调用,必须跟一个tool消息)。
- 常见交接手法
- 直接在智能体节点里决策,返回
Command。 - 把交接包装成一个“工具”,由 LLM 以工具调用的方式触发交接(显著提升统一性)。
- 子图内要交接到父图的其他智能体时,设置
graph=Command.PARENT。
智能体通信与状态设计
- 统一 state(共享消息)
图中的每一步都接收并产出state,通常包含messages。共享完整“草稿”(推理过程)能提升整体推理能力,但要提防上下文爆炸。 - 异构 state(私有草稿 + 共享摘要)
各智能体维护自己格式的内部状态,借助输入/输出转换与父图 state 对接。
- 优点:清晰边界、可做“信息最小化共享”。
- 技巧:交接时只共享“上一条 AI 回复 + 工具回执”,而非全部草稿。
- 工具调用与负载
监督者作为 ReAct 节点时,工具的参数就是负载。LangGraph 支持将父图 state 注入到工具(例如InjectedState),实现“带记忆的交接”。
三种Handoff模式对比与最小代码片段
1. 直接 Command 交接(节点内路由)
- 适用:两个或少数几个智能体的网络架构,逻辑简单、路由清晰。
- 关键点:当
ai_msg.tool_calls非空,插入工具结果消息,再goto下一个智能体。
from typing_extensions import Literal
from langgraph.types import Command
from langgraph.graph import MessagesState
from langchain_core.tools import tool
@tool
deftransfer_to_multiplication_expert():
"""向乘法智能体寻求帮助(只用于表明交接意图)"""
return
defaddition_expert(state: MessagesState) -> Command[Literal["multiplication_expert", "__end__"]]:
system_prompt = "你是加法专家。若需乘法,请先完成加法,再交接。"
messages = [{"role": "system", "content": system_prompt}] + state["messages"]
ai_msg = model.bind_tools([transfer_to_multiplication_expert]).invoke(messages)
if ai_msg.tool_calls:
tool_call_id = ai_msg.tool_calls[-1]["id"]
tool_msg = {"role": "tool", "content": "成功交接", "tool_call_id": tool_call_id}
return Command(goto="multiplication_expert", update={"messages": [ai_msg, tool_msg]})
return {"messages": [ai_msg]}
- 常见坑
- 遗漏工具结果消息:导致提供商报错或上下文不同步。
- 无限交接:加步数上限或终止条件。
- 建议引入步数预算:
MAX_STEPS = 8
defguard_and_return(cmd_or_update, state):
steps = state.get("steps", 0) + 1
if steps > MAX_STEPS:
return {"messages": [{"role": "assistant", "content": "超出步数预算,结束。"}]}
if isinstance(cmd_or_update, Command):
cmd_or_update.update = {**cmd_or_update.update, "steps": steps}
return cmd_or_update
return {"messages": cmd_or_update["messages"], "steps": steps}
2. 交接工具(handoff tool)
- 适用:每个智能体是一个“子图”,通过工具将控制权交还父图并路由到目标智能体。
- 关键点:在工具中返回
Command(goto=..., graph=Command.PARENT, update=...)。
from typing import Annotated
from langchain_core.tools.base import InjectedToolCallId
from langgraph.prebuilt import InjectedState
from langchain_core.tools import tool
from langgraph.types import Command
defmake_handoff_tool(*, agent_name: str):
tool_name = f"transfer_to_{agent_name}"
@tool(tool_name)
defhandoff_to_agent(
state: Annotated[dict, InjectedState],
tool_call_id: Annotated[str, InjectedToolCallId],
):
tool_message = {
"role": "tool",
"content": f"成功交接到 {agent_name}",
"name": tool_name,
"tool_call_id": tool_call_id,
}
return Command(
goto=agent_name,
graph=Command.PARENT,
update={"messages": state["messages"] + [tool_message]},
)
return handoff_to_agent
- 优点:
- 路由逻辑统一沉淀在“工具层”,智能体代码更干净。
- 便于在团队内部约定交接规范与审计。
3. 预构建 ReAct 智能体(create_react_agent)
- 适用:不需要自定义 ToolNode/循环的场景,快速搭建。
- 要点:把交接工具加入工具列表即可。
from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool
@tool
defadd(a: int, b: int) -> int:
return a + b
@tool
defmultiply(a: int, b: int) -> int:
return a * b
addition_expert = create_react_agent(
model,
[add, make_handoff_tool(agent_name="multiplication_expert")],
prompt="你是加法专家。必要时交接给乘法专家。",
)
multiplication_expert = create_react_agent(
model,
[multiply, make_handoff_tool(agent_name="addition_expert")],
prompt="你是乘法专家。必要时交接给加法专家。",
)
函数 API
当你希望“每个智能体能与所有其他智能体通信”,但又想暂时避开图的节点/边定义时,可以用 LangGraph 函数 API:
- 用
@entrypoint()定义主流程循环; - 用
@task封装对各智能体的调用; - 通过识别最近一条
AIMessage.tool_calls决定交接目标; - 在工具上用
@tool(return_direct=True),使得代理一旦调用交接工具就立刻“跳出”自身循环,将控制权交回主流程。
工程上建议在主循环里加入:
- 步数上限、异常重试、交接工具白名单校验(防止 LLM“幻想”出未定义的工具名)。
工程化落地的关键要点
- 提示词
- “先做自己职责,再交接”应写入 system prompt。
- 明确输出格式、是否中文、是否需要结构化信息(JSON/Markdown)。
- 终止条件与预算控制
- 设定步数预算、调用预算、时间预算;超限即
__end__。 - 在状态中追踪
steps/cost,并在每轮更新。
- 状态设计与内存治理
- 区分“共享消息”和“私有草稿”;用转换器只暴露必要上下文。
- 引入“摘要工具/裁剪策略”(例如只保留近 N 轮 + 摘要)。
- 工具安全
- 工具入参强类型化(Pydantic 校验);
- 重要操作前加“确认工具”(双人复核型);
- 对“交接工具名”设白名单,拒绝未知路由。
- 可观测性与调试
- 使用
graph.stream(..., subgraphs=True)订阅事件; - 统一
pretty_print_messages,将ai/tool消息流对齐打印; - 日志里打出
tool_call_id对应关系,便于问题复盘。
- 性能与并行
- 能“分而治之”的子任务用并行 map,再汇总 reduce;
- 对“冷工具”(慢 IO)启用异步;
- 压测不同架构的延迟/费用分布,形成“选型矩阵”。
- 稳定性与测试
- 构造“金样本对话流”,回归测试交接路径与最终答案;
- 在异常热点处增加
try/except+ “安全降级”(例如改用本地规则/缓存)。
常见错误与快速排查
- 少了工具结果消息:每个
ai_msg的 tool call 后必须追加 1 条tool消息。 - 子图交接没指定
Command.PARENT:导致交接“困在子图”。 update写错键名或结构:{"messages": [...]}不可缺。tool_call_id不匹配:工具回执里的 ID 必须对应刚触发的 call。- 未设 START 边或错误路由名:
builder.add_edge(START, "node")别漏。 - 无限循环:缺少步数控制,或提示词没强制“先做自己,再交接”。
总结
多智能体不是“把大模型套上更多提示词”,而是“把复杂问题拆解成可治理的自治单元”,并通过可观测、可控的交接协议把它们编排起来。Command 是编排的内核;state 是沟通的载体;工具是行动的接口;层次/网络/监督者/自定义工作流是架构的选项。 真正跑代码的时候,建议先用最简单的模式跑通端到端,再引入交接工具统一路由,最后按规模演进到层级或混合架构。
随着大模型的持续火爆,各行各业纷纷开始探索和搭建属于自己的私有化大模型,这无疑将催生大量对大模型人才的需求,也带来了前所未有的就业机遇。**正如雷军所说:“站在风口,猪都能飞起来。”**如今,大模型正成为科技领域的核心风口,是一个极具潜力的发展机会。能否抓住这个风口,将决定你是否能在未来竞争中占据先机。
那么,我们该如何学习大模型呢?
人工智能技术的迅猛发展,大模型已经成为推动行业变革的核心力量。然而,面对复杂的模型结构、庞大的参数量以及多样的应用场景,许多学习者常常感到无从下手。作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。
为此,我们整理了一份全面的大模型学习路线,帮助大家快速梳理知识,形成自己的体系。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、大模型全套的学习路线
大型预训练模型(如GPT-3、BERT、XLNet等)已经成为当今科技领域的一大热点。这些模型凭借其强大的语言理解和生成能力,正在改变我们对人工智能的认识。为了跟上这一趋势,越来越多的人开始学习大模型,希望能在这一领域找到属于自己的机会。
L1级别:启航篇 | 极速破界AI新时代
- AI大模型的前世今生:了解AI大模型的发展历程。
- 如何让大模型2C能力分析:探讨大模型在消费者市场的应用。
- 行业案例综合分析:分析不同行业的实际应用案例。
- 大模型核心原理:深入理解大模型的核心技术和工作原理。

L2阶段:攻坚篇 | RAG开发实战工坊
- RAG架构标准全流程:掌握RAG架构的开发流程。
- RAG商业落地案例分析:研究RAG技术在商业领域的成功案例。
- RAG商业模式规划:制定RAG技术的商业化和市场策略。
- 多模式RAG实践:进行多种模式的RAG开发和测试。

L3阶段:跃迁篇 | Agent智能体架构设计
- Agent核心功能设计:设计和实现Agent的核心功能。
- 从单智能体到多智能体协作:探讨多个智能体之间的协同工作。
- 智能体交互任务拆解:分解和设计智能体的交互任务。
- 10+Agent实践:进行超过十个Agent的实际项目练习。

L4阶段:精进篇 | 模型微调与私有化部署
- 打造您的专属服务模型:定制和优化自己的服务模型。
- 模型本地微调与私有化:在本地环境中调整和私有化模型。
- 大规模工业级项目实践:参与大型工业项目的实践。
- 模型部署与评估:部署和评估模型的性能和效果。

专题集:特训篇
- 全新升级模块:学习最新的技术和模块更新。
- 前沿行业热点:关注和研究当前行业的热点问题。
- AIGC与MPC跨领域应用:探索AIGC和MPC在不同领域的应用。

掌握以上五个板块的内容,您将能够系统地掌握AI大模型的知识体系,市场上大多数岗位都是可以胜任的。然而,要想达到更高的水平,还需要在算法和实战方面进行深入研究和探索。
- AI大模型学习路线图
- 100套AI大模型商业化落地方案
- 100集大模型视频教程
- 200本大模型PDF书籍
- LLM面试题合集
- AI产品经理资源合集
以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

二、640套AI大模型报告合集
这套包含640份报告的合集,全面覆盖了AI大模型的理论探索、技术落地与行业实践等多个维度。无论您是从事科研工作的学者、专注于技术开发的工程师,还是对AI大模型充满兴趣的爱好者,这套报告都将为您带来丰富的知识储备与深刻的行业洞察,助力您更深入地理解和应用大模型技术。
三、大模型经典PDF籍
随着人工智能技术的迅猛发展,AI大模型已成为当前科技领域的核心热点。像GPT-3、BERT、XLNet等大型预训练模型,凭借其卓越的语言理解与生成能力,正在重新定义我们对人工智能的认知。为了帮助大家更高效地学习和掌握这些技术,以下这些PDF资料将是极具价值的学习资源。

四、AI大模型商业化落地方案
AI大模型商业化落地方案聚焦于如何将先进的大模型技术转化为实际的商业价值。通过结合行业场景与市场需求,该方案为企业提供了从技术落地到盈利模式的完整路径,助力实现智能化升级与创新突破。

希望以上内容能对大家学习大模型有所帮助。如有需要,请微信扫描下方CSDN官方认证二维码免费领取相关资源【保证100%免费】。

祝大家学习顺利,抓住机遇,共创美好未来!
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)