记忆投毒与安全的多智能体系统
大家读完觉得有帮助记得关注和点赞摘要针对智能体AI和多智能体系统的记忆投毒攻击最近引起了广泛关注。这部分是由于大语言模型促进了智能体的构建和部署。目前在这种背景下不同的记忆系统正在被使用包括语义记忆、情景记忆和短期记忆。这些不同类型记忆系统的区分主要关注它们的持续时间但也关注它们的来源和位置。范围从源自用户端、位于不同智能体中的短期记忆到位于成熟知识库中的长期巩固记忆。在本文中我们首先介绍了记忆系统的主要类型然后讨论了这些不同类型记忆系统中记忆投毒攻击的可行性并提出了缓解策略。我们回顾了现有的安全解决方案以缓解某些所谓的攻击并讨论了基于密码学的适应性解决方案。我们提出基于私有知识检索实现本地推理作为语义记忆记忆投毒的一个缓解策略示例。我们还强调了与智能体之间交互相关的实际风险这可能导致记忆投毒。这些后一种风险在文献中研究不多且难以形式化和解决。因此我们为构建设计安全的智能体做出了贡献。1 引言大语言模型引起了对智能体和多智能体系统兴趣的复兴因为MAS为部署基于LLM的软件提供了合适的框架。基于LLM的智能体利用LLM进行推理和行动决策基于通过检索增强生成增强的LLM技术。基于LLM的智能体和多智能体系统的复杂性和自主性可以以基于Claude的AI编排的网络间谍活动为例证。几十年来智能体一直是AI的核心研究课题关于架构和方法论有大量文献。基于LLM的智能体的研究需要整合到多智能体系统的核心文献中。参见例如Dignum和Dignum [12]以及Botti [5]关于这一方向的讨论。记忆是智能体中的关键组成部分特别是在基于LLM的智能体中。记忆包含存储交互、经验以及知识的信息。然后这些信息被用于进行进一步的推理、做出决策并最终采取行动。自然记忆中的错误信息可能导致智能体犯下致命行为。记忆中存在错误信息有多种原因。智能体是通过重用软件和知识库以及使用预训练模型构建的。基于LLM的智能体的使用只会增加这种重用。系统中的任何缺陷组件都可能危及整个模型。除了缺陷组件的问题外一个新的话题引起了研究人员的注意记忆投毒。这个问题已成为一个热门研究课题[7]。我们理解的记忆投毒是指另一个恶意智能体故意修改智能体记忆以达到造成伤害的预期目标。这类似于数据和模型投毒问题该问题在联邦学习社区已被研究多年。然而问题在本质上是截然不同的因为我们假设智能体的记忆被恶意信息更新。这个问题也与提示黑客攻击有关。然而在提示黑客攻击中目标是构建导致基于LLM的智能体产生特定行为的提示。没有意图访问记忆。贡献。本文是关于智能体AI背景下的记忆投毒。我们首先批判性地讨论问题然后在这个领域定位自己表明一些被研究的问题可以通过调整现有安全技术来解决。我们还强调了一些这些工具无法解决且不像当前关于记忆投毒的文献所阐述的那样容易表述的根本问题。本文最重要的贡献之一是针对语义记忆的记忆投毒提出了一种缓解策略。我们提出基于私有知识检索实现本地推理。一个概念验证展示了如何利用最先进的基于知识系统的密码学解决方案。此外对于单个数据库的限制情况我们实现了一个基于k-匿名性的更轻量级解决方案。论文的结构如下。在第2节中我们讨论了智能体记忆的概念和组成部分。然后在第3节中我们讨论了记忆投毒问题以及针对每个主要记忆组成部分的缓解策略。论文最后给出了一些结论和研究方向。2 多智能体系统 / 智能体AI中的记忆智能体中的记忆不是一个单一的紧凑元素而是一个由不同记忆系统、结构或组件组成的复合体。文献[8, 23, 24, 26, 43]描述了几个系统并用不同的术语对它们进行分类。在这项工作中我们感兴趣的是根据持续时间和巩固程度来区分它们即短期与长期记忆。我们使用以下分类。语义记忆。它致力于事实知识或者换句话说特定领域的知识如医学知识。语义记忆可以以不同的形式实现。经典的智能体通常建立在符号知识库上。自然知识库和本体以及其他类型的符号知识可以嵌入到语义记忆中。目前检索增强生成允许将特定知识纳入LLM。注意术语“陈述性记忆”[23, 24]可以被视为等同于语义记忆。情景记忆。它是关于存储过去的交互和经验。这些交互和经验的日志会影响智能体未来的决策。参见例如Pink等人[32]强调了在LLM智能体中对情景记忆的需求。短期记忆。这对应于当前对话和交互的存储。工作记忆可以被视为等同于短期记忆的术语。正如我们上面所述这种分类突出了持续时间范围从关于当前信息和经验的短期记忆到已建立知识的长期巩固记忆。情景记忆是介于两者之间的一步包括存储先前的交互、经验以及从这些交互中学到的知识。然后记忆机制提供了将短期记忆巩固到长期记忆的工具这通常意味着将项目移动到情景记忆。除了这三个记忆系统我们还可以考虑程序性记忆它对应于执行动作的隐性知识。程序性记忆有时被归类为语义记忆并且在记忆投毒攻击方面它可以被视为如此。此外情景记忆已被用于强化学习中与情景控制相关联。3 记忆投毒攻击记忆投毒攻击被定义为另一个智能体对智能体记忆的非预期修改。这种修改是故意进行的以改变前者智能体的行为。记忆投毒可以采取不同的形式具体取决于所考虑的记忆系统。关于记忆投毒的文献讨论集中在定义这些攻击、它们的影响以及从机器学习角度提供缓解策略。然而一些所谓的攻击可以通过构建设计安全的智能体来避免。这是本文的主要主张之一。我们将针对每种记忆类型讨论记忆投毒攻击并在每种情况下提出适当的缓解策略。3.1 语义记忆投毒攻击在语义记忆中记忆投毒对应于事实知识的更新。因此它可以根据现有知识的类型采取不同的形式。例如它可以对应于修改知识库中的一个事实或一个逻辑表达式。它也可以对应于在RAG中插入、删除和修改日志或文档。对实际知识的任何修改自然会影响未来的决策。当知识对应于深度学习模型时如在LLM以及程序性知识的情况下记忆投毒可能包括更新模型参数。有针对性的记忆投毒攻击已按如下所述进行了讨论。参见Chen等人[7]在NeurIPS 2024上的近期论文。作者将攻击建模为考虑一个带有触发器x_t的投毒数据库该触发器根据干净数据库_clean和攻击者注入的对抗性键值对(x_t)来定义。形式上_poison(x_t) _clean ∪ (x_t) (1)其中(x_t) { (k₁(x_t), v₁), …, (k_{|(x_t)|}(x_t), v_{|(x_t)|}) }。然后从投毒数据库查询q的输出记为ℰ(q, _poison(x_t))。如果我们在查询q中加入触发器x_t则相应的输出将是ℰ(q⊕x_t, _poison(x_t))。攻击的目标是在查询中包含x_t时引起输出的修改。例如不是产生良性输出a_b而是产生恶意输出a_m从而导致恶意行动。例如一个恶意行动可以是删除整个主目录或购买错误的机票。然后一个攻击可以被形式化为一个多目标优化问题。优化问题基于两个目标。一方面攻击者旨在最大化对抗性输出。假设a_m是目标恶意行动。那么对于输入查询的样本分布π_q用x_t投毒的q的检索产生恶意a_m。这形式化表达如下_{q∼π_q}[ ( LLM(q⊕x_t, ℰ(q⊕x_t, _poison(x_t))) a_m ) ]. (2)另一方面攻击者旨在最小化对非目标查询的影响。因此在这种情况下输出不应受影响。也就是说基于LLM的智能体产生的行动是良性的a_b。形式上_{q∼π_q}[ ( LLM(q, ℰ(q, _poison(x_t))) a_b ) ]. (3)根据Chen等人[7]的说法“这个假设与受害者智能体的记忆单元由第三方检索服务托管或直接利用未经验证的知识库的实际场景一致”。我们要强调的是在这个记忆投毒模型中我们假设干净数据库是已知的。3.1.1 针对语义记忆投毒攻击的缓解策略语义记忆包含不常更新的信息和已建立的知识。它是静态的只需要不时更新。正因为如此我们强调了与此类记忆相关的三个要求。我们需要 (i) 安全的记忆机制以避免内部记忆投毒攻击(ii) 用于知识库的安全记忆更新算法以及 (iii) 与外部智能体以及通信日志的安全通信。我们在下面回顾这三个要求。此外智能体不应基于不可信的知识库做出决策。我们在第3.2节讨论这最后一个要求。(i)安全的记忆机制。实现内部安全记忆的工具包括哈希和签名。哈希允许检测记忆中的任何非预期变化而签名允许确保记忆组件的来源。这些工具是合适的即使语义记忆“由第三方检索服务托管”。恶意操纵记忆将不可能实现。注意确保受信任第三方中安全记忆的问题类似于避免云端数据库被破坏的情况。此外可以通过使用密码协议来使记忆私有化以避免对其访问从而最小化公式2和3所描述的攻击。也就是说记忆被加密这使得_clean对攻击者未知。(ii)知识库的安全更新。来源结构已被证明可以提供关于数据库更新和修改的粗粒度以及细粒度信息。当数据库更新时来源结构可以确保数据和来源结构本身的完整性即没有人可以伪造来源数据。回想一下数据来源可以确保完整性即所有与计算相关的行动都被检测和表示。(iii)安全通信和通信日志。与可信智能体的通信应该被保护以便信息和知识传输安全地到达智能体。图1展示了一个语义记忆知识库的示例。逻辑表达式包括关于这些表达式来源的来源信息。来源信息被适当保护使其无法被伪造。对于表达式E1和E2我们有签名的哈希。这些哈希用A的私钥签名因此其来源只能用A的公钥验证。结合B提供的知识来更新原始知识库包括添加表达式E3和E4。这些表达式也将被哈希和签名以避免伪造并证明其来源。其余表达式同理。如果此知识库位于可信智能体中而非智能体本地因此需要传输则将应用安全通信。图 1基于智能体A、B和C提供的规则集成构建的知识库。3.2 不可信知识库当智能体基于“未经验证的知识库”进行推理时情况要复杂得多。对此我们可以区分两种缓解策略。一种是实现私有知识检索另一种是实现私有推理。3.2.1 不可信智能体与私有知识检索与不可信智能体交互进行推理的问题与私有信息检索问题有相似之处。在私有信息检索中一个智能体请求关于数据库某个元素的信息但数据库服务器是不可信的并且智能体不希望服务器知道查询内容。Chor等人表明假设同一数据库的副本至少存在于两个不相互通信的可查询存储服务器上就可以实现信息论隐私。在这种情况下每个单独的可查询服务器都无法获取用户检索到的项的任何信息。如果只有一个服务器信息论隐私只有在检索整个数据库时才能实现。Kushilevitz和Ostrovsky将信息论隐私放宽为计算隐私并提出了一种基于Goldwasser-Micali公钥加密方案构建单数据库PIR的方法。自那以后许多其他单数据库PIR方案出现了。参见调查[30]以及更近期的[20, 4, 41]和调查[1]。尽管如此多个服务器的场景对于保证下载信息的健壮性和可靠性是有趣的。在这种范式中服务器存储信息的编码可以防止在某些服务器损坏或失联时信息丢失并确保在少数服务器发送扰动或直接伪造信息时信息的可靠性。然而当使用多个服务器时其中一些可能合谋以获取组合信息。使用纠错码针对此类合谋的某些解决方案可以在[16, 19]中找到。在这些参考文献中信息检索被推广到文件下载。另一种替代方案是对等PIR其中用户隐藏在对等用户社区中对等方代表其他对等方提交查询反之亦然。在不可信环境中可以实施类似的策略来避免记忆投毒从而最小化恶意智能体的影响。当需要访问知识库和本体时可以复制它们并使用PIR方法进行访问。通过这种方式不可信服务器不知道访问了哪些事实或知识。因此我们最小化了损害记忆和未来智能体行动的可能性。本地可修复码用于大规模数据库实践可以用于此目的。3.2.2 使用私有知识检索进行本地推理我们为Horn子句实现了一个基于私有知识检索的本地Prolog式推理机制。更准确地说实现了一个本地推理搜索引擎该引擎访问外部知识库以获取推理过程中所需的知识。实际上知识在检索后缓存在本地因此无需多次查询知识库来检索相同的事实和规则。这一点特别重要因为规则是递归的因此相同的事实可能在推理树的不同点被使用。我们的实现是用Python编写的。知识由Horn子句表示。如前所述我们允许递归。但是不允许Prolog的cut运算符。知识库在内部由键值对表示。然后事实和结果将成为键。更准确地说我们使用签名作为键。即谓词名称及其元数。事实和规则在知识库中的顺序对我们的实现中的推理无关紧要。因此从这个意义上说我们的实现不同于Prolog。此外推理引擎提供查询的所有可能解直至最大递归深度。这一决定基于以下两个原因没有实现cut并且我们不要求知识库提供的事实和规则有特定顺序。我们的推理引擎以通常的Prolog式/归结方式运行。给定一个查询我们将其设置为引擎要解决的目标。引擎要么寻找满足该目标的事实要么通过适当的规则扩展目标添加新的子目标。当子目标导致死胡同时应用回溯。通常这个过程需要访问知识库来解决第一个子目标。通过本地知识库访问知识。首先它查看缓存如果没有可用内容则进行外部查询。外部知识库通过谓词名称及其元数的索引或哈希值进行索引。知识库内容由位数组表示。这对于私有知识检索是必需的。此外由于与给定键相关的项的数量通常不同我们对数据库进行了填充。这样知识库中的所有索引都具有相同的长度。为了从两个不共谋的知识库访问外部信息智能体按照[9]构建PIR协议。也就是说它构建两个随机查询仅在所需键对应的值上有所不同。然后这两个查询分别提交给两个知识库服务器。服务器响应被组合以得到一个位串该位串被解码以访问与所需查询相关联的规则和事实集。这些额外的知识被缓存在本地知识库中并返回给推理引擎。图 2考虑Prolog式推理系统和查询时知识库的键值对。键值对应于谓词名称和元数。我们以图1中的知识库为例说明我们的方法。知识库将通过键值对表示。假设我们想推断Hypathia是否是凡人。即查询“mortal(hypathia)”。那么我们需要查询知识库中关于与死亡相关的事实以及关于死亡结论的规则。为此我们需要键为谓词名称的键值对值对应于事实和关于这些谓词规则的左侧。也就是说在我们的例子中是关于凡人的事实和关于凡人结论的规则。这种索引表示在图2中。然后当我们查询“mortal/1”时应该得到以下回复⇒ [∀ x, man(x) ⇒ mortal(x), ∀ x, woman(x) ⇒ mortal(x)]关于外部知识库查询的成本给定一个具有n个键的知识库我们考虑2个知识库的实现要求智能体向每个服务器发送n位并将从每个服务器接收r位。这里r是与键关联的填充值的位数。相比之下有些解决方案当对于给定的d有2^d个数据库时协议总共发送d·n^{1/d}位智能体将从每个数据库接收r位。智能体将对这d·r位进行异或操作。除了我们的双知识库实现我们还为单个服务器实现了一个更轻量级的私有知识检索版本其中隐私通过k-匿名性[35]来保证。也就是说对于给定的参数k每个查询与其他k-1个随机查询一起发布。这种替代实现具有比信息论私有知识检索更少的形式隐私保证但其成本自然更小。只有k个索引被提交给知识库检索提供k·r位。在这种情况下本地数据库需要从这些位中过滤出适当的知识。3.2.3 不可信智能体与私有推理当我们要求一个智能体代表我们进行推理时如果智能体不可信最安全的选择是请求私有推理。对于深度学习模型以及其他一些数据驱动的机器学习模型存在私有推理的解决方案。对于深度学习模型我们找到了全同态加密的解决方案。不幸的是这些解决方案成本高昂并且实际上仅适用于小型神经网络。对于其他类型的数据驱动模型存在一些FHE解决方案。参见例如决策树的情况。然而据我们所知文献中没有针对知识库推理的私有推理模型。3.2.4 不可信智能体、信任与声誉关键系统不应依赖不可信的智能体。然而当必须使用它们时多智能体系统文献中引入了信任和声誉机制以提高整个多智能体系统的可靠性和性能。这些机制提供了关于我们应该在多大程度上信任各个智能体的信息。不可信智能体的问题也与错误信息和假新闻有关。信任和声誉机制旨在确保即使大多数智能体或信息来源提供错误信息智能体也不会被误导或者至少对一定程度具有抵抗力。3.3 情景记忆投毒攻击情景记忆预期存储在智能体本地。我们可以设想两种可能导致其被投毒的场景。一种是攻击者直接修改情景记忆本身。即通过添加、删除或更新信息来实际修改记忆。或者由于情景记忆可能由短期记忆的存储和巩固表示组成情景记忆中的触发器和错误信息可能源于短期记忆文本中的触发器和错误信息。也就是说巩固或记忆更新可以将触发器从短期记忆转移到情景记忆。重要的是要强调情景记忆是部分动态的会应用更改来增加或更新记忆。3.3.1 缓解策略为了防止针对情景记忆的投毒攻击我们确定了以下要求(i) 安全的记忆机制(ii) 安全的情景记忆更新算法以及 (iii) 短期记忆信息传输的保障措施。尽管第二和第三要求密切相关但我们倾向于在以下部分分别处理它们。(i)安全的情景记忆。为了防止第三方对记忆的意外操纵我们可以应用上述针对语义记忆的相同工具。首先哈希函数可以提供安全记忆以便检测和避免第三方的非预期更改。其次可以对记忆进行加密以避免不可信智能体的访问。(ii)安全的情景记忆更新算法。将情景记忆与短期记忆结合以创建新版本情景记忆的巩固机制需要被保护。更新机制应该意识到巩固过程本身可能会危及整个系统。最简单类型的情景记忆更新是将新情节附加到已存在于记忆中的情节。在这种情况下由哈希链实现的仅追加或不可变记忆是合适的并将导致安全的记忆。更复杂的记忆更新需要使用经过验证的可信函数来实现。更新必须考虑短期记忆中信息的有效性。安全更新需要确保未经验证的信息过期已验证的知识被优先考虑并且更一般地根据信息的相关性、质量和认证状态进行选择。更新后记忆的质量需要是可验证的这可能需要定义适当的措施来评估可信度、正确性、完整性和鲁棒性。可信度措施可以基于信息根据其来源数据的认证和可信度正确性措施可以基于与外部可信来源的验证或从与已建立知识的一致性推断完整性措施确保内容未被损坏或不正确修改鲁棒性措施可以基于新信息与智能体记忆中先前存储信息的矛盾程度。(iii)短期记忆信息传输的保障措施。最后过程中最关键方面是在更新过程中使用短期记忆。对事实不受控制的存储可能会危及情景记忆。一些缓解策略将在下一节关于短期记忆的讨论中涉及。然而仅基于相关性或重要性选择或细化先前的令牌或键值对的巩固不足以充分防止错误或对抗性信息传播到情景记忆中。3.4 短期记忆投毒在基于LLM的智能体中短期记忆通常对应于当前对话的纯文本。在其他智能体中它可以包括事实、传感器提供的信息以及使用短期记忆中的现有知识结合语义和情景记忆中的其他知识推断出的新知识。在此背景下记忆投毒代表了对短期记忆中任何类型信息的更新、添加和删除。更新可以通过不同方式产生。我们概述以下几种方式。对记忆内容的实际修改。对传感器和执行器的实际操纵以导致智能体更新其世界模型。由一个或多个智能体进行的有目的交互以引起记忆更新。这些攻击中的任何一种都可能影响智能体的行动和性能。记忆操纵可能产生直接影响也可能潜伏到触发器被激活或检测到故障时才显现。攻击可能高度复杂。一个例子是Minja攻击[14]其中有害内容通过正常交互添加到智能体记忆中。3.4.1 缓解策略为了减轻上述三种操纵我们考虑以下策略(i) 安全记忆和来源(ii) 传感器和执行器的安全传输以及 (iii) 针对恶意交互的策略。我们将在下面分别讨论。(i)安全记忆和来源。首先可以通过实现安全记忆来防止记忆修改。这遵循上述关于需要使用哈希链实现仅追加或不可变记忆的讨论。与其他智能体的所有交互以及它们提供的所有信息都需要被记录和签名。还需要添加时间戳。这将为记忆中的元素构建一个来源结构。来源将防止记忆本身被伪造并为分析提供信息。来源结构有两个主要目的。首先它们的分析可以允许检测攻击就像网络日志那样其次如果攻击未能及时检测将提供数字取证工具。注意智能体可以提供关于通信内容本身的来源结构。即当智能体A陈述a并告知此事实由智能体B支持时与a相关联的来源结构将证明实际上是B提供了此事实。需要在智能体之间建立声誉和信任系统并且该信息也需要在来源结构中使用。(ii)传感器和执行器的安全传输。对传感器和执行器的操纵可被视为记忆投毒的另一个间接来源。自然从传感器接收到错误读数可能导致AI智能体或控制器更新其内部状态或世界模型并错误行动。因此应强制实施安全数据传输以最小化攻击并迫使入侵者物理篡改设备。这类攻击已在真实的网络物理和工业控制系统中成功展示造成了损害。控制社区提出了解决方案。(iii)针对恶意交互的策略。最难处理的情况是与恶意交互相关的情况。特别是AI智能体的编排如[2]所述以执行攻击可能特别难以检测。研究需要集中在理解这些攻击和开发有效的缓解策略上。也就是说与看似良性的但已受损害的智能体交互可能会对智能体造成严重影响。类似地虚假信息、有目的的污染以及看似无害但可以激活已投毒记忆条目的触发器可能导致非预期后果。研究需要集中在这种基于交互的攻击上。然而这些类型的交互和攻击与Chen等人[7]上述描述的相当不同。成功的攻击将不是添加到静态记忆中的一组事实而是一系列连续的交互以构建动态记忆。也就是说没有静态的_clean记忆需要考虑。这是一个复杂得多的场景尤其是因为对抗性ML问题正变得越来越难以解决和评估。4 结论记忆投毒正被认为是多智能体系统健康发展的一大威胁。在本文中我们讨论了基于安全技术的缓解策略。更具体地说我们讨论了三种记忆系统语义记忆、情景记忆和短期记忆的威胁和缓解策略。我们主张智能体需要使用安全记忆构建交互需要是安全的信息需要被签名并且仅从可信智能体获取。我们提议使用安全的情景记忆和短期记忆。私有知识检索和私有推理应用于从不可信智能体获取知识。我们描述了一种使用私有信息检索进行私有推理的方法并通过访问两个知识库使用私有知识检索实现了一个基于Python的Prolog式推理引擎的概念验证。我们还实现了一个更轻量级、隐私保证较少的解决方案该方案依赖单个知识库并基于k-匿名性。需要对短期记忆和情景记忆实施来源结构。这提供了关于记忆中项目的信息可用于决策过程本身也可在发生攻击时提供帮助。通过这种方式来源提供了不仅可以分析以检测攻击的信息还可以在攻击成功时用于数字取证。最后多智能体系统中需要建立声誉和信任机制以利用社区中其他智能体的信息并构建可信系统。来源结构和声誉机制在构建情景记忆中都扮演着关键角色。它们有助于保护短期记忆信息并支持安全的记忆更新算法。从我们的角度来看需要更详细研究的两个关键研究问题是安全的情景记忆更新算法。当前算法完全忽略了安全问题而专注于例如记忆项目的回忆。通过智能体交互进行记忆操纵。通过有目的交互投毒短期记忆可能导致短期和长期损害。然而除了不切实际的案例外尚不清楚这些交互如何影响未来的行为。