架构模式
多代理系统
构建协作式的多 Agent 系统,实现任务分发与结果整合
📚 学习目标
学完这篇文章后,你将能够:
- 理解多代理协作的优势与适用场景
- 掌握“主管模式(Supervisor)”架构
- 实现“层级代理(Hierarchical)”系统
- 设计代理间的切换与消息传递机制
前置知识
在开始学习之前,建议先阅读:
你需要了解:
- 单一 Agent 的局限性(Context 窗口、职责混淆)
- 模块化设计思想
1️⃣ 为什么需要多代理?
就像软件开发中的“微服务”或“单一职责原则”一样,将复杂的 AI 任务拆解给多个专用的 Agent 可以:
- 提高准确性:专精的 Prompt 和工具集让 Agent 在特定领域表现更好。
- 易于维护:可以独立调试和优化每个 Agent。
- 突破限制:避免单一 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)**来实现状态隔离(下一章会详细讲)。
💡 练习题
- 设计题:设计一个“软件开发团队”的多代理系统,包含产品经理、架构师、程序员和测试员。请画出他们的协作流程图。
- 思考题:在主管模式中,如果“工兵 Agent”完成了任务,它应该把结果直接给用户,还是还给主管?由于什么因素决定?
📚 参考资源
官方文档
✅ 总结
本章要点:
- 多代理系统通过分工协作解决复杂问题。
- 主管模式适合中心化调度,接力模式适合流程化协作。
- 合理的 Prompt 设计让代理明确自己的职责边界。
下一步:如何优雅地隔离代理状态?让我们学习子图。
登录以继续阅读
解锁完整文档、代码示例及更多高级功能。