目标:使用子代理拆分复杂任务,提高并行处理效率
预计时间:30 分钟
对应官方文档:Sub-agents、Agents
什么是子代理?
子代理(Sub-agent) 是让 Claude 创建独立的"小助手"来处理特定任务:
主会话(你)
├── 子代理 A:重构数据库模型
├── 子代理 B:更新 API 接口
└── 子代理 C:修改前端调用
每个子代理:
- 有独立的上下文和记忆
- 可以并行执行
- 完成后向主会话报告结果
为什么使用子代理?
问题:上下文窗口限制
Claude 能记住的内容有限(约 20 万 token)。大项目下:
- 加载太多文件 → 超出限制
- 长对话历史 → 早期内容被遗忘
解决:任务拆分
主会话:协调全局
├─ 子代理 1:专注模块 A(加载 A 相关文件)
├─ 子代理 2:专注模块 B(加载 B 相关文件)
└─ 子代理 3:专注测试(加载测试框架)
每个子代理只加载相关上下文,不会超限。
创建子代理
方式一:命令行
> /subagent "重构用户认证模块"
创建子代理 "auth-refactor"...
分配给它的上下文:
- src/auth/
- src/models/user.py
- tests/test_auth.py
[子代理开始工作,你可以继续其他操作]
方式二:编程式(Agent SDK)
from claude import Agent
parent = Agent()
# 创建子代理
auth_agent = parent.create_subagent(
name="auth-refactor",
instructions="专注重构认证模块,保持向后兼容",
files=["src/auth/*", "tests/test_auth.py"]
)
# 并行执行
result = auth_agent.run("将 session 认证改为 JWT")子代理配置
专用指令
给子代理特定的 CLAUDE.md:
# 认证模块重构规范
## 约束
- 不修改数据库 schema
- 保持现有 API 接口不变
- 所有修改必须有对应测试
## 检查清单
- [ ] 单元测试通过率 100%
- [ ] 集成测试通过
- [ ] 性能不下降权限控制
subagent = parent.create_subagent(
name="safe-refactor",
mode="ask", # 子代理必须询问确认
allowed_commands=["pytest", "black", "git diff"], # 只允许这些命令
denied_commands=["git push", "rm -rf", "docker"]
)实战:代码审查
场景:大型 PR 审查
> 请审查这个 PR 的所有更改
主会话分析:
- 修改了 15 个文件
- 涉及 3 个模块
创建子代理:
├─ reviewer-db: 审查数据库相关更改
├─ reviewer-api: 审查 API 接口更改
└─ reviewer-tests: 审查测试完整性
并行审查完成,汇总报告:
- P0 问题:1 个(SQL 注入风险)
- P1 问题:3 个
- 建议:5 条
与子代理交互
查看状态
> /subagents
Active subagents:
1. auth-refactor [运行中] 已完成 3/5 任务
2. api-update [等待中] 等待 auth-refactor 完成
发送消息
> /msg auth-refactor "注意:User 模型新增了 email_verified 字段"
合并结果
> /merge auth-refactor
将子代理的更改合并到主会话...
应用 diff:
- src/auth/login.py
- src/auth/jwt.py
- tests/test_auth.py
动态工作流(进阶)
更复杂的场景可以使用动态工作流:
# workflow.py
workflow = {
"steps": [
{
"agent": "analyzer",
"task": "分析代码库,确定需要重构的模块",
"output": "refactor_plan.json"
},
{
"parallel": [
{"agent": "refactor-a", "input": "refactor_plan.json", "filter": "module=A"},
{"agent": "refactor-b", "input": "refactor_plan.json", "filter": "module=B"},
]
},
{
"agent": "integrator",
"task": "合并所有重构结果,解决冲突",
"depends": ["refactor-a", "refactor-b"]
},
{
"agent": "tester",
"task": "运行全量测试,验证重构",
"depends": ["integrator"]
}
]
}最佳实践
| ✅ 推荐 | ❌ 避免 |
|---|---|
| 任务明确、可独立完成的子代理 | 过度拆分,协调成本过高 |
| 给子代理明确的完成标准 | 模糊的"帮我看看" |
| 设置合理的超时时间 | 让子代理无限期运行 |
| 合并前审查 diff | 直接接受所有更改 |
| 使用 --worktree 隔离 | 在同一工作目录并行修改 |
补充:子代理工作流与实战
子代理任务分发与合并流程
高级配置与代码示例
示例 1:Agent SDK 创建子代理(完整代码)
# refactor_workflow.py
from claude import Agent
import asyncio
async def main():
parent = Agent()
# 创建三个并行的子代理
auth_agent = parent.create_subagent(
name="auth-refactor",
instructions="""
你负责重构认证模块。约束:
- 不修改数据库 schema
- 保持现有 API 接口不变
- 所有修改必须有对应测试
- 使用 JWT 替代 session,但保留原有 session 的兼容层
""",
files=["src/auth/*", "tests/test_auth.py", "src/models/user.py"],
mode="auto-edits", # 自动编辑,但限制在指定文件
timeout_minutes=30
)
api_agent = parent.create_subagent(
name="api-adapter",
instructions="""
你负责更新 API 层以适配新的认证方式。
约束:
- 所有接口的 request/response 格式不变
- 在 header 中支持 Authorization: Bearer <token>
- 同时兼容旧的 session cookie(双轨运行 1 个版本)
""",
files=["src/routes/*", "src/middleware/auth.py", "tests/test_api.py"],
mode="auto-edits",
timeout_minutes=30
)
test_agent = parent.create_subagent(
name="test-updater",
instructions="""
你负责更新测试用例以覆盖新的 JWT 认证逻辑。
要求:
- 原有测试必须继续通过(兼容层保证)
- 新增 JWT 专门的测试场景
- 测试覆盖率不下降
""",
files=["tests/*", "src/auth/jwt.py"],
mode="auto-edits",
timeout_minutes=20
)
# 并行执行
results = await asyncio.gather(
auth_agent.run("将 session 认证核心改为 JWT,保留兼容层"),
api_agent.run("在 API 路由中支持 JWT Bearer Token"),
test_agent.run("补充 JWT 测试并确保旧测试通过"),
return_exceptions=True
)
# 检查结果
for agent, result in zip([auth_agent, api_agent, test_agent], results):
if isinstance(result, Exception):
print(f"❌ {agent.name} 失败: {result}")
else:
print(f"✅ {agent.name} 完成")
# 合并前审查
print("\n--- 变更摘要 ---")
for agent in [auth_agent, api_agent, test_agent]:
diff = agent.get_diff()
print(f"\n{agent.name}:\n{diff[:500]}...")
# 用户确认后合并(或手动处理冲突)
# parent.merge_subagent(auth_agent)
# parent.merge_subagent(api_agent)
# parent.merge_subagent(test_agent)
if __name__ == "__main__":
asyncio.run(main())示例 2:子代理专用 CLAUDE.md 模板
创建 .claude/subagent-templates/refactor.md:
# 子代理任务规范:代码重构
## 任务信息
- 目标模块:{{module}}
- 重构类型:{{type}}
- 预计影响文件数:{{affected_files}}
## 强制约束
- [ ] 不修改数据库 schema(除非任务描述明确允许)
- [ ] 所有公开 API 保持向后兼容
- [ ] 修改前先运行测试,记录基线通过率
- [ ] 修改后测试通过率必须 >= 基线
- [ ] 单函数行数不超过 50 行(重构后)
## 工作流程
1. 读取相关文件,理解当前逻辑
2. 编写/更新测试用例(先写测试再重构)
3. 执行重构
4. 运行全量测试
5. 生成变更摘要(改了哪些文件、为什么改、风险点)
## 输出格式变更摘要
- 修改文件:list
- 新增文件:list
- 删除文件:list
风险说明
- ...
测试状态
- 基线通过率:X%
- 当前通过率:Y%
调用时:
subagent = parent.create_subagent(
name="order-refactor",
instructions_template=".claude/subagent-templates/refactor.md",
template_vars={
"module": "订单模块",
"type": "拆分 fat service",
"affected_files": "5-8"
}
)示例 3:动态工作流 JSON 配置(进阶)
{
"workflow": "大型重构流水线",
"steps": [
{
"id": "analyze",
"agent": "analyzer",
"type": "sequential",
"task": "分析 src/monolith.py,输出重构计划 refactor_plan.json",
"output_files": ["refactor_plan.json"],
"timeout": 600
},
{
"id": "refactor-parallel",
"type": "parallel",
"branches": [
{
"id": "module-a",
"agent": "refactor-a",
"task": "按 refactor_plan.json 重构模块 A",
"input": "refactor_plan.json",
"filter": "module=A",
"files": ["src/module_a/*"],
"timeout": 900
},
{
"id": "module-b",
"agent": "refactor-b",
"task": "按 refactor_plan.json 重构模块 B",
"input": "refactor_plan.json",
"filter": "module=B",
"files": ["src/module_b/*"],
"timeout": 900
},
{
"id": "module-c",
"agent": "refactor-c",
"task": "按 refactor_plan.json 重构模块 C",
"input": "refactor_plan.json",
"filter": "module=C",
"files": ["src/module_c/*"],
"timeout": 900
}
]
},
{
"id": "integrate",
"agent": "integrator",
"type": "sequential",
"depends_on": ["module-a", "module-b", "module-c"],
"task": "合并所有重构结果,解决模块间接口冲突",
"timeout": 600
},
{
"id": "test",
"agent": "tester",
"type": "sequential",
"depends_on": ["integrate"],
"task": "运行全量测试 + 性能基准测试,输出测试报告",
"timeout": 1200
}
]
}实战场景
场景一:大型认证模块改造(Session 转 JWT)
背景:一个运行 3 年的 Python 后端项目,认证仍基于服务端 session,需要迁移到 JWT 以支持移动端和第三方集成。涉及 8 个文件、3 个模块,改造复杂度高。
步骤:
- 主会话分析影响范围:路由层、中间件、测试、前端调用
- 创建 3 个子代理并行工作:
auth-refactor:重写核心认证逻辑,保留 session 兼容层api-adapter:更新所有路由以支持 Bearer Tokentest-updater:补充 JWT 测试场景,确保旧测试通过
- 各子代理独立加载相关文件,互不干扰,不会超出上下文限制
- 完成后主会话审查 3 份 diff,发现
api-adapter有一处 header 解析逻辑与auth-refactor的 token 格式不统一 - 主会话协调修正后,合并所有变更
结果:
- 原本需要串行处理 8 小时的任务,3 个子代理并行后 2.5 小时完成
- 每个子代理只关注 3-4 个文件,上下文清晰,AI 理解深度更高
- 合并时发现的接口不一致问题,在主会话层面被及时拦截
- 全程测试通过率保持在 98% 以上,上线后无回归故障
场景二:大规模代码审查(15 文件 PR 审查)
背景:一个涉及 15 个文件、跨 3 个模块的大型 PR 需要审查,包括数据库迁移、API 变更、前端适配。人工审查容易遗漏跨模块影响。
步骤:
- 主会话加载 PR diff,分析文件归属:
- 数据库相关:3 个 migration 文件 + 2 个 model 文件
- API 相关:5 个 route/service 文件
- 前端相关:3 个组件 + 2 个 API 调用文件
- 创建 3 个审查子代理,分别专注不同领域:
reviewer-db:检查 migration 安全性、回滚策略、索引合理性reviewer-api:检查接口兼容性、输入验证、错误处理reviewer-fe:检查前端状态管理、API 调用适配、错误边界
- 并行审查完成后,主会话汇总报告,特别关注跨模块一致性(如 API 返回字段是否被前端正确使用)
结果:
- 发现 1 个 P0 问题:migration 中删除列的操作没有先备份数据,且无回滚脚本
- 发现 2 个 P1 问题:API 新增必填参数但前端未传递;JWT token 过期时间不一致
- 审查时间从人工的 3 小时缩短到 40 分钟
- 子代理的专业化分工让各领域审查更深入(DBA 视角、安全视角、前端架构视角)