多个 AI 会话同时改一个项目,最容易被看见的问题是 Git 冲突,最容易被忽略的问题却是:代码没有冲突,任务已经互相踩了。
一个会话调整接口字段,另一个会话继续按旧字段补页面;一个会话修改测试夹具,另一个会话把随之出现的失败当成业务缺陷修复。等到合并时,几份 diff 单独看都说得通,放在一起却无法满足同一套需求。
因此,并行使用编程 Agent,需要把三件事交代清楚:谁能改哪里、每个会话现在处于什么状态、哪些成果必须等待其他任务才能确认。 会话数量本身不能证明效率提升;如果任务之间耦合很强,协调成本可能抵消并行带来的收益。
一、从"开了几个窗口"转向"有哪些任务在流转"
给定资料中的《GitHub - Snailclimb/AIGuide: AI 应用开发、AI 编程实战与面试指南,涵盖 LLM、Agent、RAG、MCP、Claude Code、Codex 等核心技术与工程实践。 · GitHub》列出了"Claude Code Agent View:多会话并行管理实战",并将其关注点概括为多个 Agent 会话的状态、权限确认和任务进度管理。
这条资料提供了一个有用的问题入口。不过,所给内容是目录介绍,不能据此推断 Agent View 具备哪些具体的自动协调能力。下面的清单是围绕这些问题整理的协作建议,可以用于不同编程 Agent 的并行任务安排。
管理时,建议以任务编号为中心组织信息。窗口可能被关闭、会话可能被替换,但任务的目标、修改范围和依赖关系需要持续保留。
一张简单的任务表就能承担这个作用:
| 任务 | 目标与修改范围 | 当前状态 | 依赖与待确认事项 |
|---|---|---|---|
| T1 | 实现查询接口,修改服务与接口测试 | 执行中 | 需确认空结果的返回约定 |
| T2 | 接入查询页面,修改页面与组件测试 | 等待依赖 | 等待 T1 的接口契约确认 |
| T3 | 检查现有调用方,输出受影响位置 | 只读分析完成 | 结果交给 T1、T2 复核 |
这是一个假设示例,不代表实际项目结果。它想说明的是:"在运行"只是会话状态,"可以被其他任务依赖"才是协作状态。
二、按文件和共享约定划边界,让分工可以检查
《AI 编程:开发者实用指南》在"构建与集成"阶段明确提出,AI 可以把已批准的方向转化为文件级计划,实现限定范围的变更并更新关联测试;人的职责包括确认设计被正确表达,以及保持所有权边界不被破坏。
把这一点用于并行协作,任务描述就不能只停留在"你改后端、你改前端"。应当进一步写清:
- 允许修改的文件或目录:包括实现文件、测试文件和必要文档。
- 允许读取的共享内容:例如类型声明、公共配置、已有调用方。
- 共享文件的修改负责人:例如 API 契约、依赖清单、锁文件、数据库迁移文件。
- 需要重新协调的情况:例如必须新增公共字段,或必须修改其他任务负责的模块。
- 交付标准:说明预期行为,以及用于判断完成的检查方式。
目录分离也不等于职责独立。前端和后端可能修改完全不同的文件,却共同依赖接口字段、错误码和分页语义。这些共享约定同样需要明确负责人。
可以把下面的模板交给每个会话:
text
任务编号:T2
目标:让查询页面接入已确认的查询接口
基线:记录开始任务时的提交标识
可修改:
- 查询页面及其局部组件
- 对应组件测试
共享约定:
- 接口字段以已确认的契约文件为准
- 公共类型由 T1 负责修改
依赖:
- T1 确认空结果与错误响应的格式
越界处理:
- 需要修改公共类型时,记录原因并提交协调
- 获得范围调整后再实施相关修改
交付:
- 变更提交
- 检查结果
- 尚未验证的集成行为
这份计划应足够具体,让另一个人能对照 diff 判断是否越界,同时保留实现细节上的自由。
三、隔离工作区,让成果有明确归属
多个会话直接修改同一个工作目录时,一个会话可能把另一个会话尚未完成的文件当成既有代码,也可能运行测试时读到不断变化的内容。
对于确实需要同时写代码的任务,可以考虑每个任务使用独立分支和工作区,例如通过 Git worktree 分离目录。这样,每个任务的 diff、提交和检查结果更容易归属。
工作区隔离仍有边界:
- 分支可能从不同版本的基线出发。
- 两个任务可能分别修改同一接口的提供方和调用方。
- 测试可能共同使用数据库、端口、缓存或临时目录。
- 公共依赖升级可能让另一个任务原先通过的检查失去代表性。
所以,交接时除了提交标识,还要记录基线,以及检查使用的环境。如果多个任务共用测试资源,应约定资源分配方式,避免把环境干扰误判为代码问题。
四、把进度、阻塞和权限确认分开记录
"正在处理""快完成了"很难支持下一步决策。更有用的状态包括:待开始、执行中、等待依赖、等待权限、待集成、已集成验证。
其中,"等待依赖"和"等待权限"需要分开。前者表示缺少上游结果,例如接口契约尚未确定;后者表示下一项操作尚未获得授权,例如任务准备执行某项受控环境变更。
每条待确认事项至少记录四个内容:
- 谁提出,需要谁确认。
- 要确认的具体问题或操作。
- 涉及的对象、环境和范围。
- 确认结果影响哪些后续任务。
例如,"是否同意修改"过于宽泛;"是否同意将查询接口的空结果统一为指定响应格式,T2 将据此实现空状态页面"就能帮助协调者判断影响。
权限确认也要绑定具体范围。某个任务获得的操作许可,不应被另一个会话自动理解为自己的授权。执行过程中如果目标、环境或操作范围发生变化,应重新核对已有授权是否覆盖。
进度记录可以采用事件式更新:开始任务、范围变化、出现阻塞、依赖确认、提交成果时更新。这样既能留下决策依据,也能减少重复汇报。
五、在合并之前检查依赖,而不只检查文本冲突
可以把假设任务的依赖写成:
text
T1 确认接口契约 → T2 实现页面接入
T1 完成接口实现 + T2 完成页面接入 → 集成检查
T3 梳理调用方 → T1、T2 核对影响范围
这里的重点是区分"可以同时开始"与"可以同时验收"。页面布局、调用方分析等工作可能提前开展,但接口行为尚未确认时,页面接入就不能被认定为集成完成。
合并前,建议围绕以下问题核对:
| 检查项 | 需要回答的问题 |
|---|---|
| 基线 | 各任务从哪个提交开始,之后公共约定是否变化? |
| 接口 | 字段、错误处理和边界行为是否一致? |
| 共享配置 | 依赖、构建脚本、环境变量是否出现不同假设? |
| 数据变化 | 迁移顺序、兼容性和调用方是否对应? |
| 验证证据 | 检查覆盖了哪个提交,哪些结果需要重新获得? |
| 集成顺序 | 哪个任务应先合入,后续任务需要同步什么? |
Git 没有报告冲突,只能说明文本层面能够合并,不能证明接口语义一致。
《AI 编程:开发者实用指南》还建议,对照独立验收标准和仓库已安装的版本检查结果,运行既定的测试和分析命令,并为推断出的边界情况补充针对性用例。因此,并行任务的检查结果需要放回具体版本和具体需求中理解。各分支分别通过检查,不能直接替代合并后的集成验证。
六、交接时提交"可接手的成果"
一份有效的交接记录,应让接手者知道成果在哪里、依据是什么、还缺什么:
text
任务编号:
基线提交:
成果提交:
已完成的行为:
修改文件与原因:
涉及的共享约定:
已执行的检查及结果:
尚未执行或未通过的检查:
仍待确认的问题:
依赖的其他任务与版本:
建议集成顺序:
合并后需要补做的验证:
"已完成"最好对应可观察的行为,例如"页面按已确认的契约展示空结果",而不是只写"前端完成"。
如果下游任务使用临时假设继续开发,也应把假设写进交接记录,并标明替换位置。这样,上游约定变化时,协调者能够找到需要重新检查的任务。
七、哪些任务适合并行,哪些应先收敛约定
这套方法更适合目标明确、修改范围可以分离、验收标准相对独立的任务。例如,一个会话实现限定模块,另一个补充独立测试,第三个只读梳理受影响调用方。
如果多个任务都需要修改核心类型、共同调整同一份迁移,或者需求仍在频繁变化,可以先安排分析与方案比较,待共享约定确认后再拆分实现。并行也可以发生在分析、检查和文档整理阶段,不必让所有会话同时写代码。
它的局限同样明确:任务表可能过期,文件所有权不能覆盖所有语义依赖,独立工作区也无法隔离全部外部资源。协调者仍需判断范围变化,确认关键约定,并在合并后获取足够的验证证据。
实际使用时,可以先从两个会话开始:分别分配一项边界清楚的任务,记录基线、共享约定和交接内容,观察哪些地方仍需要反复协调。只有当新的任务能够明确说明"改哪里、依赖谁、如何验收",再增加会话数量,分工才更容易保持可控。
参考资料
以下链接为本文使用的公开资料。事实依据与检索摘录保存在本地记录中;资料内容与适用范围以原始页面为准。