对话Agent长期记忆如何进入上下文
文章围绕常驻上下文、对话压缩与记忆检索讨论长期记忆设计,并结合Mem0、Letta和作者产品的实现选择展开分析。核心问题是关键事实能否在需要时进入模型上下文,而非是否已经存储。
原文暂未完整获取,基于公开信息的快读
用户周一告诉 AI 自己对花生过敏,周四问零食推荐,却收到花生酱饼干的建议。原文用这个例子指出对话 Agent 长期记忆的一个关键问题:事实即使已经保存,也可能在需要时没有进入模型上下文。作者结合 Mem0、Letta 和自己参与开发的 Sipplay,讨论如何安排这些信息。
目前能确认什么
模型生成回答时,需要依赖当前上下文中的信息。外部记忆库保存了什么,与本轮实际提供给模型什么,是两个环节。
原文把记忆设计拆成三个问题:哪些事实始终留在上下文里;对话压缩时保留什么;移出上下文的信息何时检索,以及如何判断多条记录中哪条仍然有效。
按节选描述,Mem0 在回复前检索相关记忆,在对话后提取新记忆。其提取策略只追加记录,把冲突处理放到读取阶段。例如会议改期后,新旧时间都保留,再由检索和排序选择适用记录。代价是,关键事实能否被使用,仍依赖检索是否命中。
Letta 则区分常驻与按需读取的记忆:节选称,system/ 下的文件每轮进入系统提示词,其他文件由 Agent 按需读取;还可以在上下文压缩事件发生时触发后台记忆整理。
作者提到 Sipplay 结合了两类思路,但节选在具体方案展开前中断,无法确认其实现。
我的判断
长期记忆的验收标准,应包含关键事实是否进入了需要它的那一轮上下文。
对程序员来说,排查「失忆」需要先定位环节:事实没提取出来、被压缩丢弃、检索没命中,还是旧记录排在新记录前面。这些故障需要不同的修复办法。
过敏、权限限制等硬约束,我倾向于放进受控的常驻上下文,并明确更新规则;普通偏好和历史事件再按需检索。常驻内容也会占用上下文,不能无限累加。
尚不清楚的是:Sipplay 如何让用户指定必须保留的事实,以及这些事实如何跨越压缩过程。节选也没有充分展开 Letta 后台整理与压缩步骤的执行顺序,不能据此认定它能保证关键记忆绝不丢失。