前言

在LangChain生态日益成熟的今天,我们构建的AI应用正从简单的“问答机器人”向复杂的“智能体协作系统”演进。而LangGraph,作为LangChain生态中用于构建有状态、多步骤AI应用的利器,其核心价值之一就在于对多智能体(Multi-Agent) 系统的优雅支持。

为什么要“多智能体”?

  • 智能体(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大模型

当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!

DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

在这里插入图片描述

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
在这里插入图片描述
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

AI大模型系统学习路线

在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

img

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。

AI大模型入门到实战的视频教程+项目包

看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

在这里插入图片描述
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

海量AI大模型必读的经典书籍(PDF)

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
在这里插入图片描述

600+AI大模型报告(实时更新)

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

AI大模型面试真题+答案解析

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
在这里插入图片描述

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Logo

更多推荐