Overview
SubAgent 是 Zeus 的任务委托机制,允许主 Agent 将子任务分派给专门的子智能体执行。通过 SubAgentMiddleware,主 Agent 可以在不中断自身推理的情况下,并行处理多个独立子任务。 SubAgent 的核心价值:- 任务分解:将复杂任务拆解为独立的子任务,分别执行
- 专注隔离:每个子智能体拥有独立的上下文,不互相干扰
- 并行执行:多个子任务可以并行处理,提高效率
- 结果汇总:子智能体完成后,结果返回主 Agent 继续推理
Architecture
与 Main Agent 的关系
| 维度 | Main Agent | SubAgent |
|---|---|---|
| 上下文 | 完整的 System Prompt + 对话历史 | 精简上下文 + 任务描述 |
| 工具 | 全部可用工具 | 继承主 Agent 工具集 |
| 生命周期 | 会话级别 | 单次任务 |
| Checkpoint | 有(通过 LangGraph) | 无独立 Checkpoint |
| Memory | 可读写 | 继承主 Agent 配置 |
Tool Interface
Agent 通过task 工具调用 SubAgent:
| 工具名 | 功能 | 参数 |
|---|---|---|
task | 将子任务委托给子智能体 | agent: 子智能体名称, task: 任务描述 |
使用示例
当主 Agent 收到一个复杂请求(如”帮我分析这份数据并生成可视化报告”),它可以:- 创建一个子任务:“分析 sales.csv 数据,计算关键指标”
- 创建另一个子任务:“根据分析结果生成图表”
- 收集两个子智能体的结果,综合生成最终报告
SubAgentMiddleware
SubAgent 能力由 DeepAgents 框架的SubAgentMiddleware 提供。该中间件在 Agent 创建时自动注册,将子智能体列表注入到主 Agent 的工具集中。
配置
在BaseService._create_agent() 中,通过 subagents 参数传入子智能体列表:
执行流程
前端集成
前端在处理 SSE 流时,会区分主 Agent 和 SubAgent 的消息:- SubAgent 的
write_todos调用会被跳过,不显示在主 Agent 的任务列表中 - SubAgent 的工具调用和结果会在 Trajectory 面板中以嵌套方式展示
isInsideSubAgent()状态标记用于区分当前消息来源
设计原则
| 原则 | 说明 |
|---|---|
| 最小化上下文 | 子智能体只接收必要的任务描述,不继承完整对话历史 |
| 独立执行 | 子智能体的执行不阻塞主 Agent 的其他操作 |
| 结果透传 | 子智能体的执行结果作为 Tool Result 返回给主 Agent |
| 错误隔离 | 子智能体失败不会导致主 Agent 崩溃 |
使用场景
| 场景 | 说明 |
|---|---|
| 数据分析 | 将数据清洗、统计分析、可视化拆分为独立子任务 |
| 代码生成 | 将前端组件、后端 API、数据库 Migration 分别生成 |
| 文档编写 | 将不同章节的内容委托给不同子智能体并行编写 |
| 信息调研 | 同时搜索多个来源,汇总结果 |