多 Agent 分工原则:什么时候单 Agent,什么时候并行,什么时候路由
这页不是在讲“多开几个 Agent 看起来更厉害”,而是在回答一个更实际的问题:
在真实工作里,任务到底该不该拆?如果拆,应该怎么拆,谁负责收口?
对我现在的场景来说,这不只是一个 AI 概念问题,而是会直接影响:
- OpenClaw 的 agent 路由怎么设计
- Skill 应该怎么写触发条件
- 代码任务什么时候该并行,什么时候反而该收回单线程
- 一个多 Agent 系统能不能长期稳定运行
一、先说结论:不要先问“能不能多 Agent”,先问“这件事的结构是什么”
很多人一上来就想:
- 这个任务复杂,要不要多开几个 Agent?
- 这个需求大,要不要并行?
- 这个 PR 长,要不要一人查安全、一人查测试、一人查性能?
但真正更重要的问题其实是 3 个:
- 这件事是不是强顺序任务?
- 子任务之间能不能独立?
- 最后谁负责 merge 和对结果负责?
如果这 3 个问题没想清楚,多 Agent 只会把混乱放大。
所以我的总原则是:
先设计边界,再增加 Agent 数量。
二、什么时候应该坚持单 Agent
单 Agent 不是能力弱,而是很多时候它更稳。
适合单 Agent 的场景
1. 需求还模糊
例如:
- 用户只说“这个逻辑看起来不太对”
- 问题还没定位到模块
- 还没搞清楚到底是前端、后端还是配置问题
这时如果直接 fan-out,多个 Agent 只会带着不同猜测各跑各的,最后主 Agent 还要花更多时间收口。
2. 步骤强依赖
例如:
- 先理解业务规则
- 再决定数据结构
- 再决定改动方案
- 再补测试
这种就是典型 pipeline,而不是并行任务。硬拆只会让后面的 Agent 在错误假设上浪费时间。
3. 写入边界分不清
只要多个 Agent 可能改同一个文件、同一段逻辑、同一个状态机,就先别并行写。
如果 ownership 写不清楚,多 Agent 节省的时间,最后几乎都会在冲突解决里还回去。
我自己的判断
在编码任务里,单 Agent 应该是默认形态,多 Agent 是有条件启用的例外形态。
三、什么时候适合并行 subagents
并行不是为了显得高级,而是为了两件事:
- 隔离上下文噪声
- 并行验证独立子问题
适合并行的场景
1. 多条调查线可以独立推进
例如一个线上问题可能涉及:
如果这些线索可以先独立探索,再统一汇总,那就适合开只读 explorer。
2. PR review 的维度天然独立
例如:
这些维度通常可以并行看,因为它们不是先后依赖关系,而是并列检查维度。
3. 主上下文已经快被噪声淹没
例如:
- 长日志
- 大范围 grep
- 多模块调用链
- 大量测试输出
这时候 subagent 的价值,不只是“多一个脑子”,而是把噪声隔离出去,避免主上下文被污染。
并行时最重要的原则
原则 1:优先并行“读”,谨慎并行“写”
最稳的做法通常是:
- 第一阶段:并行只读探索
- 第二阶段:单 Agent 写 patch
- 第三阶段:只读 reviewer 复核
这样能最大化利用并行,又避免多处写入冲突。
原则 2:必须有 reducer
无论是主 Agent 还是 lead Agent,必须明确有人负责:
没有 reducer 的多 Agent,只是多份意见,不是一个系统。
四、什么时候适合 Gateway routing,而不是 task fan-out
这是我看完材料后一个特别强的判断:
很多“多 Agent”问题,根本不是任务拆分问题,而是入口隔离问题。
典型场景
同一个系统可能同时接收:
- 企业微信私聊消息
- Slack 的运维频道消息
- Telegram 的个人工作消息
- Discord 的公开讨论
这些消息虽然都进到“AI 系统”,但它们并不应该进入同一个 Agent。
因为它们天然有不同的:
这时更应该做的是 routing
例如:
- 运维群消息 → ops agent
- 私人研发消息 → deep work agent
- 家庭或低风险入口 → low-privilege assistant
这里的重点不是“几个 Agent 一起协作”,而是:
不同入口,先进入不同边界。
这其实更接近 OpenClaw 的核心价值。
我的判断
对 OpenClaw 来说,最重要的多 Agent 价值很可能不是 subagent 并行,而是:
也就是说,它更像 Agent 网关 / Agent 操作系统,而不只是一个并行器。
五、什么时候需要 durable board / 队列,而不是一次性 subagent
不是所有任务都该在一个 turn 内完成。
适合 durable board 的场景
1. 任务要跨天
例如:
- 两天的调研报告
- 要等待他人输入
- 要多轮 review
- 要追踪阻塞状态
2. 任务需要重试和 handoff
例如:
- 某个步骤失败了要 retry
- 某部分先 blocked
- 后续换另一个 agent / 人来接手
3. 任务需要审计轨迹
例如:
- 谁做了什么
- 什么时候被阻塞
- 为什么改了方向
- 哪个结论还待验证
这类任务的关键不是并行,而是状态管理
这时就不该再把所有事情都塞进一次性 subagent。更合理的是:
- board 管生命周期
- task 管状态
- comment / handoff 管协作
- 局部子任务里再适度并行
一个简单判断法
- 几十秒到几分钟能结束 → 倾向 subagent
- 需要跨 turn、跨天、等待人类 → 倾向 durable board
六、什么时候适合 team mesh,而不是星型结构
并不是所有问题都需要 Agent 之间互相通信。
大多数场景:星型就够了
也就是:
- 主 Agent 派 worker
- worker 各自执行
- 结果回到主 Agent
- 主 Agent reduce
适合:
- PR review
- 多条资料线并行检索
- 多模块独立只读调查
只有在“多假设互相挑战”时,team mesh 才有价值
例如生产登录故障,可能同时涉及:
- 前端状态
- token 签发
- session 存储
- 缓存
- 部署配置
这种时候,一个 Agent 顺着一条线查,很容易过早锚定。
多个 teammate 分头验证、互相反证,覆盖面才会更好。
但代价也很明确
- 消息更多
- 中间状态更多
- 协调成本更高
- 结论冲突更多
- 更容易出现“大家都在忙,但没人真正负责最后结果”
所以我的原则是:
team mesh 只用于多假设问题,不要拿它处理普通并行任务。
七、多 Agent 最常见的 7 个反模式
1. 把“复杂”误当成“适合并行”
复杂不等于可拆。强顺序任务依然应该串行推进。
2. 不写 delegation contract
只说一句“你去修一下”“你帮我 review 一下”,等于把不完整需求丢给新同事。
3. 多个 Agent 写同一片区域
没有 ownership 的并行写入,几乎一定会翻车。
4. 没有 reducer
没人负责最终整合时,多 Agent 只会输出多份不一致意见。
5. 把长任务当 RPC,把短任务做成队列
长任务需要 durable state,短任务需要轻量 fork/join,不能反着用。
6. 权限过宽
review agent 不该能乱写文件,低风险入口不该拿到危险 shell。
7. 没有观测和审计
不知道谁调了谁、传了什么 context、用了什么工具、卡在哪一步,多 Agent 就不可维护。
八、一个我会长期沿用的选择顺序
以后我做多 Agent 设计时,会按下面这个顺序问:
第一步:单 Agent 能不能解决
如果能,先别拆。
第二步:主上下文会不会被噪声污染
如果会,优先考虑只读 explorer。
第三步:子任务能不能独立
不能独立就别并行。
第四步:结果必须本轮返回吗
- 必须 → fork/join
- 不必须 → background job
- 要跨天 / 等人 → durable board
第五步:Agent 之间需要互相挑战吗
第六步:是否会并行写文件
只要会写,就先写 ownership。
第七步:这是任务拆分问题,还是入口隔离问题
如果本质是多渠道、多身份、多权限,那先做 routing,不要急着做 fan-out。
第八步:失败后怎么恢复
能不能 retry、block、handoff、审计,这决定系统是不是能长期用。
九、一个真正有用的委派模板
如果只想留下一个以后能反复用的模板,我会保留这个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| 角色:
你是只读 explorer / scoped implementer / reviewer。
目标:
你要回答什么,完成什么,边界是什么。
上下文:
项目路径、相关文件、错误现场、用户目标、已有判断。
允许动作:
能读哪些文件,能不能跑命令,能不能写文件,能不能联网。
Ownership:
如果能写,只能写哪些目录或文件。
禁止动作:
不要改哪些文件,不要继续 spawn,不要问用户,不要做额外重构。
输出格式:
返回 findings / patch summary / test result / confidence / open questions。
停止条件:
什么情况下算完成,什么情况下应该停止并报告阻塞。
|
这个模板看起来普通,但它其实把最关键的 5 件事说清楚了:
没有这些,再炫的多 Agent 架构最后也容易变成随机并行。
十、最后的工作化结论
如果把这套原则落回我自己的系统,我会这样理解:
对 OpenClaw
优先把它当:
而不是先把它当“多 Agent 同时思考平台”。
对 Codex / Claude Code
优先把 subagent 当:
- 上下文隔离器
- 并行只读探索器
- 局部责任明确的 worker
而不是“任务一复杂就自动 fan-out”的默认解。
对我的工作流
最重要的不是“多 Agent 数量”,而是这 4 个东西是否清楚:
十一、落到具体工具:OpenClaw、Codex、Claude Code 应该怎么用
下面这部分,我更关心“怎么落地”,而不是“概念上怎么分类”。
1. 在 OpenClaw 里怎么用
OpenClaw 最该优先发挥的,不是“并行思考”,而是下面 4 件事:
- 路由:不同入口先进入不同 agent
- 隔离:不同 agent 有不同 workspace、session、工具边界
- 后台执行:慢任务、跨 turn 任务、长时间任务放到 background subagent
- 编排外部 harness:需要时接 Codex、Claude Code、Cursor 等外部执行器
适合 OpenClaw 的场景
- 多渠道消息入口
- 不同身份 / 风险等级 / 权限等级的隔离
- 后台调研、异步任务、需要稍后回来汇报的任务
- 个人工作流与团队工作流同时存在的系统
在 OpenClaw 里最容易犯的错
- 把所有入口都塞进同一个万能 agent
- 还没做好路由和权限边界,就急着做复杂 subagent 协作
- 把 background run 当成普通对话继续追上下文,结果用户和系统都混乱
我会怎么用
- 企业微信 / Telegram / Slack 等入口先做 agent routing
- 高噪声慢任务优先放后台,不要阻塞主对话
- subagent 只在确实需要隔离上下文或异步推进时启用
2. 在 Codex 里怎么用
Codex 的强项是:
- 显式授权并行
- 子任务责任明确
- 主 agent 统一 reduce
- 适合代码探索、定界 patch、审查分工
适合 Codex 的场景
- PR review
- 多条只读调查线并行
- 已知边界的局部实现
- 代码库里高噪声探索任务
在 Codex 里最稳的打法
- explorer 负责只读找证据
- worker 只改明确 ownership 范围
- reviewer 只读复核
- main agent 统一收口
在 Codex 里最容易犯的错
- 用户没授权并行,却默认它会自动 fan-out
- 多个 worker 同时改同一片代码
- 想让 subagent 自己协调 merge,导致责任不清
我会怎么用
- 小任务默认单 Agent
- 需要并行时明确写:谁只读、谁可写、谁负责 synthesize
- 能按目录 / 模块拆 ownership,就并行;拆不清就别并行写
3. 在 Claude Code 里怎么用
Claude Code 的关键不是“会不会自动叫 subagent”,而是:
- description 写得像不像触发条件
- 工具权限有没有收紧
- team 模式有没有明确 ownership 和 lead
适合 Claude Code 的场景
- description 驱动的专家 agent
- 局部审查型角色:security-reviewer、test-reviewer、docs-editor
- 需要 Explore / Plan / General-purpose 分层的任务
- 多假设问题下的 team 模式
Claude Code 普通 subagent 最适合做什么
- 探索
- 局部 debug
- 日志分析
- 安全 review
- 测试 review
什么时候才值得用 Agent Teams
- 故障原因存在多个强竞争假设
- teammate 之间互相反证比单纯并行更重要
- 有明确 lead 负责收口
在 Claude Code 里最容易犯的错
- description 写太泛,导致乱触发
- team 开起来很热闹,但没有明确 ownership
- worktree / batch 没隔离好就并行写 repo
我会怎么用
- 普通 subagent 默认写成“触发条件 + 检查维度 + 禁止修改文件”
- team 只用于多假设故障,不用来处理普通并行任务
- repo-wide migration 优先用 worktree / batch + 文件边界 ownership
十二、什么时候绝对不要乱并行
这部分我想单独强调,因为它最容易被忽略。
1. 需求还没澄清时
需求模糊时并行,只会把模糊同步放大。
2. 关键设计还没定时
例如数据模型、状态机、接口契约还没定,后面所有 worker 都会建立在不稳定前提上。
3. 多个 worker 会写同一片区域时
这是并行写最容易翻车的地方。没有 ownership,就不要并行写。
4. 用户真正需要的是一个清晰判断,而不是 4 份原材料时
这种时候更需要一个强 reducer,而不是更多 worker。
5. 你只是因为“任务看起来大”而焦虑时
很多并行冲动,本质不是任务结构需要,而是人类看到复杂任务后的心理补偿。
一句话总结
多 Agent 不是越多越好,而是边界越清楚越好。
先设计路由、上下文、权限、ownership 和 merge,再决定要不要增加 Agent 数量。
这是一个不炫,但非常工程的顺序。
也是更适合长期运行的顺序。