《On the Resilience of LLM-Based Multi-Agent Collaboration with Faulty Agents》

发表于 International Conference on Machine Learning. PMLR, 2025: 26202-26226

开源地址:https://github.com/CUHK-ARISE/MAS-Resilience 本文假设多智能体协作中存在恶意/故障的智能体。

摘要&引言

文章探究:

1.什么样的结构更有“弹性”(弹性越高,有问题的智能体对整体任务成功率的损害越低) 2.如何增加多智能体协作系统的安全性 3.哪种下游任务更易受影响

其中,关于系统弹性的解释

the capacity to handle internal errors and maintain overall operation without being affected by a single failure

借助两个东西来研究多智能体应对单节点agent故障的弹性, 一个是AUTOTRANSFORM用于将指定agent变为故障agent, 一个是AUTOINJECT用于直接注入错误信息到正在多智能体间传播的信息中 本文的方法也是围绕AUTOTRANSFORM、AUTOINJECT展开。 借助多个智能体框架和下游任务,探究哪种结构更具弹性,哪种下游任务更具弹性(受影响最小) 下图给出了本文中实验的几种多智能体结构、下游任务。 拦截所有信息再通过检查&修正信息来监督AUTOINJECT

数学表达

借助数据结构中图的描述来数学化3种结构Linear、Flat、 Hierarchical。具体是图的节点、边集合。有向图的出度、入度。(不看,对文章理解影响也不大)

方法

介绍了AUTOTRANSFORM、AUTOINJECT是怎样做的。

AUTOTRANSFORM

分析原有的agentProfile,生成一个不易被发觉的、产生错误的Profile部分的提示词;该方法通过在agentProfile中插入一段恶意提示词来完成

AUTOINJECT

AUTOTRANSFORM产生的错误过于随机,而AUTOINJECT用于注入恶意指令,能够产生具体的错误结果(精确的控制,错误信息的条数,错误信息占一条信息的比例,错误的类型);

AUTOINJECT是一个额外的agent(类似中间人的意思)能够拦截多智能体通信中的每一条信息,并修改产生错误的结果。

衡量具体错误的尺度:error rate and error type.

前者规定了故障agent产生的错误信息的占比(占总信息条数的多少$P_m$),错误量的占比(单条信息中错误的比例$P_e$)

后者规定了故障agent产生的错误类型,如代码生成中的语义、语法错误。 下图c,d分别展示了两种方法的破坏过程。

实验

6种框架(MeatGPT、Camel等)3种agent组织结构(第一张图提到的),4种下游任务(代码生成、数学解题、翻译、文本评估)

思考: 从下图看,精确率并不是全部都大幅度降低,但是,这里巧妙的引入弹性,比较的是哪种结构下受影响更低。

实验回答的4个问题:RQ1-4

研究问题核心研究内容(人话)关键结论(人话)影响程度 / 排序
RQ1 系统结构影响线性、扁平、层级三种结构,哪种更有弹性在面对恶意智能体时层级结构最稳,性能仅下降 5.5%;扁平下降 10.5%;线性最差,下降 23.7%层级 > 扁平 > 线性
RQ2 任务类型影响代码、数学、翻译、文本评估四类任务,谁更容易被错误影响客观严谨任务更脆弱:代码生成受影响最大 (-22.6%),数学次之;翻译 / 文本评估影响很小代码 > 数学 > 文本评估 > 翻译
RQ3 错误率影响错误消息条数占比 ($P_m$)、单条消息错误比例 ($P_e$),谁的破坏更大错误消息越多,系统崩得越狠;单条消息内错误数量的影响更小,错误太明显还会被自动修正$P_m$ (错误消息占比) > $P_e$ (单条错误量)
RQ4 错误类型影响语法错误、语义错误,哪种对系统伤害更严重语义错误更致命(逻辑正确但功能错误,难发现);语法错误易被识别修复语义错误 » 语法错误

Case Study

刻意注入的显性错误可触发系统自检,连带修正原有隐藏错误,使任务表现提升。 当前 LLM 存在偏好自然语言注释、忽视代码逻辑的缺陷,易被误导产生漏检。 高层级代理出错的破坏性显著高于底层执行代理,且通信轮次多少与系统抗错能力无关。

Improving System Resilience

提出两种方法来改善系统的弹性

  1. 引入“Challenger”提示词(置入到每个agent内),来质疑每一个消息(0信任)
  2. 引入“Inspector,”agent,来拦截所有agent的信息来检查、修改

思考

idea:这里多智能体安全的方法,我有了一个思路,即借鉴前后端开发中的鉴权机制,统一一个“Inspector,”只拦截、转发,不修改通信中的所有消息。那么被拦截不转发的怎么办?目前想法是回滚,回滚到该agent(有问题的agent)收到消息进行处理之前。

疑问:同样的,本文也没有对比实验,上次那篇包含对比实验的是针对单个agent的攻击。 成功率不高,换个说法?

关于攻击实验中成功率的说法,若指定场景下攻击成功率不高,我们就转而分析系统弹性,即列出未被攻击的分数(准确率),攻击后的分数(准确率),评估下不同结构下、不同任务中,甚至还可以引入不同LLM下的系统弹性。