归属化记忆
将智能体记住的内容存储为包含其来源、可将其删除的所有者以及生命周期的记录,绝不能存为匿名的文本块。记忆会将单次攻击转变为在未来无关任务中重复触发的攻击;而归属化正是让这种影响可逆的关键。
定义
归属化记忆是指将智能体的每条持久化记忆写入为一条记录,其中包含其出处(该断言来自何处以及承载了谁的授权)、一个有名字的且可以删除它的所有者,以及一个有效期——这样,虚假的事实就可以被追踪、移除,即使未能手动移除,也会自动失效。
问题
将自由文本写入持久化记忆的智能体,在以后无法区分哪些记忆是别人告诉它的、哪些是它从陌生网页上读取的、哪些是它自己推断的。这样一来,一次被污染的写入就会在与植入该写入的对话毫无关系的任务中,作为可信上下文重新出现。
适用场景
适用于记忆生命周期长于创建它的会话的任何场景:记住偏好的助手、积累项目状态的智能体,以及智能体自身写入的任何检索库。保留时间越长,且智能体创作的语料库越多,记忆就越需要是一个记录存储库,而不是一个笔记本。
解决方案
拒绝匿名写入。每条记录都应以结构化字段(而非文本中的句子)的形式携带断言的来源——会话和轮次、工具或文档,如果来自外部,还应包括 URL。
记录断言承载了谁的授权。操作员配置的事实、最终用户断言的事实以及智能体在第三方页面上读取的事实是三种不同的断言;保持类别明确,以便检索路径可以对其进行加权,审核人员可以对其进行分类。
为每条记录设定生命周期,并将默认值设得很短。永不失效的记忆是永远不会有人审核的记忆,而被污染写入的半衰期决定了攻击能持续发挥作用多久。
使删除操作成为具有具名所有者的一等公民操作,并使其能够传播。如果断言仍然存在于嵌入(embedding)、缓存的摘要或派生的画像中,仅删除记录是不够的。
将写入路径视为一项操作。记忆写入会改变未来的行为,因此它们必须像其他任何写入一样经过相同的授权和日志记录——不能因为目的地恰好是一个文件就走旁路。
绝不允许检索到的记忆作为指令重新进入提示词。它作为附带来源的数据到达,而来源为第三方的记录应完全被视为来自该第三方的不可信输入。
组件
优势
- 使记忆污染可逆:你可以找到该写入,查看其来源,并删除从中派生的所有内容。
- 将“这个智能体对我的认知是什么?”变成一个人类可读的有解问题。
- 允许检索根据断言的来源对其进行加权,而不是根据文本撰写时的自信程度。
- 满足适用于任何关于个人的持久化数据的保留和擦除义务,而无需在以后额外拼凑独立的机制。
风险
- 出处作秀(Provenance theatre):来源字段总是显示为“agent”,这没有记录任何实质内容,却看起来像是一个控制项。
- 压缩洗白(Compaction laundering)——归属信息消亡最常见的方式。将十条带有归属信息的记录总结为一个段落,会产生一个无归属信息的断言,而这个断言现在看起来就像是共识。
- 部分删除:主记录消失了,但向量保留了下来,导致该断言仍不断被检索到。
- 过度失效破坏了记忆存在所需的连续性,从而迫使人们完全禁用失效机制。
不适用场景
- 无持久化的单会话智能体:没有需要归属的记忆,这种仪式感毫无收益。
- 当存储库是你自己已经过治理的记录系统的缓存时——只需对源系统进行一次归属标记,而不是对每个派生行都进行标记。
- 当开销会迫使操作员将真实的笔记保存在系统之外时,这显然比系统内存在不完美的记录要糟糕得多。
技术
示例
- 一个写入“偏好公制单位”的助手。该记录携带了会话 ID 和用户说出这句话的轮次,因此错误的偏好可以追溯到导致该偏好的句子并予以删除。
- 一个读取第三方页面并存储带有“在某日期、某 URL 处观察到”标签的断言的研究智能体,绝不将其存为事实。当数月后检索到相同的断言时,其来源会随之呈现。
- 一个支持智能体,其记忆记录默认在 90 天后失效,只有经人工明确确认的条目才具有更长的生命周期——这样,未审核的大多数记录会因过期而淘汰,而经审核的少数记录则得以保留。
KPI
- 归属化写入占比
- 携带机器可读来源的记忆记录占比。如果低于 100%,存储库就无法回答断言来自何处,而这正是整个控制项的核心所在。
- 记录年龄中位数
- 实际起作用的记忆的真实年龄。在没有删除操作的情况下,中位数上升意味着存储库只是在不断累积,而不是在被精心维护。
- 删除传播延迟
- 从删除记录到该断言无法从每个派生产物中检索到之间的时间。这是已删除断言仍然起作用的时间窗口。
- 按期失效占比
- 达到有效期并被实际移除的记录占比。这是生命周期真实存在而非仅作声明的证据。
已观测到的失效模式
- 延时生效污染:在一次对话中植入的虚假事实在数周后的无关任务中浮出水面,而上下文中的任何内容都无法解释为什么智能体相信它。
- 摘要残留:记录被删除了,但吸收了该记录的压缩摘要未被删除,导致断言比其自身的来源存活得更久。
- 影子索引:已删除记录的嵌入(embedding)仍然可以被搜索到,导致删除操作在审计员查看的每个地方都成功了,但在真正起作用的地方却失败了。
- 身份混淆(Identity bleed):记忆的键值关联过于松散,导致一个用户的记录被另一个用户检索到,从而将记忆设计缺陷演变成信息泄露。
经验教训
- 归属信息在写入时成本很低,但事后重建却是不可能的。该字段必须在断言产生之前就存在。
- 每个压缩步骤都是一个归属边界。如果摘要生成器无法将来源传递下去,它就会产生新的无源断言。
- 从未有人见其触发过的失效机制只是一项政策,而不是一个控制项。
- 删除的彻底程度,取决于你所遗忘的派生产物。
常见问题
- 这不就是步骤更繁琐的数据保留政策吗?
- 保留政策解决的是数据何时消失的问题。而归属信息解决的是断言来自何处以及谁可以删除它的问题,这正是当记忆被发现是错误的(而不仅仅是陈旧的)那一刻你所需要的。两者是互补的:没有失效机制,归属信息就会不断堆积;没有归属信息,失效机制就会删除你从未理解的证据。
- 智能体自己写入记忆。这些记忆承载了谁的授权?
- 它自己的授权,而这正是值得命名的类别。智能体推断的断言比操作员配置的断言要弱,并且在检索时应当能够体现这一点——否则模型自身的猜测在以后返回时将与配置无法区分。
- 我们如何在摘要生成过程中保留出处?
- 要么摘要携带其所有源头来源的并集,要么将其写入为一条指向其所替代记录的、由智能体推断的新记录。绝不能让摘要悄无声息地变成无源事实,因为这一步会让污染变成永久性的。