经过一年构建智能体记忆,我确信“保存所有内容 + RAG”是错误默认方案
摘要
文章认为智能体记忆的默认方法(保存所有消息并使用 RAG)由于缺乏抑制、身份和关系追踪而失败,并提议改用轻量级时序知识图谱来建模用户的世界。
智能体记忆的默认方法基本上是:保存用户说的一切,嵌入它,并在查询时将最相似的片段拉回上下文中。一个带有搜索框的对话记录。这很简单,演示效果不错,但一旦在实际中使用,它会在特定方式下崩溃。失败不在于检索质量。而在于一堆过去的消息没有以下概念:
- **抑制**:三月份的一个事实在六月份被推翻。两个片段都还在,同样可检索。模型得到两者并选择一个,往往是过时的那一个。
- **身份**:“他”/“那个客户”/“这个项目”在不同对话中解析为同一实体。
- **两个消息是关于同一件事**:一个对话中做出的承诺和另一个对话中履行承诺只是两个不相关的片段。所有这些意义存在于消息之间,原始记录在存储时就将它丢弃了。更好的嵌入或重新排序无法恢复它,因为信息从未被编码过。
对我来说更有效的是将记忆视为用户世界的模型,而不是日志:
- 将实体(人、项目、承诺)作为一等公民存储,而不是句子
- 将事实附加到它们,每个事实有来源、置信度和时间戳
- 新信息更新模型,而不是堆在旧信息旁边
- 检索变成“读取一个结构的相关部分,该结构已经知道其各部分如何连接”,而不是“搜索文本并希望”
基本上是一个轻量级的用户时序知识图谱,向量搜索只是进入它的一条路径,而不是全部。前期工作更多——实体解析、覆盖规则、决定什么是持久事实与短暂噪音——我仍在摸索边界。目前最难的一点:知道何时“更新”应该覆盖旧事实,以及何时两者都应保留为随时间真实变化的情况。
好奇这里的人们如何处理长期的跨会话记忆:
- 纯粹基于历史的向量、图,还是某种混合?
- 如何防止旧的/被推翻的事实重新出现?
- 有什么干净的启发式方法用于决定什么升级为持久记忆,什么让其淡出?
相似文章
智能体记忆不仅仅是基于用户事实的RAG
文章认为,简单的基于RAG的智能体记忆系统在生产中会失败,原因包括过时的偏好、遗漏的关键词和提示注入等问题,并主张采用分层记忆架构,具备主动选择、确定性回退、治理和测试等功能。
@akshay_pachaar: 你的智能体记性很好,但理解力为零。大多数智能体记忆系统都在优化回忆能力。但更难的问题是……
一则关于智能体记忆中模式(Schema)约束重要性的讨论,介绍了 Zep AI 的开源 Graphiti 库,该库用于构建受约束实体和关系类型的时序知识图谱。
智能体的记忆尚未成熟
对当前AI智能体记忆解决方案的批评,认为RAG包装器及类似方法未能解决模型偏见和上下文膨胀的核心问题。
我曾以为智能体记忆只是存储问题。现在我不这么认为了。
一位开发者重新思考智能体记忆,认为它不仅仅是存储,而是提出了一个带有角色和激活场的活图,用以赋予过去信息适当的权威和上下文。
关于智能体、RAG 和记忆的一些笔记与经验教训
作者分享了在大规模构建 AI 智能体过程中积累的笔记与经验教训,重点探讨 RAG 和记忆管理,以帮助他人。