发明 AI 智能体长期记忆:从「金鱼记忆」到「时序推理」—— AI智能体记忆的结构化进化
- 起点:原始尝试
- 迭代优化过程
- 问题一:信息检索不精准
- 问题二:信息会过时
- 问题三:检索结果太多、太杂
- 系统化完善
- 实体抽取与消歧
- 时间表达式解析
- 核心演化路径总结
代码:https://github.com/getzep/graphiti
起点:原始尝试
如果把用户的对话记录塞进大模型的上下文窗口,让它「记住」之前说过的话——
模型确实能回答「上周我跟你说了什么」这类问题
效果虽有,问题却很大:上下文窗口塞满11.5万token后,模型答题准确率仅 55.4%,响应延迟高达 31秒
更糟的是,对话一长,关键信息淹没在海量文本中;信息一更新,旧事实和新事实混为一谈
迭代优化过程
问题一:信息检索不精准
可问题又来了 —— 传统RAG只能做静态文档检索,语义相似≠逻辑相关
于是,你引入 三层知识图谱结构:
• Episode子图:存储原始对话消息,保留完整上下文
• Semantic Entity子图:从对话中抽取实体和关系(如「张三」-「就职于」-「公司A」)
• Community子图:用标签传播算法聚类相关实体,生成高层摘要
这样,检索时不再是「大海捞针」,而是沿着知识图谱的边精准定位
问题二:信息会过时
可问题又来了——用户说「我换工作了」,旧的就职信息怎么处理?
于是,你引入 双时序模型(Bi-temporal Model):
• T时间线:记录事实在现实中的有效期(valid_at 到 invalid_at)
• T’时间线:记录数据何时入库、何时失效
新边入库时,系统自动对比语义相关的旧边,发现矛盾就将旧边标记为「失效」,同时保留历史记录
用户问「我 现在 在哪工作」和「我 去年 在哪工作」,系统能给出不同答案
问题三:检索结果太多、太杂
可问题又来了——三种搜索方法(余弦相似度、BM25全文检索、广度优先图遍历)各有所长,结果如何整合?
于是,你引入 多级重排机制:
• RRF融合排序:综合多路召回结果
• MMR去重:最大边际相关性,去掉冗余结果
• 提及频率排序:对话中高频出现的实体优先返回
• Cross-encoder精排:用模型对候选结果精细打分
最终,上下文从11.5万token压缩到 1600 token,信息密度提升70倍
系统化完善
实体抽取与消歧
消息入库时,系统先做命名实体识别,再用反思技术(Reflexion)减少幻觉;对抽取出的实体,通过embedding相似度+全文检索找到候选重复项,让LLM判断是否合并,避免「张三」和「老张」变成两个节点
时间表达式解析
「下周四」「两周前」这类相对时间,系统根据消息发送时间戳自动转换为绝对时间,确保时序推理准确
社区动态更新
新实体入库时,用标签传播的单步逻辑快速分配社区,延迟完整社区刷新,兼顾实时性和一致性
成就总结
恭喜你,发明了 Zep——基于时序知识图谱的智能体记忆层
在时序推理任务上提升 38.4%,跨会话任务提升 30.7%——这不仅是检索系统的升级,更是赋予AI智能体真正的「长期记忆」能力
核心演化路径总结
标题:从「金鱼记忆」到「时序推理」——AI智能体记忆的结构化进化
- 核心问题:全文上下文检索导致信息淹没、时序混乱、延迟高
- 核心解法:三层时序知识图谱(Episode→Semantic→Community)+ 双时序边失效机制
- 技术支撑:BGE-m3嵌入、Neo4j图数据库、Cross-encoder重排、标签传播社区检测
- 最终成果:准确率 +18.5%,延迟 -90%,Token -98.6%
- 本质升华:将RAG从「静态文档仓库」变成「动态演化的世界模型」,模拟人类情景记忆与语义记忆的双系统