跳到主要内容

智能体记忆漂移:为什么一致性对齐是你缺失的关键环

· 阅读需 12 分钟
Tian Pan
Software Engineer

你长期运行的智能体(agent)所做的最危险的事情,也是它做得最自信的事情:根据记忆回答。客户的地址在上周二更改了。智能体认为“开启”的工单在昨天被人工关闭了。智能体拥有整洁解释笔记的产品功能,其实际交付的形式与智能体三周前阅读的规范不同。在教科书定义上,这些都不属于幻觉——模型准确地召回了它存储的内容。只是在智能体看向别处时,世界已经发生了变化。

大多数团队将记忆视为一个写入问题:智能体应该记住什么、我们如何总结、嵌入(embedding)策略是什么、如何防止存储爆炸。这种思维方式产生的架构会随着错误程度的增加而变得更加自信。更难的问题——那个决定你的智能体在第三周后是否仍然有用的问题——是对账(reconciliation):这是一个明确的、持续的闭环,用于比较智能体认为真实的情况与底层系统当前显示的真实情况。

如果你曾经交付过基于数据库的缓存,你已经知道这种模式。没有失效机制(invalidation)的缓存就是地雷。没有对账的记忆也是同样的地雷,只不过你的智能体还会用流畅的散文来描述这场爆炸。

你无法防止、只能检测的漂移

漂移不是一个 bug。它是任何运行窗口超过其所知实体平均变更时间的智能体的一种热力学属性。从智能体写下一个事实的那一刻起——“用户偏好异步站会”、“该账户处于专业版计划”、“部署管道在合并前运行测试”——那个事实是正确的。从那一刻起,每过一分钟而不重新检查,它变错的可能性就会累积一分钟。

这就是为什么“让智能体记住更多”很少是长期系统的正确下一步投资。更多的记忆意味着更多的漂移暴露面。Tuesday Towards Data Science 对构建生产级记忆系统的从业者进行的一项调查发现,反复出现的教训是:今天有用的记忆明天就会过时,唯一的持久策略是针对重新验证(re-validation)而非保留(retention)进行设计。

正确的思想模型不是充斥在智能体文献中的人类记忆比喻。它是一个落后于主库的数据库副本。副本不会对其存储的内容撒谎;它们会准确地告诉你它们上次复制的内容。纪律并不在于让副本变得更聪明,而在于精确地知道它有多陈旧、它追赶到了哪个水位线(watermark),以及如何处理那些需要比现有数据更清新的读取请求。

借鉴自数据库的对账模式

好消息是,分布式系统工程师已经解决了其中的大部分问题。智能体的记忆系统正在悄无声息地趋同于那些保持大型数据库缓存一致性的相同原语。

带有水位线的版本化读取。 每个记忆条目都带有它所衍生的真理源的版本。当智能体读取记忆时,它可以将该水位线与底层实体的当前版本进行比较。如果实体已经超过了水位线,读取操作要么触发刷新,要么被标记为“可能已过时;上次对账版本为 N”。这是副本系统用来暴露延迟的相同技巧,在迁移到 LLM 智能体时几乎保持不变。

变更馈送订阅。 与其让智能体在每次读取时轮询现实,不如让记忆所引用的实体发布变更馈送——类似于 Debezium 风格的 CDC、事件总线或仅仅是一个 webhook。当 CRM 中的客户地址发生变化时,一个事件会进入记忆层订阅的主题。受影响的记忆条目被标记为脏数据。下一次读取时要么刷新,要么返回带有新鲜度标志的结果。这正是 Hazelcast 和其他缓存供应商多年前为针对操作型数据库的常青缓存所记录的模式——它成熟、乏味,但在应用于智能体记忆时极其有效。

读取时的延迟重新验证。 主动失效(Eager invalidation)在智能体规模上有一个致命缺陷:大多数存储的事实在变得无关紧要之前永远不会被再次读取,因此主动刷新它们是浪费的。延迟重新验证反其道而行之。当智能体获取记忆条目时,记忆层会根据源检查水位线。如果条目早于其信任预算,它会在返回之前触发同步或后台刷新。你只需为实际使用的记忆支付新鲜度税,这与你几乎肯定拥有的访问偏斜(access skew)相匹配。

随可变性衰减的 TTL。 一个带有时间戳的不可变事实(“客户于 2026 年 3 月 4 日注册”)理应拥有无限的 TTL。一个易变的事实(“客户上一个工单的优先级为高”)则理应只存活几分钟。许多团队通过惨痛教训发现了一个供应商的陷阱:统一的 TTL 会保证你在过度刷新稳定数据的同时,欠刷新易变数据。解决方法是根据记忆所引用的实体的可变性概况对记忆进行分类——类别型的、缓慢变化的、快速变化的、瞬时的——并为每类应用不同的衰减率。分类可以是启发式的;大致正确比追求完美更重要。

作为系统工作,这些都不是什么新鲜事。它之所以让人感到新奇,是因为大多数智能体代码库从未实现从“记忆是内容的向量索引”到“记忆是操作状态的派生视图,而视图需要失效机制”的转变。

状态 Embedding 的陷阱

我在生产级 Agent 系统中看到的最常见的架构错误,就是坚持将 Embedding 作为易变事物的首要表示形式。Embedding 非常适合文本的语义检索。但作为对账(reconciliation)的基础,它们简直是灾难,因为它们抹去了你进行选择性失效所需的结构。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates