章节关键词:多 Agent 协作、Task Tool、父子会话、并行动任务、General Agent
章节字数:8,000+
阅读时间:约 25 分钟
///
PART 01
开篇:一个人能做的事有限,一群人能做的事无限
想象一下:
你是公司里唯一的工程师。老板说:「下周一要上线新功能。」
你一个人,既要写代码,又要 review 代码,又要写测试,又要部署上线。你忙得焦头烂额,但时间还是不够用。
你多么希望有一个人能帮你分担——
- 一个人专门写代码
- 一个人专门 review 代码
- 一个人专门写测试
- 一个人专门部署上线
可惜你请不起这么多人。
但你可以创建一个「AI 雇佣兵团队」。
///
PART 02
7.1 为什么一个人需要「Agent 团队」?
7.1.1 一个人的瓶颈
一个人的时间和精力是有限的。
当你独自工作时,你会发现:
瓶颈一:上下文切换
写代码写到一半,被叫去 review 代码。review 到一半,又要回来写代码。
每一次切换,你的大脑都需要重新加载上下文。这叫「认知负荷」。
传统工作流程的上下文切换:
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 写代码 │ → │ Review │ → │ 写测试 │
│ 45分钟 │ │ 30分钟 │ │ 45分钟 │
└─────────┘ └─────────┘ └─────────┘
↑ ↑
└──── 每次切换损失 10-15 分钟 ────┘
瓶颈二:串行执行
一个人一次只能做一件事。写代码的时候不能 review,review 的时候不能测试。
串行执行:
时间线 ──────────────────────────────────→
↓写代码↓review ↓写测试↓部署
1小时 1小时 1小时 1小时
= 总共 4 小时
瓶颈三:能力单一
一个人不可能同时是:
- 代码高手
- 安全专家
- 测试专家
- DevOps 专家
- 文档专家
但 AI Agent 团队可以——每个 Subagent 可以是各自领域的专家。
7.1.2 Agent 团队的优势
并行执行:
时间线 ──────────────────────────────────→
Agent A:写代码 ████████████
Agent B:review ████████████
Agent C:写测试 ████████████
Agent D:部署 ████████████
= 总共 1 小时(并行)
优势一:并行工作
多个 Agent 同时工作,总时间大幅缩短。
优势二:专业化分工
每个 Agent 专注自己的领域,成为「专家」。
优势三:无限扩展
只要你愿意,可以创建任意数量的 Agent。
///
PART 03
7.2 多 Agent 协作的三种经典模式
7.2.1 模式概览
在 OpenCode 中,多 Agent 协作有三种经典模式:
| 模式 | 图示 | 适用场景 |
|---|---|---|
| 顺序执行 | A → B → C | 任务有依赖,必须按顺序 |
| 并行执行 | A // B // C | 任务独立,同时进行 |
| 层级委托 | 主 → 子 → 孙 | 复杂任务,多层分解 |
7.2.2 模式一:顺序执行
planner → executor → reviewer
↑ ↑ ↑
规划者 执行者 审查者
流程:
- Planner Agent 制定计划
- Executor Agent 执行计划
- Reviewer Agent 审查结果
适用场景:
- 代码实现(写 → review → 修改)
- 文档创作(写 → 审阅 → 修订)
- 架构设计(评估 → 决策 → 实施)
示例:
任务:实现用户登录功能
步骤 1:Planner Agent 制定计划
「需要:
1. 创建用户模型
2. 实现认证服务
3. 创建登录 API
4. 添加单元测试」
步骤 2:Executor Agent 执行
「按照计划实现:创建用户模型...」
步骤 3:Reviewer Agent 审查
「发现安全问题:密码明文存储,需要加密」
7.2.3 模式二:并行执行
Agent A ──┐
Agent B ──┼──→ 汇总
Agent C ──┘
流程:
- 主 Agent 分解任务
- 多个 Subagent 并行执行
- 主 Agent 汇总结果
适用场景:
- 多个独立模块同时开发
- 代码审查多个文件
- 探索多个代码库
- 批量生成内容
示例:
任务:审查 10 个核心文件的质量
分解:
- 文件 1-3 → Subagent A
- 文件 4-6 → Subagent B
- 文件 7-10 → Subagent C
并行执行:
Subagent A:「文件 1-3 审查完成,发现 5 个问题」
Subagent B:「文件 4-6 审查完成,发现 3 个问题」
Subagent C:「文件 7-10 审查完成,发现 7 个问题」
汇总:
主 Agent:「共发现 15 个问题,其中 3 个严重问题...」
7.2.4 模式三:层级委托
主 Agent(CEO)
↓ 委托任务
┌─── Subagent A(部门经理)
│ ↓ 委托子任务
│ ┌─ Subagent A1(员工)
│ └─ Subagent A2(员工)
│
└─── Subagent B(部门经理)
↓ 委托子任务
┌─ Subagent B1(员工)
└─ Subagent B2(员工)
流程:
- 主 Agent 分配任务给 Subagent
- Subagent 再分解任务给更小的 Subagent
- 结果逐层上报汇总
适用场景:
- 大型系统开发
- 多团队协作项目
- 复杂的多层次任务
示例:
任务:重构整个电商系统
主 Agent 分配:
→ Subagent A:「负责订单模块重构」
→ Subagent A1:「负责订单服务」
→ Subagent A2:「负责订单数据库」
→ Subagent B:「负责用户模块重构」
→ Subagent B1:「负责用户服务」
→ Subagent B2:「负责用户认证」
→ Subagent C:「负责支付模块重构」
→ Subagent C1:「负责支付服务」
→ Subagent C2:「负责支付网关」
结果逐层汇总,最终主 Agent 输出完整的重构方案
///
PART 04
7.3 Task Tool:创建 Subagent 的核心机制
7.3.1 Task Tool 是什么?
Task Tool 是 OpenCode 中用于创建 Subagent 的核心工具。
它的本质是:
Task Tool 工作原理:
1. 主 Agent 定义任务
「帮我分析 src/users/ 模块」
2. Task Tool 创建 Subagent Session
分配独立环境,启动 AI
3. Subagent 执行任务
读取文件,分析代码
4. Subagent 返回结果
主 Agent 接收摘要
5. 主 Agent 继续处理
基于结果继续工作
7.3.2 Task Tool 的基本语法
在 OpenCode 中,使用 Task Tool 创建 Subagent:
> [Task Tool]
> 任务描述:分析 src/users/ 模块的架构
> 输出格式:架构报告
> 输出路径:.opencode/explore/user-module.md
7.3.3 50 次调用限制的理解
每个主 Session 最多创建 50 个 Subagent。
这个限制让很多人困惑:「50 个?太少了吧?」
但实际上,50 个已经非常足够了。
❌ 错误理解:
50 个 Subagent = 只能做 50 件事
✅ 正确理解:
50 个 Subagent = 50 个「大型任务槽」
正确用法:
1 个 Subagent 做 1 件大事
= 50 件大事
错误用法:
50 个 Subagent 各做 1 件小事
= 50 件小事(浪费了 Subagent 的能力)
7.3.4 Task Tool 的三大限制
限制一:无历史记忆
Subagent 没有之前对话的记忆,每次任务都需要完整信息。
❌ 错误示范:
主 Agent → Subagent:「继续上次的工作」
(Subagent 完全不记得上次是什么)
✅ 正确示范:
主 Agent → Subagent:「请分析 src/orders/ 模块,输出架构报告到指定路径」
(任务明确,完整描述)
限制二:有限上下文
Subagent 的上下文窗口比主 Agent 小,不能处理超大型任务。
Subagent 适合:
- 分析单一模块(10-50 个文件)
- 实现单个功能(1-5 个文件)
- 执行单一操作(1 次工具调用)
Subagent 不适合:
- 分析整个系统(1000+ 文件)
- 实现完整系统(100+ 文件)
- 多轮对话(需要上下文保持)
限制三:需要明确任务描述
Subagent 不能理解模糊的任务,必须给出精确的指令。
❌ 模糊任务:
> 帮我看看这个代码有什么问题
✅ 明确任务:
> 请审查 src/orders/order.service.ts 中的以下内容:
> 1. 是否有 SQL 注入风险
> 2. 是否有空指针异常
> 3. 错误处理是否完善
> 输出格式:检查清单 + 问题列表
///
PART 05
7.4 Subagent 的三大限制详解
7.4.1 限制一:无历史记忆
Subagent 每次运行都是从「空白」开始。
主 Agent Session:
用户:「我们讨论过...」
Agent:「我记得,上次你说...」
Subagent Session:
用户:「我们讨论过...」
Agent:「抱歉,我不记得之前发生了什么」
为什么这是限制?
如果你的任务需要「记住之前的上下文」,Subagent 无法胜任。
❌ Subagent 无法处理:
「继续上次没写完的代码...」
(Subagent 不记得上次是什么)
✅ Subagent 擅长处理:
「分析这个模块,输出报告」
(每次都是完整的新任务)
如何克服?
将需要「记忆」的内容写入文件,Subagent 通过读取文件来获取上下文。
解决方案:
1. 主 Agent 把上下文写入文件
2. Subagent 读取文件
3. Subagent 基于文件内容执行任务
7.4.2 限制二:有限上下文
Subagent 的上下文窗口比主 Agent 小。
主 Agent:完整上下文窗口(如 200K tokens)
Subagent:减半的上下文窗口(如 100K tokens)
为什么这是设计意图?
Subagent 被设计用来处理「单一、明确」的任务,不需要大量上下文。
✅ Subagent 的正确打开方式:
任务足够小,Subagent 能完整处理
= 主 Agent 分配一个「明确的小任务」
❌ Subagent 的错误打开方式:
任务太大,Subagent 上下文装不下
= 应该用主 Agent 而不是 Subagent
7.4.3 限制三:需要明确任务描述
Subagent 不能理解隐含的意图,必须有清晰的指令。
❌ 模糊指令:
> 帮我看看这个代码
✅ 清晰指令:
> 请审查 src/users/user.service.ts 的代码质量,
> 检查以下方面:
> 1. 代码可读性(命名、注释、结构)
> 2. 错误处理(异常捕获、日志记录)
> 3. 安全性(输入验证、权限检查)
> 4. 性能(数据库查询、循环优化)
> 输出格式:问题列表 + 严重程度评级
///
PART 06
7.5 General Agent:擅长复杂研究、多步骤任务
7.5.1 什么是 General Agent?
与 Subagent 不同,General Agent 是主会话中的「全能型」Agent。
General Agent(主会话):
✅ 完整上下文
✅ 完整历史记忆
✅ 可以多轮对话
✅ 可以读写文件
✅ 可以执行命令
✅ 知道所有之前的操作
Subagent(Task Tool 创建):
✅ 独立 Session
❌ 无历史记忆
❌ 有限上下文
❌ 任务单一明确
❌ 专注执行
7.5.2 什么时候用 General Agent?
| 任务类型 | 推荐 |
|---|---|
| 复杂架构设计 | General Agent |
| 多步骤调试 | General Agent |
| 需要回顾上下文 | General Agent |
| 开放性研究 | General Agent |
| 单一模块分析 | Subagent |
| 独立任务执行 | Subagent |
| 并行批量操作 | Subagent × N |
7.5.3 General Agent vs Subagent 的协作
最佳实践:General + Subagent 协作
General Agent(主)
├── 规划任务
├── 分解任务
├── 分派给 Subagent
└── 汇总结果
│
├── Subagent A → 并行执行独立任务
├── Subagent B → 并行执行独立任务
└── Subagent C → 并行执行独立任务
///
PART 07
7.6 Task Tool 的委托策略
7.6.1 委托策略矩阵
根据技术底稿,不同任务应该委托给不同类型的 Agent:
任务类型 → 委托对象
─────────────────────────────────────────────────────
复杂功能规划 → planner
代码刚写完需要审查 → code-reviewer
Bug 修复或新功能开发 → tdd-guide
架构决策 → architect
安全敏感代码审查 → security-reviewer
自主循环执行/监控停滞 → loop-operator
Harness 配置调优 → harness-optimizer
探索/搜索代码库 → Subagent(Haiku)
简单编辑 → Subagent(Haiku)
多文件实现 → 主 Agent(Sonnet)
复杂架构 → 主 Agent(Opus)
安全分析 → 主 Agent(Opus)
7.6.2 模型选择策略
Subagent 可以使用不同的模型,以优化成本:
{
"model": "sonnet", // 主 Agent:日常默认
"env": {
"MAX_THINKING_TOKENS": "10000", // 控制思考 token
"CLAUDE_CODE_SUBAGENT_MODEL": "haiku" // Subagent:80% 便宜
}
}
推荐配置说明:
| 配置 | 默认 | 推荐 | 效果 |
|---|---|---|---|
| model | opus | sonnet | 60% 成本降低 |
| CLAUDE_CODE_SUBAGENT_MODEL | opus | haiku | 80% Subagent 成本降低 |
为什么 Subagent 用 Haiku?
因为 Subagent 处理的任务通常比较简单,不需要 Opus 的深度推理能力。
Haiku 适合 Subagent:
- 快速搜索文件
- 简单代码分析
- 单一模块理解
- 格式化输出
Haiku 不适合:
- 复杂架构设计
- 安全漏洞分析
- 多文件重构
///
PART 08
7.7 实际案例:用 4 个 Agent 并行完成代码审查 + 重构 + 测试
7.7.1 项目背景
你负责的订单模块需要进行以下工作:
- 代码审查:检查现有代码的质量问题
- 功能重构:优化订单状态机
- 单元测试:补充测试覆盖率
- 性能优化:解决 N+1 查询问题
按照传统方式,你需要 4 个小时(每项 1 小时)。
用 Agent 团队,你只需要 1 小时。
7.7.2 第一步:主 Agent 规划任务
> 我需要对订单模块进行以下改进:
> 1. 代码审查(发现质量问题)
> 2. 状态机重构(优化设计)
> 3. 单元测试(补充覆盖率)
> 4. 性能优化(解决 N+1)
>
> 请用 Subagent 并行处理这些任务。
7.7.3 第二步:创建 4 个 Subagent 并行执行
主 Agent 创建 4 个 Subagent:
Subagent A(代码审查):
「审查 src/modules/order/ 目录下的所有文件,
输出:问题列表 + 严重程度评级 + 建议修复方案」
Subagent B(状态机重构):
「分析 src/modules/order/state-machine.ts,
输出:当前设计问题 + 优化方案 + 实施步骤」
Subagent C(单元测试):
「分析 src/modules/order/ 的代码,
输出:缺失的测试用例清单 + 建议的测试覆盖点」
Subagent D(性能优化):
「分析 src/modules/order/ 的数据库查询,
输出:N+1 查询问题清单 + 优化 SQL + 预期性能提升」
7.7.4 第三步:Subagent 并行执行
时间线(并行):
0分钟 ──────────────────────────────────→ 60分钟
│
├─ Subagent A:审查代码 ████████████ ✓
├─ Subagent B:分析状态机 ████████████ ✓
├─ Subagent C:规划测试 ████████████ ✓
└─ Subagent D:分析性能 ████████████ ✓
↑
同时进行
7.7.5 第四步:汇总结果
主 Agent 收集并汇总:
Subagent A(代码审查):
✅ 发现 12 个问题
├── 🔴 严重(阻塞):2 个
│ - 密码明文存储
│ - SQL 注入风险
├── 🟡 中等:5 个
│ - 缺少错误处理
│ - 日志记录不规范
└── 🟢 建议:5 个
- 命名不规范
- 注释缺失
Subagent B(状态机重构):
✅ 发现 3 个设计问题
├── 状态转换规则不清晰
├── 缺少状态验证
└── 事件定义冗余
✅ 输出优化方案
Subagent C(单元测试):
✅ 缺失 15 个测试用例
├── 4 个核心业务逻辑
├── 6 个边界条件
└── 5 个异常处理
Subagent D(性能优化):
✅ 发现 4 个 N+1 查询
├── 订单列表查询用户信息
├── 订单查询商品详情
└── 批量查询重复执行
✅ 优化后预期提升 70% 性能
7.7.6 第五步:主 Agent 协调执行
主 Agent 基于汇总结果,协调执行:
步骤 1:优先修复阻塞问题
→ 派发 Subagent 修复:密码加密、SQL 注入
步骤 2:执行状态机重构
→ 派发 Subagent:基于优化方案重构
步骤 3:补充单元测试
→ 派发 Subagent:基于测试清单编写测试
步骤 4:性能优化
→ 派发 Subagent:优化 N+1 查询
步骤 5:最终 review
→ 主 Agent 综合验收
7.7.7 最终成果
| 工作项 | 传统方式 | Agent 团队 |
|---|---|---|
| 代码审查 | 1 小时 | 15 分钟(并行) |
| 状态机重构 | 1 小时 | 15 分钟(并行) |
| 单元测试 | 1 小时 | 15 分钟(并行) |
| 性能优化 | 1 小时 | 15 分钟(并行) |
| 总计 | 4 小时 | 1 小时 |
效率提升:4 倍!
///
PART 09
7.8 并行执行的最佳实践
7.8.1 任务分解原则
原则一:任务必须独立
并行任务之间不能有依赖关系。
❌ 错误分解:
Task A:「读取数据」
Task B:「处理 A 的数据」 ← 依赖 A,不能并行
✅ 正确分解:
Task A:「读取数据」
Task B:「读取配置」
Task C:「读取用户信息」
(三个任务独立,可以并行)
原则二:任务粒度要合适
任务太小,数量太多(浪费资源)。任务太大,无法并行。
❌ 任务太小:
10 个文件 → 拆成 10 个 Task
(Task 创建有开销,不值得)
✅ 任务合适:
10 个文件 → 拆成 3 个 Task(3+3+4)
(每个 Task 3-4 个文件,平衡良好)
❌ 任务太大:
100 个文件 → 1 个 Task
(太大,无法并行,Subagent 上下文可能不够)
原则三:明确输出格式
每个 Subagent 必须有明确的输出格式。
✅ 好的任务描述:
「分析 src/users/ 模块,输出:
1. 模块结构(文件列表)
2. 每个文件用途说明
3. 关键函数清单
4. 依赖关系图
输出到:.opencode/explore/users-module.md」
❌ 差的任务描述:
「帮我看看这个模块有什么问题」
(太模糊,输出不可预测)
7.8.2 并行数量控制
不是越多越好,要考虑系统资源。
推荐并行数量:
- 小项目(< 10 文件):2-3 个 Subagent
- 中项目(10-50 文件):3-5 个 Subagent
- 大项目(50+ 文件):5-10 个 Subagent
注意:50 次调用限制是总量,不是单次并行的数量
7.8.3 结果汇总策略
策略一:统一输出格式
让所有 Subagent 按相同格式输出,方便汇总。
Subagent A:「发现 5 个问题,格式:问题+级别+建议」
Subagent B:「发现 3 个问题,格式:问题+级别+建议」
Subagent C:「发现 7 个问题,格式:问题+级别+建议」
主 Agent 汇总:
「共发现 15 个问题,按严重程度分类:
🔴 严重:3 个
🟡 中等:7 个
🟢 建议:5 个」
策略二:优先级排序
主 Agent 汇总时,按优先级排序处理。
汇总结果:
1. 🔴 严重问题 1(阻塞上线)
2. 🔴 严重问题 2(安全风险)
3. 🟡 中等问题 1(功能缺陷)
...
///
PART 10
7.9 常见问题与解决方案
Q1:Subagent 返回的结果太简略怎么办?
A:在任务描述中明确要求详细的输出格式。
❌ 模糊任务:
> 帮我分析这个模块
✅ 详细任务:
> 帮我分析 src/orders/ 模块,输出包含:
> 1. 模块结构(文件树)
> 2. 每个文件用途(1-2 句话)
> 3. 核心函数列表(函数名+参数+返回值)
> 4. 模块依赖关系
> 5. 关键设计模式识别
> 6. 建议的阅读顺序
> 输出格式:Markdown 文档
Q2:Subagent 之间需要通信怎么办?
A:通过主 Agent 中转。
Subagent A → 主 Agent → Subagent B
示例:
1. Subagent A 分析完毕,发现需要调用某个 API
2. Subagent A 把发现写入文件
3. 主 Agent 读取文件,发现需要让 Subagent B 处理
4. 主 Agent 创建 Subagent B,读取 Subagent A 的输出
5. Subagent B 基于 Subagent A 的结果继续工作
Q3:50 个 Subagent 用完了怎么办?
A:清理已完成的 Subagent,重新使用。
每个 Task Tool 调用 = 1 个 Subagent 配额
✅ 用完配额的方法:
1. 等待当前任务完成
2. Subagent 结果已汇总到主 Agent
3. 继续下一个任务(可以用新的 Subagent)
❌ 错误方法:
创建大量微小 Task(每个 Task 只做 1 件事)
= 50 次调用只能做 50 件小事
Q4:Subagent 执行失败怎么办?
A:设置重试机制和错误处理。
Task Tool 调用时可以设置:
- max_attempts:最大重试次数
- timeout:超时时间
- fallback:失败时的备选方案
///
PART 11
7.10 本章小结
核心知识点
| 知识点 | 关键内容 |
|---|---|
| Agent 团队 | 多个 Subagent 并行工作,效率提升 4 倍 |
| 三种协作模式 | 顺序执行、并行执行、层级委托 |
| Task Tool | 创建 Subagent 的核心机制,50 次限制 |
| Subagent 三大限制 | 无历史记忆、有限上下文、需要明确任务描述 |
| General Agent | 适合复杂研究、多步骤任务 |
| 委托策略 | 不同任务委托给不同的 Agent |
关键术语
| 术语 | 定义 |
|---|---|
| Subagent | 主 Agent 派生的独立执行进程 |
| Task Tool | 创建 Subagent 的核心工具 |
| Session 隔离 | Subagent 无历史记忆,每次新开始 |
| 并行执行 | 多个 Subagent 同时工作 |
| 顺序执行 | 任务有依赖,按顺序执行 |
| General Agent | 主会话中的全能 Agent |
| Haiku | Subagent 推荐模型(80% 便宜) |
三种协作模式对比
| 模式 | 图示 | 适用场景 |
|---|---|---|
| 顺序执行 | A → B → C | 任务有依赖 |
| 并行执行 | A // B // C | 独立任务 |
| 层级委托 | 主 → 子 → 孙 | 复杂多层次 |
行动建议
- 立即行动(10 分钟):体验并行 Subagent:
- 选择一个多模块任务
- 创建 2-3 个 Subagent 并行执行
- 下一步(30 分钟):完整 Agent 团队流程:
- 主 Agent 规划
- 分解任务
- 并行执行
- 汇总结果
- 协调修复
- 持续优化:建立团队协作模板
- 代码审查 Agent 模板
- 重构规划 Agent 模板
- 测试生成 Agent 模板
///
PART 12
下章预告
*第 8 章:Skill 系统——把老员工的脑子「复制」进 AI*
///
*本章完。*
THANKS FOR READING
🦐 龙虾 · OpenClaw 技术分享
夜雨聆风