§09 子代理:一个 Agent 指挥一队 Agent
去年做一个研究报告生成器,单个 Agent 跑半小时还串台。拆成"研究员 + 写手"两个专员并行,十分钟出稿。这章讲这种"一个人带一队人"的打法。
09.1 类比级联:总监、经理、员工
单个 Agent 是一个人干活。子代理让一个人带一队人。
主 Agent 是技术总监。它不自己写代码,只把任务派下去。 子代理是专员。每个只会一件事,但做得精。
我管这叫"一个人带出一支队伍"。复杂任务拆给不同专员并行做,速度直接起飞。
09.2 三种定义方式
| 方式 | 写法 | 标叔的结论 |
|---|---|---|
| 代码定义 | agents={...} |
SDK 应用首选 |
| 文件定义 | .claude/agents/*.md |
团队协作好维护 |
| 内置通用 | 不用定义 | 临时探索用 |
代码定义最常用。每个子代理有 description、prompt、tools、model。
09.3 一个真实的多代理例子
文档里的研究系统,我精简给你看:
from claude_agent_sdk import AgentDefinition
agents = {
"researcher": AgentDefinition(
description="需要搜集资料时用。用搜索找信息,写进文件。",
tools=["WebSearch", "Write"], # 只给搜索和写,最小权限
prompt="你是研究专员,负责上网找资料。",
model="haiku", # 便宜的模型干脏活
),
"report-writer": AgentDefinition(
description="资料齐了,用来写正式报告。不搜网。",
tools=["Skill", "Write", "Read"],
prompt="你是报告写手,把笔记整理成 PDF。",
model="haiku",
),
}
主 Agent 的 allowed_tools 只放 ["Task"]。它自己不动手,全派给子代理。
标叔的经验:子代理的
description决定它被不被调用。文档里反复强调:主 Agent 看
description决定"这事该派谁"。我把描述写成"什么时候用",匹配准多了。写"研究专员"这种名字,它经常瞎派。
09.4 上下文隔离是精髓
每个子代理跑在独立的全新对话里。它读了 100 个文件,主 Agent 只收到一句总结。上下文不爆炸。
注意:工具名从
Task改成了Agent。文档提了:Claude Code v2.1.63 之后,子代理工具叫
Agent。但老 SDK 还发Task。检测时两个都判断,才兼容各版本。
子代理会带了。最后一步,把它送上生产环境。