跳到主要内容

当你的智能体意见相左:并行AI系统的冲突解决模式

· 阅读需 11 分钟
Tian Pan
Software Engineer

这是多智能体系统设计在架构评审中很少被提及的一个令人不安的事实:当你让两个智能体处理同一任务时,它们在20%到40%的情况下不会就答案达成一致,具体比例取决于任务类型。大多数系统的应对方式是静默地选择其中一个答案。日志中只显示最终决策,中间的分歧消失无踪。一切看起来运转正常,直到下游出现故障——而你要花费三到五倍的时间来调试,因为你搞不清楚哪个智能体出错了,甚至根本不知道它们曾经存在过分歧。

智能体之间的分歧不是一个可以稍后处理的边缘情况。随着并行智能体拓扑逐渐成为标准架构模式,冲突解决从脚注升级为一级可靠性纪律。

为什么智能体的分歧超出你的预期

大多数构建者最初的直觉是:对多个智能体运行相同的提示应该产生几乎相同的输出,分歧应该很少见且容易发现。但这两点都不成立。

智能体分歧有几个结构性原因。首先是非确定性:即使温度为零,注意力计算中的微小批处理差异和浮点运算差异也会产生细微不同的词元概率分布。在规模化场景中,这些差异会不断累积。其次是上下文敏感性:管道中的智能体通常接收不同的上下文子集——一个智能体可能已经看到了早期工具调用的结果,另一个可能没有。第三是角色差异化:一旦你为并行智能体分配不同的系统提示或角色以捕获多样化视角,你就刻意设计了让它们得出不同结论的机制。

对多智能体系统故障分类的研究发现,协调故障约占各主要框架中所有观察到故障的37%,而静默故障——智能体返回一个自信、格式良好但根本就是错误的答案——是操作层面最危险的故障类型。在没有冲突解决层的情况下,非结构化的多智能体网络相对于单智能体基线可以将错误放大超过17倍。

问题不在于智能体产生分歧。问题在于分歧是不可见的。

四种解决模式及其适用场景

多数投票

最简单的模式:对同一任务运行N个智能体,取多数答案。多数投票在结构化输出任务上效果显著——分类、实体提取、多项选择推理。研究比较多智能体辩论中的决策协议发现,投票在推理任务上比单智能体基线提升了13%。原因直观:如果智能体独立犯错,错误会分布在不同的答案选项上,而正确答案将占据主导地位。

多数投票的关键失败条件是相关错误。当智能体共享预训练语料库时——所有当前LLM都如此——它们共享相同的盲点。就一个在预训练数据中存在一致错误或缺口的微妙事实问题询问五个GPT-4级别的智能体,你会得到四票或五票投给同一个错误答案。多数投票将相关错误转化为虚假的高置信度。系统以四比一的裁决呈现结果,却没有任何迹象表明少数派智能体可能才是正确的那个。

多数投票适用于以下情况:任务有客观可验证的答案,智能体获得了真正独立的上下文,以及自信地给出错误答案的代价足够低,可以在下游被捕获。

置信度加权合成

与其将每票智能体视为等权重,不如按照表达的置信度加权。每个智能体在产生答案的同时给出经过校准的置信度分数;最终输出综合加权票数。

这种模式解决了一个真实存在的不对称性:一个对有充分证据的事实声明表达95%置信度的智能体,理应比一个在两个同样合理的选项之间表达51%置信度犹豫不决的智能体获得更高权重。在实践中,当智能体被提示在子声明层面——而非单一顶层置信度数字——构建带有明确不确定性分解的结构化输出时,这种模式效果最佳。强制智能体在声明层面——而非响应层面——表达不确定性的结构化输出模式,能显著提升合成质量。

陷阱在于LLM默认的校准很差。一个自信地出错的智能体会自我报告高置信度。置信度加权在你对每个智能体在部署前就持有验证任务分布上的校准数据时最为可靠。没有校准数据,置信度加权往往比简单多数投票产生更差的结果,因为它放大了系统性过度自信偏差。

评审与裁判智能体

与其聚合多个第一遍输出,不如运行一个独立的智能体,其唯一职责是评估。两种常见形式:

对抗性辩论:两个智能体产生答案,然后各自批判对方的推理。裁判智能体阅读双方回应和交流过程,然后作出最终裁决。研究发现,使用LLM作为裁判的多智能体辩论与单裁判基线相比,与人类判断的相关性提高了10-16%。辩论格式迫使智能体明确呈现其推理链,使错误变得可见,而不是隐藏在中间步骤中。

