返回文章列表
架构分析

Zep 解析:用双时间知识图谱解决事实冲突

记忆最难的从来不是「记住」,而是「信息变了你怎么办」。拆解 Zep 的三层子图结构与 Graphiti 的双时间模型,看它如何让新旧事实共存而不打架。

2025-02-2612分钟
论文:Zep — A Temporal Knowledge Graph Architecture for Agent Memory(arXiv 2501.13956)
官网/文档:https://www.getzep.com/ | https://help.getzep.com

记忆系统最容易被低估的难点不是「找不到」,而是「找错了」。用户三个月前说在杭州,上个月说搬到了上海——如果两条记忆都还在库里且都能被召回,系统就会随机挑一条回答。

Zep 是少数把这个问题当作核心设计目标的方案:它不试图删除旧事实,而是给每条事实标注有效期。

要点速览:双时间模型给每条事实边记录 valid_at / invalid_at——事实「过期」而非「消失」,「现在住哪」「以前住哪」「搬过几次家」三类问题都能答对;三层子图兼顾推理与回溯。LoCoMo 94.7% 为官方研究页口径,引用需带时间戳。事实频繁变化的场景,它几乎是最对口的方案。

一、三层子图结构

Zep 的知识图谱不是单一结构的图,而是三层职责明确的子图叠加:

子图存什么作用
情节子图(Episode)原始输入(消息、文本、JSON)保留一手证据,支持回溯
语义子图(Semantic)抽取出的实体与关系支撑结构化查询与推理
社区子图(Community)聚类后的实体群组支撑高层摘要与全局问题

这个分层解决了一个常见矛盾:结构化抽取会丢信息,保留原文又无法推理。 Zep 同时保留两者——语义层用于推理,情节层用于兜底验证。

二、双时间模型:允许事实「过期」而非「消失」

Graphiti(Zep 开源的核心引擎)的关键机制是给每条事实边记录两个时间:

  • valid_at:该事实从何时开始成立
  • invalid_at:该事实从何时起失效

当用户说「我搬到上海了」,系统不是删除「住在杭州」这条边,而是给它打上失效时间,并新建「住在上海」这条边。后果是:

  • 问「用户现在住哪」→ 只召回有效边,答案正确
  • 问「用户以前住哪」→ 失效边仍在,可以回答历史
  • 问「用户搬过几次家」→ 沿时间轴遍历,可以完整还原

这是纯向量方案做不到的:向量库里两条相似记忆会同时被召回,系统没有依据判断哪条更「新」。

需要强调:双时间模型并不是开源 Graphiti 独有——Zep 的商业平台内置了同一套机制,且在其上做了增强。

三、公开成绩与实际差距

Zep 官方研究页公布 LoCoMo 成绩为 94.7%(1,459/1,540)。需要说明的是,这一数字与其早期论文口径(78.94%)差异较大,中间经历了多轮算法迭代;同时第三方独立复现结果往往低于官方值。因此:

  • 引用时务必标注口径与时间
  • 不要把它直接与其它引擎的自报数字并排比较
  • 真正有意义的是「多跳」与「时间推理」两个子项上的相对优势

Zep 官方对 MemGPT 一类的对比结论是:在准确性、延迟和可扩展性上更适合生产环境。

四、集成与部署

  • Graphiti 开源:底层图引擎已开源,可自托管,需要自行准备图数据库
  • 框架适配:支持 LangGraph、CrewAI、AutoGen 等主流 Agent 框架
  • Zep Cloud:企业级托管,提供 SOC 2 Type II 与 HIPAA BAA 合规认证
  • 社区贡献:官方维护的多平台插件仓库(Claude Code / Codex / Cursor),另有社区 MCP 实现

五、代价与适用边界

适合:

  • 存在大量会随时间变化的事实(住址、职位、关系状态、订阅)
  • 需要回答历史状态(「当时是什么情况」)的场景
  • 需要多跳关系推理的应用
  • 有合规与数据驻留要求的企业

代价:

  • 图构建需要额外 LLM 调用,写入延迟与成本高于纯向量方案
  • 自托管要维护图数据库,运维门槛不低
  • 托管方案定价偏高,个人开发者与早期项目需要评估预算
  • 社区版与商业版功能存在差异,选型时要确认关键能力落在哪一侧

参考来源

勘误说明:本文早期版本引用 Zep LoCoMo 成绩为 78.94%,该数值来自论文早期口径;官方研究页当前公布值为 94.7%。两组数字不可混用,现已更正并补充口径说明。