一、引子:一个让人又爱又恨的场景
你有没有遇到过这种情况------你让 Claude Code 写一个功能,它写到一半,你说"等等,先重构一下这个模块",然后之前的上下文全乱了。或者你让它同时改三个文件,它一个一个来,改完第一个忘了第二个。
就在上周,Claude Code 发布了一项重要更新:子智能体(Sub-agent)模式默认开启,AI 可以在后台并行执行任务,而你继续做自己的事。
这个功能听起来很酷,但实际用起来怎么样?是不是真能提升效率?本文从一个真实项目出发,完整记录了我的配置过程、使用体验和踩坑心得。
二、什么是子智能体模式?
子智能体是 Claude Code 的一个核心能力:当主 Agent 识别到某个任务可以独立拆解时,它会自动创建一个子智能体在后台运行,完成后把结果汇报回来。
举个例子:你在写一个 Web 应用的后端 API,Claude Code 可以派一个子智能体去写单元测试,另一个去更新文档,而主 Agent 继续写业务逻辑。
配置方式
子智能体默认就是开启的,无需额外配置。但如果你需要精细控制,可以在项目根目录的 .claude/settings.json 中调整:
json
{
"subAgent": {
"enabled": true,
"maxConcurrency": 3,
"timeoutSeconds": 300
}
}
或者通过 CLAUDE.md(项目级指令文件)来定义子智能体的行为规则:
markdown
## Sub-agent Instructions
当需要执行以下任务时,请使用子智能体:
1. 运行测试套件并报告结果
2. 批量文件重构(不影响主线程)
3. 生成重复性代码(CRUD、Model、DTO)
工作原理
子智能体的执行流程大致如下:
主 Agent 识别可并行的子任务
↓
创建子智能体(继承主项目的上下文和工具权限)
↓
子智能体独立执行(在后台)
↓
执行完成后汇报结果
↓
主 Agent 整合子结果并继续
每个子智能体都有独立的推理上下文,不会和主 Agent 互相干扰。这意味着你可以让子智能体去跑一个耗时的代码库分析,而主 Agent 继续改代码------两不耽误。
三、实战:用子智能体重构一个真实项目
为了测试子智能体的实际效果,我选了一个中等规模的项目来做实验:一个 Express.js + MongoDB 的 REST API 服务,大约 15 个文件、3000 行代码。
Task 设计
我给 Claude Code 下达了这样一个任务:
重构这个项目的错误处理机制:把所有 try-catch 改为统一错误中间件,同时保持功能不变。重构完成后,补全缺失的单元测试。
这个任务天然可以拆分:
- 分析现有错误处理模式(子任务 A)
- 实现统一错误中间件(子任务 B)
- 修改所有路由文件(子任务 C)
- 编写测试用例(子任务 D)
实际执行过程
以下是 Claude Code 的真实执行日志(简化版):
less
[主 Agent] 开始分析项目结构...
[主 Agent] 发现 12 个路由文件包含 try-catch
[主 Agent] 创建子智能体-1: 分析错误处理模式
[子智能体-1] 识别出 3 种错误处理模式:
- 模式 A:controller 内 try-catch 直接返回(8 个文件)
- 模式 B:controller 内 try-catch 调用 next(error)(3 个文件)
- 模式 C:未处理(1 个文件)
[子智能体-1] 报告完成
[主 Agent] 创建子智能体-2: 实现统一错误中间件
[子智能体-2] 创建 errorHandler.js
[子智能体-2] 创建 AppError 类、验证错误类、业务错误类
[子智能体-2] 配置 app.use(errorHandler)
[子智能体-2] 报告完成
[主 Agent] 创建子智能体-3: 修改 12 个路由文件
[子智能体-3] 并行修改 12 个路由文件...
[子智能体-3] 8/12 成功,2 个文件有冲突(正在解决)...
[子智能体-3] 12/12 完成
[主 Agent] 创建子智能体-4: 编写测试 + 验证
[子智能体-4] 运行测试: 23 passed, 0 failed
[子智能体-4] 新增 15 个测试用例覆盖错误场景
[全部完成] 耗时: 4 分 32 秒
关键发现
整个过程中,我可以同时做其他事------浏览文档、写另外一个文件------完全不用盯着进度。子智能体执行期间,主 Agent 会定时轮询状态,如果子智能体遇到阻塞(比如 ESLint 报错),主 Agent 会自动介入修复。
这是重构前后的代码对比:
重构前(传统 try-catch):
javascript
// userController.js
exports.getUser = async (req, res, next) => {
try {
const user = await User.findById(req.params.id)
if (!user) {
return res.status(404).json({ error: 'User not found' })
}
res.json(user)
} catch (err) {
next(err)
}
}
重构后(统一错误中间件):
javascript
// userController.js
exports.getUser = async (req, res, next) => {
const user = await User.findById(req.params.id)
if (!user) throw new NotFoundError('User')
res.json(user)
}
javascript
// errorHandler.js(一次编写,全局生效)
class AppError extends Error {
constructor(message, statusCode) {
super(message)
this.statusCode = statusCode
this.isOperational = true
}
}
class NotFoundError extends AppError {
constructor(resource) {
super(`${resource} not found`, 404)
}
}
const errorHandler = (err, req, res, next) => {
const statusCode = err.statusCode || 500
res.status(statusCode).json({
success: false,
error: err.message,
...(process.env.NODE_ENV === 'development' && { stack: err.stack })
})
}
四、对比:有子智能体 vs 无子智能体
为了量化差异,我用同一个项目做了对比实验:
| 对比维度 | 无子智能体(手动拆解) | 有子智能体 | 提升 |
|---|---|---|---|
| 总耗时 | 8 分 15 秒 | 4 分 32 秒 | 45% |
| 用户介入次数 | 7 次 | 2 次 | 71% |
| 上下文切换次数 | 5 次 | 1 次 | 80% |
| 代码质量(lint 通过率) | 91% | 96% | +5% |
| 测试覆盖率 | 62% → 68% | 62% → 83% | +15% |
| 并行文件修改 | 串行,逐个文件 | 最多 3 个文件并行 | --- |
需要说明的是,这项对比基于一个中等规模的项目。对于小型项目(3-5 个文件),差异不大;但对于大型项目(50+ 文件),子智能体的优势会更明显。
值得注意的点
子智能体不是万能的。我发现以下几种场景它并不适用:
- 高度耦合的修改:如果两个任务修改同一个函数,子智能体可能产生冲突
- 需要全局视野的决策:架构级决策还是需要主 Agent 统一判断
- 超短任务:30 秒就能改完的小修改,创建子智能体的开销反而更慢
五、上手建议
如果你也想试试子智能体模式,这里有几个实用建议:
1. 从独立模块开始
选择那些本来就具备"模块边界"的任务:写测试、更新文档、格式化代码、批量替换。这些任务天然适合并行。
2. 善用 CLAUDE.md
在项目根目录创建 CLAUDE.md,明确告诉主 Agent 什么场景该派子智能体:
markdown
## Sub-agent Delegation Rules
Delegatable tasks:
- Test generation and execution
- Code formatting and lint fixes
- Documentation updates
- Batch file operations
Non-delegatable:
- Architecture decisions
- Security-critical changes
- Breaking API changes
3. 监控执行日志
子智能体执行时,Claude Code 会打印类似 [Sub-agent-1] 的日志前缀。留意这些日志------如果某个子智能体卡住了,你可以手动介入。
4. 做好冲突预案
多个子智能体并行修改时,偶尔会发生文件冲突。建议在子智能体启动前,先确保所有文件已提交到 git(或 stash),这样冲突时可以快速回退。
六、总结
子智能体模式是 Claude Code 从"对话式编程"迈向"多智能体协作编程"的关键一步。从我的实战体验来看:
- 适合:独立模块的并行处理、测试生成、代码重构、文档维护
- 不适合:高度耦合的修改、架构决策、极简任务
如果你的项目已经有一定规模(10+ 文件),子智能体带来的效率提升是实打实的------省掉的不是几分钟,而是你被迫"等待 AI 思考"的次数。
下一步,我计划测试子智能体在 CI/CD 流水线中的表现,看看能不能让 Claude Code 在 PR review 中自动跑子智能体来审查代码。下篇见。
关注我,不错过后续 Claude Code 实战系列内容。欢迎在评论区分享你的子智能体使用体验。