Zep 解析:用双时间知识图谱解决事实冲突
记忆最难的从来不是「记住」,而是「信息变了你怎么办」。拆解 Zep 的三层子图结构与 Graphiti 的双时间模型,看它如何让新旧事实共存而不打架。
记忆最难的从来不是「记住」,而是「信息变了你怎么办」。拆解 Zep 的三层子图结构与 Graphiti 的双时间模型,看它如何让新旧事实共存而不打架。
论文: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 一类的对比结论是:在准确性、延迟和可扩展性上更适合生产环境。
适合:
代价:
勘误说明:本文早期版本引用 Zep LoCoMo 成绩为 78.94%,该数值来自论文早期口径;官方研究页当前公布值为 94.7%。两组数字不可混用,现已更正并补充口径说明。