SubAgent 机制详解
SubAgent 用独立 LangGraph 子运行处理子任务,隔离 messages 与工具噪声,向主 Agent 只返回最终摘要或结果消息。
1. 设计目标
| 主 Agent 直接做 | SubAgent |
|---|---|
| 上下文迅速膨胀 | 子对话在子 state |
| 工具链混乱 | 子代理专用 tools |
| 难并行 | 可并行多个 subagent 调用 |
2. 配置方式
createDeepAgent({ subagents: [...] }) 声明:
name/description(主模型选型)prompt/tools/model(可不同于主代理)- 可选继承主代理 Skills
3. 执行流程
mermaid
sequenceDiagram
participant M as 主 Agent
participant T as task 工具
participant S as 子 Agent 图
M->>T: 派发子任务
T->>S: invoke 子图
S->>S: 多轮 tool 循环
S->>T: 最终消息
T->>M: 压缩结果4. 状态隔离
子图使用 独立 thread 或隔离 state 字段;父图 messages 不自动包含子图中间 tool 日志(设计决策见 08)。
5. 并行
多个 task 调用可并行(受 maxConcurrency 与模型限流约束)。
6. Skills 继承
子代理可挂载 SkillsMiddleware,与父共享或覆盖技能目录(见 07)。
7. 实践
- 子任务描述要具体,含完成标准。
- 危险工具放子代理并收紧 Backend。
- 避免嵌套过深,防止调度爆炸。
8. 总结
SubAgent = 上下文防火墙 + 专用小 Agent;与 LangGraph 子图 概念一致,由 middleware 封装。