跳转至

对抗式验证:多 Agent 交叉校验设计哲学

📊 Level ⭐⭐⭐ | 7.9KB

核心原则

  • Verifier 与 Worker 是对抗关系,非可选附加步骤
  • Verifier 主动寻找 Worker 输出中的缺陷
  • 适用于需要严格质量控制的场景

深度分析

对抗式验证的设计哲学

MiniMax 的 Mavis Agent Team 架构将 Worker-Verifier 关系定义为对抗关系,这与企业中研发和质量部门的关系类似。很多框架将验证环节作为可选的附加步骤,但在 MiniMax 的设计中,它是架构的核心。 这个设计基于一个关键洞察:Agent 很难自我检查自己的输出。单 Agent 经常出现的问题包括:

  • 注意力漂移:检查的仍然是自己刚刚构造出来的东西
  • 上下文焦虑:忘记任务边界或执行到哪一步
  • 确认偏误:很真诚地自检但找不到真正的问题 Verifier 作为独立角色,与 Worker 不共享同一个上下文,没有"我刚查过所以应该没错"的惯性。

三角色架构的制衡机制

Owner(项目经理)→ 拆解任务、分配 Worker
     ↓
Worker(专业执行)→ 执行任务、产生输出
     ↓
Verifier(对抗检查)→ 验证质量、发现问题
     ↑                      ↓
     ← ← ← 重新执行 ← ← ← ←
关键设计逻辑:

  • Worker 停止的条件是 Verifier 启动的原因
  • Verifier 停止的条件是尽可能发现 Worker 的问题
  • 发现的问题成为 Worker 重新启动的原因 它们之间是相互制衡的关系,而不是简单的上下游关系。

Verifier 的具体工作内容

在研究场景中,Verifier 的工作包括: 来源检查

  • 引用的是不是稳定链接(官方页面、论文、GitHub 仓库 vs 搜索引擎缓存页、打不开的社区帖)
  • 来源是否可被其他人验证 时效检查

  • 来源上周访问不了但这周恢复了,报告里不能还留着"无法确认"的标注

  • 页面的发布日期没核实过,就不能在报告里写成确定时间

对抗验证 vs 传统测试的本质区别

传统软件测试是确定性的:给定输入 → 执行代码 → 验证输出。输出可预期,测试可以精确断言。 Agent 输出是概率性的:同样的输入可能产生不同输出,需要多次运行评估稳定性。 传统测试的"执行者和验证者分离"原则在 Agent 系统中升级为"独立的 Verifier Agent",需要解决:

  • 自判卷偏差(同一个模型既执行又验证)
  • 随机性(多次运行结果不同)
  • 负向增益(加了验证反而可能降低质量)

Verifier 成本的三重含义

  1. 验证本身:认真验证就是要花时间和 token,走过场不如不设
  2. 重试成本:需要退出机制,否则越跑越贵
  3. 人类决策成本:高风险动作(如合并代码)不能让 Agent 拍板,必须人类签字

多 Agent 的成本分析

引用论文 Cost of Consensus:在特定模型和同质 debate 设置下,多 Agent 的 token 消耗可能达到单 Agent 自我修正的 2.1 到 3.4 倍,准确率却没有提升甚至更差。 但这个结论不能外推为所有多 Agent 都是浪费的。关键区别在于:

  • 没有结构、没有验证、没有停止条件的多 Agent 是不成立的
  • 有架构约束和对抗验证的多 Agent 可以显著提升质量

三类额外成本

交接成本:信息在 Agent 之间传递时需要重新组织。研究 Agent 收回来几十个网页,写作 Agent 可能用不了。 解决方案:Agent 之间通过结构化的文件和摘要来通信,而不是把所有上下文塞进一个 prompt。 共享成本:每多共享一段内容,每个 Agent 每一轮都要为它付 token。 解决方案:按需加载,每个 Agent 只看到跟自己任务相关的信息摘要,需要细节时再读全文。 聚合成本:派十个 Agent 并行查资料很容易,但把十份结果合成一份事实一致、引用准确、风格统一的交付物很难。这一步没有捷径。

实践启示

1. 将 Verifier 作为架构核心而非可选附加

如果只把 Verifier 当作"可选的质检步骤",实际上没有解决对抗关系问题。需要:

  • Worker 停止的条件由 Verifier 决定
  • Verifier 有明确的质量标准和检查清单
  • 发现的问题必须触发 Worker 重试

2. 明确三角色的职责边界

  • Owner:理解用户目标、拆分子任务、决定执行顺序、分配任务、合并结果、控制停止
  • Worker:专业化执行,角色越清楚输出越容易被复用、比较和检查
  • Verifier:独立验证,不共享 Worker 上下文,主动寻找缺陷

3. 设计有效的验证检查清单

来源检查:

  • 引用链接是否可访问
  • 是否是稳定来源(官方页面 vs 搜索引擎缓存)
  • 时效性是否标注准确 内容检查:

  • 是否覆盖了所有要求的方面

  • 事实陈述是否有来源支撑
  • 格式是否符合规范

4. 建立重试和停止机制

没有退出机制会导致无限重试:

  • 设置最大重试次数
  • 定义重试条件(什么样的问题值得重试)
  • 定义停止条件(什么样的问题应该升级到人工)

5. 考虑何时不该用多 Agent

多 Agent 不是默认选项,是策略选项: | 场景 | 建议 | |------|------| | 任务越复杂、链路越长、风险越高、经验越可复用 | 值得上 Team | | 任务越短、越低风险、越确定 | 单 Agent 甚至脚本就够了 |

6. 优化 Agent 间通信

交接成本是真实的:

  • 使用结构化摘要而非原始输出
  • 每个 Agent 按需加载,只看相关信息
  • 避免把所有上下文塞进共享 prompt → 原文存档

参考

相关实体