批评-修改循环:单个生成智能体产生答案;评审智能体识别弱点;生成智能体进行修改。循环运行固定轮数。这里重要的实证发现是:两轮是实际最优值。第一轮捕捉明显的缺口;第二轮精炼细节。超过两轮后,智能体往往趋向于强化共识而非改进质量——评审智能体用尽了新颖的异议,生成智能体也用尽了实质性修改。

两种形式共有一个失败模式:AI裁判与被评判的智能体并非独立。它们共享预训练痕迹,因此共享相同的系统性偏差。裁判智能体对于捕捉不同于生成智能体的错误类型很有价值,但不能将其视为地面真相的神谕。

结构化分歧分析

最复杂的模式将分歧重新定义为不是需要解决的噪声,而是需要分析的信息。与其立即聚合为单一答案,系统会问:智能体具体在哪里存在分歧,这告诉我们什么?

围绕这种模式构建的工具提取分歧结构——智能体是在事实层面、推理层面还是结论层面存在分歧?在共同前提上的结论层面分歧通常表明任务规范中存在合理的歧义,应该向调用方呈现,而不是静默解决。事实层面的分歧表明存在知识缺口,可能需要检索或工具使用而非合成。推理层面的分歧通常表明使用了不同的问题分解方式,正确的做法是呈现两种分解方式,而不是选择其中一种。

关于不确定性量化的结构化分歧研究显示,与简单集成投票相比,预期校准误差从0.084降低到0.036——改善超过两倍。代价是延迟和复杂性:结构化分歧分析需要更昂贵的下游聚合步骤,产生的输出比单一答案更丰富但也更难解析。

升级:何时停止解决分歧,开始寻求帮助

上述四种模式都假设系统可以自动解决冲突。许多冲突不应该自动解决。

应触发人工升级的信号分为三类:

置信度底线:当任何智能体的最高置信度输出低于你经验校准的阈值时,没有任何自动解决方法可能产生可靠的答案。系统应该明确呈现分歧,而不是从低置信度输入中制造共识。

风险与可逆性:多智能体在文档摘要任务上的冲突与在金融交易、医疗协议决策或任何修改持久状态的操作上的冲突风险特征截然不同。高风险任务应该有明确的升级策略;冲突解决层应该了解任务类别,而不仅仅是输出分布。

结构性循环:当批评-修改循环没有收敛——当第N轮修改与第N-1轮的差异和第一轮与第二轮的差异一样大时——任务很可能已经触及了自动解决能够处理的边界。升级优于在更多不会收敛的轮次上消耗更多token。

在路由给人工之前,系统应该进行升级前准备工作:收集所有智能体输出,标记争议中的具体声明,从工具调用中检索任何支持性证据,并将这些打包成结构化摘要。这极大地减少了人工解决时间,确保人工能够在不从头重现分析的情况下作出决策。

实践中的实现

上述四种模式对应不同框架的原语:

基于状态的解决(LangGraph):将冲突解决建模为明确的图节点。每个解决步骤都是一个带有类型化输入输出的节点;当置信度阈值未满足时,条件边路由到升级。状态图使冲突解决逻辑可见且可审计——与智能体链中的隐式解决相比,这是一个显著的操作优势。

基于角色的监督(CrewAI):在团队中为专用智能体分配明确的评审或裁判角色。团队切换时的人在回路检查点提供了自然的升级点。代价是每次冲突至少需要一次额外的LLM调用;在高吞吐量下这会累积成可观的成本。

对话式辩论(AutoGen):RoundRobinGroupChat自然地构建了智能体之间的辩论。比基于图的方法结构性更弱;适用于冲突解决逻辑本身是探索性的,以及你希望智能体通过对话协商解决方案而非遵循固定协议的场景。

无论框架如何,最重要的操作规范是可观测性。构建日志以捕获聚合前智能体输出的完整分布,而不仅仅是最终选定的输出。当冲突解决后的决策导致下游失败时,你需要重建每个智能体说了什么,以及为什么解决层做出了它做出的选择。没有这些,调试多智能体失败所需的时间是单智能体失败的三到五倍——而且无法产生防止下一次事故的学习。

你实际上在构建的规范

冲突解决架构的本质是让分歧变得清晰可见。最重要的设计决策不是使用哪种聚合算法——而是系统是否产生了一个可审计的记录,说明智能体说了什么、它们在哪里存在分歧,以及什么逻辑解决了分歧。

已实现结构化冲突解决和监控的框架的生产指标显示,与未监控的智能体链相比,故障率降低了60%。这个差距主要不是因为它们使用了更好的投票算法。而是因为可见的分歧是可诊断的分歧,而可诊断的分歧是可以修复的。

先构建可观测性层。然后在其上叠加解决模式。解决逻辑是容易调整的部分。难的部分是知道你需要调整它。

Let's stay in touch and Follow me for more thoughts and updates