概览
supervisor pattern 是一种 multi-agent 架构,其中中心 supervisor agent 会协调专门的工作 agent。当任务需要不同类型的专业能力时,这种方法尤其有效。与其构建一个跨领域管理工具选择的 agent,不如创建多个聚焦的专家,并由理解整体工作流的 supervisor 负责协调。 在本教程中,你将构建一个个人助手系统,并通过贴近真实场景的工作流展示这些优势。系统将协调两个职责根本不同的专家:- 一个处理日程安排、可用性检查和事件管理的 calendar agent。
- 一个管理沟通、起草消息和发送通知的 email agent。
为什么使用 supervisor?
Multi-agent 架构允许你将工具分配给不同 worker,每个 worker 都有自己的 prompt 或指令。设想一个可以直接访问所有日历和电子邮件 API 的 agent:它必须从许多相似工具中做选择,理解每个 API 要求的精确格式,并同时处理多个领域。如果性能下降,将相关工具及其 prompt 拆分为逻辑分组会很有帮助,也便于迭代改进。概念
本教程将介绍以下概念:设置
安装
本教程需要langchain 包:
LangSmith
设置 LangSmith,以检查 agent 内部发生了什么。然后设置以下环境变量:组件
你需要从 LangChain 的集成套件中选择一个聊天模型:- OpenAI
- Anthropic
- Azure
- Google Gemini
- AWS Bedrock
- HuggingFace
- OpenRouter
1. 定义工具
首先定义需要结构化输入的工具。在真实应用中,这些工具会调用实际 API,例如 Google Calendar、SendGrid 等。在本教程中,你将使用 stub 来演示这种模式。2. 创建专门的 sub-agents
接下来,你将创建处理各个领域的专门 sub-agents。创建 calendar agent
Calendar agent 会理解自然语言日程安排请求,并将其转换为精确的 API 调用。它会处理日期解析、可用性检查和事件创建。"2024-01-16T14:00:00"),计算结束时间,调用 create_calendar_event,并返回自然语言确认。
创建 email agent
Email agent 负责消息撰写和发送。它专注于提取收件人信息、生成合适的主题行和正文,并管理电子邮件沟通。send_email,并返回确认。每个 sub-agent 都聚焦于狭窄任务,并配有特定领域的工具和 prompt,因此能更好地完成自己的任务。
3. 将 sub-agents 包装成工具
现在,将每个 sub-agent 包装成 supervisor 可以调用的工具。这是创建分层系统的关键架构步骤。Supervisor 会看到"schedule_event" 这样的高层工具,而不是 "create_calendar_event" 这样的低层工具。
4. 创建 supervisor agent
现在创建用于编排 sub-agents 的 supervisor。Supervisor 只会看到高层工具,并在领域层级做路由决策,而不是在单个 API 层级做决策。5. 使用 supervisor
现在,使用需要跨多个领域协调的复杂请求测试完整系统:示例 1:简单单领域请求
schedule_event,然后 calendar agent 处理日期解析和事件创建。
示例 2:复杂多领域请求
schedule_event,然后为提醒调用 manage_email。每个 sub-agent 完成自己的任务,supervisor 再将两个结果合成为连贯响应。
完整工作示例
以下是整合后的可运行脚本:理解架构
你的系统有三层。底层包含需要精确格式的严格 API 工具。中间层包含 sub-agents,它们接收自然语言,将其转换为结构化 API 调用,并返回自然语言确认。顶层包含 supervisor,它会路由到高层能力并综合结果。 这种关注点分离带来多个好处:每一层都有聚焦的职责,你可以添加新领域而不影响现有领域,也可以独立测试和迭代每一层。6. 添加 human-in-the-loop 审查
对于敏感操作,加入 human-in-the-loop 审查 是谨慎做法。LangChain 提供内置 middleware 用于审查工具调用,在本例中也就是 sub-agents 调用的工具。 为两个 sub-agents 添加 human-in-the-loop 审查:- 将
create_calendar_event和send_email工具配置为触发中断,并允许所有响应类型(approve、edit、reject) - 仅向顶层 agent 添加 checkpointer。暂停和恢复执行需要它。
Command 并通过 ID 引用每个中断,为其指定决策。更多细节请参阅 human-in-the-loop guide。为了演示,这里会接受日历事件,但编辑外发电子邮件的主题:
7. 高级:控制信息流
默认情况下,sub-agents 只会接收来自 supervisor 的请求字符串。你可能想传递额外上下文,例如对话历史或用户偏好。向 sub-agents 传递额外对话上下文
控制 supervisor 接收的信息
你还可以自定义哪些信息会回流到 supervisor:8. 关键要点
Supervisor pattern 会创建多层抽象,其中每一层都有明确职责。设计 supervisor 系统时,应从清晰的领域边界开始,并为每个 sub-agent 提供聚焦的工具和 prompt。为 supervisor 编写清晰的工具描述,在集成前独立测试每一层,并根据具体需求控制信息流。后续步骤
了解用于 agent-to-agent 对话的 handoffs,探索 context engineering 以微调信息流,阅读 multi-agent overview 以比较不同模式,并使用 LangSmith 调试和监控你的 multi-agent 系统。Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

