跳转到主要内容

Overview

SubAgent 是 Zeus 的任务委托机制,允许主 Agent 将子任务分派给专门的子智能体执行。通过 SubAgentMiddleware,主 Agent 可以在不中断自身推理的情况下,并行处理多个独立子任务。 SubAgent 的核心价值:
  • 任务分解:将复杂任务拆解为独立的子任务,分别执行
  • 专注隔离:每个子智能体拥有独立的上下文,不互相干扰
  • 并行执行:多个子任务可以并行处理,提高效率
  • 结果汇总:子智能体完成后,结果返回主 Agent 继续推理

Architecture

与 Main Agent 的关系

维度Main AgentSubAgent
上下文完整的 System Prompt + 对话历史精简上下文 + 任务描述
工具全部可用工具继承主 Agent 工具集
生命周期会话级别单次任务
Checkpoint有(通过 LangGraph)无独立 Checkpoint
Memory可读写继承主 Agent 配置

Tool Interface

Agent 通过 task 工具调用 SubAgent:
工具名功能参数
task将子任务委托给子智能体agent: 子智能体名称, task: 任务描述

使用示例

当主 Agent 收到一个复杂请求(如”帮我分析这份数据并生成可视化报告”),它可以:
  1. 创建一个子任务:“分析 sales.csv 数据,计算关键指标”
  2. 创建另一个子任务:“根据分析结果生成图表”
  3. 收集两个子智能体的结果,综合生成最终报告

SubAgentMiddleware

SubAgent 能力由 DeepAgents 框架的 SubAgentMiddleware 提供。该中间件在 Agent 创建时自动注册,将子智能体列表注入到主 Agent 的工具集中。

配置

BaseService._create_agent() 中,通过 subagents 参数传入子智能体列表:
agent = create_deep_agent(
    model=self.llm,
    tools=tools,
    system_prompt=system_prompt,
    subagents=subagents,  # 子智能体列表
    middleware=middleware,
    ...
)

执行流程


前端集成

前端在处理 SSE 流时,会区分主 Agent 和 SubAgent 的消息:
  • SubAgent 的 write_todos 调用会被跳过,不显示在主 Agent 的任务列表中
  • SubAgent 的工具调用和结果会在 Trajectory 面板中以嵌套方式展示
  • isInsideSubAgent() 状态标记用于区分当前消息来源

设计原则

原则说明
最小化上下文子智能体只接收必要的任务描述,不继承完整对话历史
独立执行子智能体的执行不阻塞主 Agent 的其他操作
结果透传子智能体的执行结果作为 Tool Result 返回给主 Agent
错误隔离子智能体失败不会导致主 Agent 崩溃

使用场景

场景说明
数据分析将数据清洗、统计分析、可视化拆分为独立子任务
代码生成将前端组件、后端 API、数据库 Migration 分别生成
文档编写将不同章节的内容委托给不同子智能体并行编写
信息调研同时搜索多个来源,汇总结果