AI agent 输出合并与冲突解决:多个工具或 agent 同时修改草稿/状态时怎么收口

HTMLPAGE 团队
20 分钟阅读

AI agent 一旦有多路输出,真正难的不是生成,而是收口。本文讲清 merge proposal、冲突分级、状态冲突策略与 human merge gate,避免最后一步最混乱。

#AI agent #merge #conflict resolution #工程实践

AI agent 一旦开始多步执行、并发调用工具、接收人工修改或者多 agent 协作,系统就迟早会遇到一个问题:最后到底应该以哪份结果为准。冲突可能来自多个 draft 同时修改同一段内容,也可能来自不同工具对同一个状态给出相反结果。

如果没有 merge 与 conflict 设计,系统最常见的表现不是报错,而是默默用最后一次写入覆盖前面的结果,直到后续有人发现“为什么这段刚改过又变回去了”。

建议先结合 AI agent Artifact 设计AI agent Workspace 状态分层AI agent Run Ledger 审计模型AI agent 人工审批控制台设计 一起看。

先给结论:不要直接 merge 最终结果,先 merge proposal

合并对象风险
直接改最终状态最容易覆盖正确结果
直接改当前 draft人工和 agent 修改会互相踩踏
先产出 merge proposal可以先判断冲突再决定如何落地

真正稳的系统,通常先让不同来源产出 proposal,再由 merge gate 决定哪部分可以自动合并,哪部分必须人工确认。

一、先把冲突分层,不要所有冲突都当成文本 diff

更常见的冲突其实至少有三类:

冲突类型例子
文本冲突两份 draft 改了同一段文案
字段冲突一个工具说 status=approved,另一个说 status=rejected
顺序冲突某一步结果基于旧版本 artifact 继续生成

如果系统只会做文本 diff,它根本无法覆盖最危险的状态冲突。

二、Merge proposal 最好带来源和意图,不只带 diff

一个更有用的 proposal 结构通常会长这样:

{
  "proposalId": "merge_001",
  "targetArtifact": "draft_004",
  "source": "review_agent",
  "changeType": "field_update",
  "intendedImpact": "replace call_to_action",
  "baseVersion": 4
}

这样系统不只是看到“改了什么”,还能看到“谁提议改、准备影响什么”。

但 proposal 有了还不够,系统最好再把冲突严重级别单独分层:

severity典型场景默认动作
low纯文本局部改动自动 merge
medium字段值不同但无副作用先校验再 merge
high审批、权限、外发状态冲突强制进入 human gate
critical已有副作用且结果互斥阻断并先对账

这样 merge gate 看到的就不只是“有冲突”,而是系统已经先判断了这类冲突该不该自动推进。

三、自动合并适合低风险字段,不适合高风险状态

一个简单但有效的原则是:

  • 文本说明、低风险元数据:可自动 merge
  • 权限、审批、外发、资金相关状态:默认不自动 merge
  • 冲突字段涉及副作用:必须进入 human merge gate

系统不是越自动越好,而是越知道哪些东西不该自动越好。

四、状态冲突要优先于文本冲突处理

很多实现会先把文字合并好,最后才发现底层状态已经互相矛盾。更健康的顺序通常是:

  1. 先检查状态冲突
  2. 再检查字段冲突
  3. 最后才处理文本冲突

原因很简单:状态冲突一旦没被挡住,后面的文本再漂亮也可能建立在错误前提上。

五、人工 merge gate 最少要展示 4 类信息

当系统决定不能自动合并时,审批台最好直接展示:

  • base version 和当前 version
  • 各 proposal 的来源与意图
  • 哪些字段可自动合并,哪些字段冲突
  • 合并后会触发什么副作用

这会比给审核者一个纯文本 diff 稳定得多,因为很多冲突本来就不是纯文本问题。

进一步说,审批台最好还能输出一份 merge decision record,而不是只保留最终稿:

{
  "targetArtifact": "draft_004",
  "acceptedProposalIds": ["merge_001"],
  "rejectedProposalIds": ["merge_007"],
  "conflictSeverity": "high",
  "sideEffectGate": "blocked_until_review"
}

这份记录的价值在于,后续一旦有人问“为什么选了这一版而不是那一版”,系统能回到具体决策,而不是只看到最终文本。

六、上线后要看 merge 质量,而不是只看冲突次数

建议至少记录:

指标用途
auto-merge success ratio看自动合并边界是否合理
human merge required ratio看冲突是否过多依赖人工
human merge turnaround time看人工 gate 是否成为瓶颈
post-merge rollback rate看合并质量是否稳定
side-effect conflict blocked count看关键冲突是否被成功拦下
stale base version conflict rate看 proposal 是否常基于旧版本生成

如果 auto-merge 很高,但 post-merge rollback 也高,说明系统在“快合并”,不是在“稳合并”。

七、失败案例:人工已经改过 CTA,Agent 后续生成又把它覆盖掉

某个营销内容 agent 在人工修改 CTA 之后,另一个 review agent 仍然基于旧 draft version 继续生成“优化后的最终版”,系统直接按最后一次写入覆盖,结果人工改动消失。

修复后,团队把所有后续 proposal 都必须携带 baseVersion,只要发现 proposal 基于旧版本,就进入 conflict gate 而不是直接落地,覆盖问题才消失。

八、输出合并与冲突解决 Checklist

  • 是否先把不同来源的修改变成 merge proposal,而不是直接落最终状态
  • 是否区分文本、字段和顺序三类冲突
  • 是否为冲突显式定义 low / medium / high / critical 等级
  • 自动合并边界是否避开高风险状态字段
  • 是否先检查状态冲突,再处理文本冲突
  • human merge gate 是否展示 base version、来源、意图和副作用
  • merge decision 是否被记录,而不是只留下最终结果
  • proposal 是否都带 baseVersion 防止旧版本写回
  • 是否监控 auto-merge 成功率和 post-merge rollback rate

结语

AI agent 的多路输出问题,本质上不是“怎么把几段文本拼起来”,而是怎么让不同来源的修改在同一套版本、责任和风险边界内收口。只有 merge proposal、conflict class 和 human merge gate 同时存在,系统才不会在最后一步把前面所有工程治理都冲掉。

延伸阅读: