多 Agent 协作:并行改不同文件与冲突处理

多智能体(Multi-Agent)并行能把「四个模块同时开工」压到一轮对话的时间里,但它只在一种前提下成立:每个智能体(Agent)的改动集合互不相交。这条边界一旦破了,省下的时间会在合并与调试阶段成倍还回去。

可行边界:文件级隔离

并行方式是否可行原因
每个 Agent 独占若干完整文件可行最稳,文本冲突概率接近零
每个 Agent 独占一个包或目录可行只要不跨包修改接口
每个 Agent 独占一层(实现/测试/文档)有条件可行依赖接口已冻结
两个 Agent 改同一文件的不同函数不可行后写覆盖先写,版本控制救不了
两个 Agent 同时改接口与实现不可行语义耦合,自动合并会「合上但不对」

结论:并行单位是文件,不是函数、不是行、更不是「谁先想好谁先改」。

共享文件为什么必然冲突

  • 接口与类型定义:所有实现都要引用,一处签名变更牵动全部并行方。
  • 路由表、注册表、依赖注入容器:集中式清单,双方各加一行,位置还相邻。
  • 配置与常量:枚举值、错误码、超时阈值,容易各自新增出冲突编号。
  • 依赖清单与锁文件(lockfile):几乎必然文本冲突,且合并后必须重新安装校验。
  • 数据库迁移文件序号:两个 Agent 都写 0007_,文件本身不冲突,执行顺序却错了。
  • 文档与变更日志(CHANGELOG):都在同一位置追加。

比文本冲突更麻烦的是「合并成功但语义错误」:两个 Agent 都基于旧基线插入路由,顺序错了,编译期毫无提示,上线才暴露。

隔离手段

手段怎么做代价
文件集合预分配开工前列出每个 Agent 的独占文件清单需要一次人工盘点
分支(branch)每个 Agent 一条特性分支仍需处理共享文件
工作树(git worktree)每个 Agent 一棵独立工作树,互不干扰占磁盘,收工要清理
目录边界按模块目录划分归属跨模块需求不好切
任务队列共享文件相关的改动排队串行执行牺牲部分并行度
只读角色调研型 Agent 不写文件产出需人工转写
# 三个 Agent 各占一棵工作树
git worktree add ../wt-api    -b feat/api-agent
git worktree add ../wt-worker -b feat/worker-agent
git worktree add ../wt-docs   -b docs/readme-agent
git worktree list              # 收工时确认没有遗漏
git worktree remove ../wt-docs

共享文件串行化:接口先行

  1. 由单人(或一个「地基」Agent)先改完共享文件:接口签名、类型、常量、路由占位、迁移序号。
  2. 冻结基线并打临时标签,把该提交作为所有并行 Agent 的共同起点。
  3. 并行 Agent 只改自己独占的文件;确需改共享文件时停下,提交变更请求而不是直接动手。
  4. 编排者按预定顺序合入,每合一个就跑一次编译与测试,绝不批量合。

冲突后的合并与验证流程

1. 立即冻结:双方停止继续写冲突文件,避免边合边改
2. 逐个合入:一次只合一个 Agent 的分支,不一次性 merge 两个
3. 手工判语义:接口签名、错误码、枚举值、默认值逐条对齐,不信自动合并
4. 重新生成:锁文件、代码生成产物、迁移汇总文件重跑生成命令
5. 验证:编译 + 全量测试 + 契约测试 + 真实启动一次进程
6. 回写:把冲突根因写进规则文件(AGENTS.md)的禁止项,避免重复踩

冲突高发点与预防

位置预防做法
接口与类型定义先冻结,变更走变更请求
路由与注册表由地基步骤一次性加好占位
配置与常量预分配编号区间,禁止各自递增
依赖清单与锁文件只允许一个 Agent 改,合并后统一重装
数据库迁移序号开工前分配好序号段
文档与变更日志收尾阶段由单人统一撰写

分工切法

切法适合场景风险
按目录/模块模块间依赖很弱公共代码仍会撞车
按层(实现/测试/文档)接口已冻结测试与实现口径不一致
按关注点(功能/性能/安全)审查类任务同一文件被多方修改
实现 + 验证高风险改动需要额外的验证时间

独立验证者

验证型 Agent 只读、不改代码,职责是从零复现构建与测试、核对 diff 与说明是否一致、主动找未覆盖的边界与异常分支。写代码的 Agent 不能兼任验证者:同一份上下文会沿用自己的假设,看不出自己的错。

度量与复盘

  • 关注四个数:冲突文件数、每个 Agent 的返工次数、合并窗口时长、集成后首次测试通过率。
  • 冲突率上升说明共享文件划分不合理,而不是 Agent 不够聪明——先改划分方式,再谈模型。
  • 每次冲突都在规则文件里留一条禁止项,两三轮之后并行冲突会显著减少。

小结:多 Agent 协作的收益来自文件级互斥,而不是并发数量。开工前冻结接口等共享文件、给每个 Agent 划定独占文件集合、用工作树与分支隔离现场,冲突后再按「冻结、逐个合入、手工判语义、重新生成、全量验证」的固定流程收尾,并行才真正省时间。

笔记加载中…