概述
SubAgent 是 Zeus 的任务委托机制。主 Agent 通过调用task 工具,将子任务分派给独立的子智能体执行。每个子智能体拥有自己的上下文和推理循环,执行完毕后将结果作为 Tool Result 返回给主 Agent。
核心能力:
- 任务分解 — 将复杂任务拆解为独立的子任务
- 上下文隔离 — 每个子智能体拥有独立上下文,互不干扰
- 并行执行 — 多个子任务可并行处理,提升效率
- 结果汇总 — 子智能体完成后,结果返回主 Agent 继续推理
架构
主 Agent 与子智能体对比
| 维度 | 主 Agent | 子智能体 |
|---|---|---|
| 上下文 | 完整 System Prompt + 对话历史 | 精简上下文 + 任务描述 |
| 工具集 | 全部可用工具 | 继承主 Agent 的工具集 |
| 模型 | 用户配置的模型 | 继承主 Agent 的模型 |
| 生命周期 | 会话级别 | 单次任务,完成即销毁 |
| 中间件 | 完整中间件栈 | 精简中间件栈 |
| Todos | 有独立的任务列表 | write_todos 调用被跳过 |
task 工具
主 Agent 通过 task 工具触发子智能体。该工具由 DeepAgents 框架的 SubAgentMiddleware 自动注入。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
description | string | 任务的简短描述(用于 UI 展示) |
prompt | string | 详细的任务指令,子智能体以此为上下文执行 |
调用示例
SubAgentMiddleware
SubAgent 能力由 DeepAgents 框架的SubAgentMiddleware 提供。在 Agent 创建时自动注册,将 task 工具注入主 Agent 的工具集。
后端配置
在BaseService._create_agent() 中配置:
执行流程
前端集成
SSE 事件流
子智能体的执行通过标准 SSE 事件流传输到前端。前端通过事件中的tool_name 和 tool_call_id 区分主 Agent 和子智能体的消息。
消息隔离
子智能体产生的消息(工具调用、文本)通过subAgentTaskId 字段标记,不在主聊天流中显示:
- 聊天区:子智能体的工具调用只展示在对应的
TaskToolCallCard内部,不会出现在主消息流 - 任务分组:
groupMessagesIntoTasks在处理前过滤掉subAgentTaskId消息,不影响主任务状态 - Todos:子智能体的
write_todos调用会被完全跳过,不影响主 Agent 的任务列表
TaskToolCallCard
每个task 工具调用在聊天区渲染为一张可展开的卡片:
- 收起状态:显示状态图标、任务描述、进度(如 5/11)、当前活动
- 展开状态:列出子智能体内部所有工具调用及其状态
- 运行中:蓝色边框高亮,带旋转加载图标
- 支持点击 “View in trajectory →” 跳转到对应的轨迹标签页
TaskToolCallCard,分别展示进度。
轨迹区标签页
当存在子智能体时,轨迹区顶部显示标签页切换栏:- Main — 主 Agent 的工具执行历史
- SubAgent — 每个子智能体拥有独立标签页,显示各自的工具执行历史
并行执行
主 Agent 可以在同一轮中调用多个task 工具,触发并行子智能体:
subAgentStack)追踪当前活跃的子智能体上下文,将后续的工具调用事件路由到正确的子智能体轨迹中。
设计原则
| 原则 | 说明 |
|---|---|
| 最小化上下文 | 子智能体只接收任务描述,不继承完整对话历史,减少 token 消耗 |
| 工具继承 | 子智能体自动继承主 Agent 的工具集,无需额外配置 |
| 独立执行 | 子智能体拥有独立的推理循环,不阻塞主 Agent |
| 结果透传 | 执行结果作为标准 Tool Result 返回,主 Agent 无感知差异 |
| 错误隔离 | 子智能体失败不会导致主 Agent 崩溃,错误信息作为 Tool Result 返回 |
| UI 隔离 | 子智能体的消息和工具调用仅在 TaskToolCallCard 和对应的轨迹标签页展示 |
使用场景
| 场景 | 示例 |
|---|---|
| 代码开发 | 将前端组件、后端 API、数据库 Schema 分别交给独立子智能体生成 |
| 数据分析 | 数据清洗、统计分析、可视化拆分为并行子任务 |
| 信息调研 | 同时搜索多个来源,各子智能体独立检索后汇总结果 |
| 文档编写 | 不同章节委托给不同子智能体并行编写 |
| 批量操作 | 对多个文件或数据源执行相同操作,并行处理 |