架构模式

多代理系统

构建协作式的多 Agent 系统,实现任务分发与结果整合

📚 学习目标

学完这篇文章后,你将能够:

  • 理解多代理协作的优势与适用场景
  • 掌握“主管模式(Supervisor)”架构
  • 实现“层级代理(Hierarchical)”系统
  • 设计代理间的切换与消息传递机制

前置知识

在开始学习之前,建议先阅读:

你需要了解:

  • 单一 Agent 的局限性(Context 窗口、职责混淆)
  • 模块化设计思想

1️⃣ 为什么需要多代理?

就像软件开发中的“微服务”或“单一职责原则”一样,将复杂的 AI 任务拆解给多个专用的 Agent 可以:

  1. 提高准确性:专精的 Prompt 和工具集让 Agent 在特定领域表现更好。
  2. 易于维护:可以独立调试和优化每个 Agent。
  3. 突破限制:避免单一 System Prompt 过于复杂导致的混乱。

2️⃣ 主管模式 (Supervisor)

这是最常见的多代理模式。由一个主管 Agent 负责接收用户需求,并路由给具体的工兵 Agent

架构图

关键代码实现

需要一个特殊的路由节点(Supervisor)来决定下一个是谁。

const supervisorNode = async (state) => {
  const result = await supervisorModel.invoke([
    ...state.messages,
    new SystemMessage("你是主管,请根据用户需求选择下一个工人:'Coder' 或 'Writer',或者选择 'FINISH' 结束。")
  ]);
  
  // 假设 LLM 返回了结构化的下一步指令
  return { next: result.tool_calls[0].args.next };
};

3️⃣ 接力模式 (Handoffs)

代理之间直接传递控制权,类似于接力赛。这通常通过特殊的工具调用来实现。

示例场景

用户先联系“销售 Agent”,确定意向后,销售 Agent 将用户“转接”给“技术支持 Agent”。

// 定义一个工具,用于转移控制权
const transferToSupport = tool(
  () => "Successfully transferred to Support Agent",
  { name: "transfer_to_support", description: "Transfer user to support team" }
);

在路由逻辑里: 如果是 transfer_to_support 工具被调用 -> 路由到 Support Node。


4️⃣ 共享状态与隔离状态

在多代理系统中,状态管理变得尤为重要。

状态类型说明例子
Global State所有代理可见,用于传递最终结果消息历史、最终报告
Private State仅特定代理可见,避免干扰代理内部的思维链(Scratchpad)

在 LangGraph 中,可以通过**子图(Subgraph)**来实现状态隔离(下一章会详细讲)。


💡 练习题

  1. 设计题:设计一个“软件开发团队”的多代理系统,包含产品经理、架构师、程序员和测试员。请画出他们的协作流程图。
  2. 思考题:在主管模式中,如果“工兵 Agent”完成了任务,它应该把结果直接给用户,还是还给主管?由于什么因素决定?

📚 参考资源

官方文档


✅ 总结

本章要点

  • 多代理系统通过分工协作解决复杂问题。
  • 主管模式适合中心化调度,接力模式适合流程化协作。
  • 合理的 Prompt 设计让代理明确自己的职责边界。

下一步:如何优雅地隔离代理状态?让我们学习子图

登录以继续阅读

解锁完整文档、代码示例及更多高级功能。

立即登录

On this page