子 Agent 设计:分身术与团队协作
一句话理解
想象你是一个团队 leader。遇到一个大项目,你不会自己一个人干——你会派出几个队员分头去查资料、写代码、做测试。每个队员带着你给的指令出发,完成后向你汇报结果。
Claude Code 的子 Agent 就是这样的"分身"机制。主 Agent 可以派出多个子 Agent,它们各自独立工作,完成后把结果交回来。
整体架构
Agent 类型系统
Claude Code 内置了多种"专业角色"的 Agent:
Agent 的定义结构
每个 Agent 类型都是一个定义对象:
Explore Agent 的定义示例:
比喻:Explore Agent 就像一个"侦察兵"——只带望远镜(只读工具),跑得快(Haiku 模型),轻装上阵(不带 CLAUDE.md 背包)。
子 Agent 的生命周期
创建与执行
当主 Agent 决定派出子 Agent 时,调用 AgentTool:
内部执行流程:
runAgent() 详解
关键发现:子 Agent 内部跑的也是同一个
query()循环!这是一个递归结构——Agent 调用 Agent Tool,Agent Tool 里面又跑一个完整的 Agent Loop。
同步 vs 异步 vs Fork
三种执行模式的对比:
Fork 分身机制
当你调用 Agent() 时不指定 subagent_type,系统会创建一个 Fork(分身):
Fork 的最大特点是共享上下文 + 缓存优化:
因为前缀完全一样,API 的提示词缓存可以被所有 Fork 共享,大幅节省费用。
Agent 间通信:SendMessage
子 Agent 之间可以通过 SendMessage 工具通信:
消息路由方式:
后台 Agent 的结果通知
后台 Agent 完成任务后,会生成一个 XML 格式的通知:
这个通知会被插入到主 Agent 的消息队列中,在下一轮循环时被处理。
工具过滤:每种 Agent 能用什么
不同类型的 Agent 有不同的工具访问权限:
比喻:就像一个公司的权限体系。实习生(Explore Agent)只能看文档;正式员工(General Purpose)能编辑文件;但谁都不能删除团队(TeamDelete)。
Coordinator 模式:多 Agent 编排
当开启 Coordinator 模式时,主 Agent 变成了纯粹的"指挥官":
Agent Memory:子 Agent 的记忆
子 Agent 也有自己的持久化记忆系统:
防止递归炸弹
子 Agent 可以再调用 Agent Tool 来创建孙 Agent。为了防止无限递归,系统有几道限制:
- Fork 子代不能再 Fork:检测消息中是否有 Fork 标记
- 异步 Agent 工具列表受限:后台 Agent 的工具池更小
- maxTurns 限制:每个 Agent 有最大轮数限制
- Token Budget 限制:每个 Agent 有 token 预算
小结
子 Agent 设计的核心思想是分治 + 隔离:
- 分治:大任务拆成小任务,每个子 Agent 专注一件事
- 类型化:不同类型的 Agent 有不同的能力(工具集、模型、权限)
- 隔离:每个子 Agent 有独立的消息历史和 AbortController
- 通信:通过 SendMessage 和 task-notification 机制传递结果
- 缓存共享:Fork 机制通过共享消息前缀来最大化缓存命中
- 递归保护:多层限制防止无限嵌套

