较为实用的 Multi-Agent 编排

分享一下我个人认为比较实用的 Multi-Agent 编排实践。

目录

1. Coding 场景难在耦合

普通 Agent 工作流的输入和输出相对固定,一个节点处理完,再把结果交给下一个节点就行。Coding 不一样:代码库一直在变化,文件、接口、依赖和 Git 状态都可能被多个 Agent 同时修改。

只使用一个 Agent,任务时间一长,早期需求和中间决策容易被后续日志与代码淹没;一次启动七八个 Agent,如果没有提前划清边界,又很容易出现互相覆盖、反复返工和合并冲突。

多 Agent 同时写代码时,最容易遇到两种耦合。

第一种是代码耦合。两个 Agent 同时修改同一个文件、公共类型或者依赖配置,一个 Agent 的实现很可能覆盖另一个 Agent 的结果。

第二种是进度耦合。下游任务必须等上游功能完成才能开发,上游一旦延期,后面的 Agent 即使已经启动,也只能停下来等待。

这两个问题都不能靠“再增加一个管理 Agent”解决。管理层越多,任务会经过越多次转述。发生问题后,也很难判断错误到底来自最初的拆分、接口定义,还是某一层 Manager 的理解发生了偏差。

所以在 Coding 场景中,多 Agent 编排的关键仍然是两个字:解耦。

2. 三种角色已经够用

我目前最常用的是三个角色:Manager、Executor 和 Reviewer。

它们更像三种职责,而不是不断向下分叉的组织层级。

Manager

Manager 负责拆分任务、定义节点之间的协议、划分文件边界,并决定验收和合并顺序。

它不需要亲自完成所有代码,也不应该在每个模块下面继续创建新的 Manager。

Executor

Executor 一次只负责一个节点。

它应该拥有明确的输入、输出、写入范围和完成标准。超出节点边界的问题,交回 Manager 处理,而不是顺手修改其他模块。

Reviewer

Reviewer 独立检查 Executor 的实现,包括代码逻辑、测试结果以及接口是否符合约定。

Reviewer 可以提出问题,也可以要求 Executor 修改,但不要让两者同时改动同一批文件。否则执行者与审查者之间也会产生新的竞争。

前端、后端和数据库可以分别作为三个节点,但没有必要再为它们分别创建一套 Manager。一个全局 Manager,加上各节点的 Executor 和 Reviewer,通常已经足够。

3. 先拆节点,再启动 Agent

以一条自动化测试流程为例,可以拆成四个节点:

1
2
3
4
监控版本发布
→ 生成执行计划
→ 执行测试并生成报告
→ 提交 Bug 单

拆出四个节点还不算真正解耦。更重要的是定义它们之间如何交换信息。

例如,节点之间只传递约定好的 JSON:

1
2
3
4
版本信息.json
→ 执行计划.json
→ 测试报告.json
→ Bug 单请求.json

每个节点只依赖协议,不依赖其他节点的内部实现。

这样,即使“生成执行计划”还没有开发完成,“执行测试”节点也可以先构造一份符合协议的模拟数据,独立完成开发和测试。

一个节点是否真正解耦,可以用三个问题判断:

  • 没有上游成品时,能不能通过模拟数据运行?
  • 不启动其他节点时,能不能独立测试?
  • 替换内部实现后,能不能继续使用原来的协议?

如果这三个问题都能回答“可以”,不同节点才具备真正并行开发的条件。

4. 同一目录还是 Worktree

完成节点解耦后,可以选择两种执行方式。

方式 适用情况 代价
同一目录 文件边界清楚、任务规模较小 容易误改共享文件
Worktree 写入较多、节点较大、需要更强隔离 需要处理分支与合并

4.1 同一目录

如果每个节点都有独立目录,而且不会同时修改公共配置,可以直接在同一个工作区启动多个 Agent。

这种方式最直接,没有额外的分支和合并成本。Manager 只需要提前规定每个 Agent 能修改哪些文件。

一旦涉及依赖锁文件、公共类型或全局配置,就要谨慎使用。逻辑上已经解耦,不代表文件层面一定没有冲突。

4.2 Worktree

更稳健的方式,是为每个节点创建独立的 Git Worktree 和分支。

每个 Agent 在自己的目录中开发、测试和提交。节点完成后,再依次合入主干,并执行整体测试。

Worktree 提供的是文件和 Git 状态上的隔离,适合写入范围较大或者冲突风险较高的任务。

但它不能替代节点解耦。如果接口没有提前定义清楚,问题只会从“开发时互相覆盖”推迟到“合并时集中爆发”。

所以顺序仍然是:先完成协议解耦,再决定使用同一目录还是 Worktree。

5. 并行不等于全部同时开始

假设一条流程有四个节点,并不意味着必须立即启动八个 Agent,让四个 Executor 和四个 Reviewer 同时工作。

更合理的方式,是让不同节点并行推进,而每个节点内部保持基本顺序:

1
2
3
4
Executor 完成节点
→ Reviewer 独立检查
→ Executor 修正问题
→ Manager 验收并合并

不同节点的进度可以错开。某个节点进入 Review 时,另一个节点可能还在开发。

这样既保留了并行带来的速度,也避免为了追求 Agent 数量,把同一个节点变成多人同时写入的混乱现场。

实际执行时,我会尽量守住几个边界:

  • 一个 Agent 只拥有一个明确的写入范围;
  • 一个节点对应一组小而独立的提交;
  • 协议发生变化时,必须交回 Manager 统一处理;
  • 每个节点独立测试,合并后再执行整体测试;
  • Reviewer 默认先给出问题,不直接接管 Executor 的文件。

6. 收个尾

Multi-Agent 编排不是照搬公司的组织架构。层级更多、Agent 更多,并不一定意味着效率更高。

对 Coding 场景来说,目前较为实用的方式仍然是保持结构扁平:

Manager 管边界、协议和合并;Executor 管节点实现;Reviewer 管独立验证。

在此基础上,把系统拆成能够独立运行、独立模拟、独立测试的节点。边界足够清楚时,可以在同一目录并行;冲突风险较高时,就使用 Worktree 隔离。

真正有效的并行,不是让更多 Agent 同时动手,而是让它们即使同时工作,也不需要互相等待。