在构建大语言模型(LLM)的长期记忆系统时,传统的向量数据库(Vector DB)往往难以处理复杂的事实关联和时间演变。Zep 团队推出的开源项目 Graphiti 提供了一种全新的思路:通过**动态知识图谱(Dynamic Knowledge Graph)**来构建记忆。

Graphiti 的核心优势在于它不仅能存储“谁是谁”,还能记录“关系随时间的变化”。本文将深入 Graphiti 的源码,揭示它是如何在代码层面定义**实体(Entity)以及最关键的时序关系(Temporal Edge)**的。


1. 为什么需要时序关系?

传统的知识图谱通常是静态的。例如,“张三在 A 公司工作”这条三元组(Subject-Predicate-Object),在传统图中一旦存入就很难优雅地表达“张三后来跳槽到了 B 公司”这一变化。

Graphiti 引入了时间维度,使得图谱能够像人类记忆一样:

  • 记录演变: 知道某个事实在何时发生,何时失效。

  • 消除冲突: 当新信息与旧信息冲突时,通过时间戳来决定哪个是当前的“事实”。

  • 情境感知: 能够根据时间线检索特定时段的知识。


2. 实体定义:超越简单的节点

在 Graphiti 的源码中,实体的定义不仅仅是一个带标签的节点。我们可以在其核心模型定义(通常位于 modelsschema 模块)中看到它的基本构造。

核心属性

一个典型的 Entity(或 Node)在 Graphiti 中包含以下关键字段:

  • Name (名称): 实体的唯一标识符或主要称呼(如 "Elon Musk")。

  • Type (类型): 实体的分类(如 "Person", "Organization", "Event")。

  • Summary (摘要): Graphiti 会利用 LLM 对关于该实体的多条信息进行聚合,生成一个动态更新的描述。

  • Attributes (属性): 一个灵活的键值对集合,用于存储非结构化的细节。

源码视角:

Graphiti 利用 LLM 的提取能力,在插入数据时会自动进行“实体对齐”(Entity Resolution)。如果两个实体的语义相近,系统会将它们合并,并更新其摘要。


3. 时序关系(Temporal Edge)的奥秘

这是 Graphiti 的灵魂所在。在源码中,一个关系(Edge)不再仅仅是两个节点之间的连线,它被赋予了生命周期。

关键时间戳字段

RelationEdge 模型中,你会发现以下字段:

  1. created_at (创建时间): 记录该事实第一次被存入系统的时间。

  2. valid_at (生效时间): 事实在现实世界中发生的时间(由 LLM 从文本中提取,例如“2023年开始工作”)。

  3. invalid_at (失效时间): 当新的矛盾信息出现时,旧的关系并不会被物理删除,而是将其 invalid_at 标记为当前时间。

关系的版本控制

Graphiti 采用了一种类似“多版本并发控制”(MVCC)的逻辑。当系统接收到新消息“张三现在搬到了北京”时,它会执行以下逻辑:

  1. 检索张三现有的 lives_in 关系。

  2. 发现旧关系是“张三 lives_in 上海”。

  3. 更新旧关系: 将旧关系的 invalid_at 设为当前消息的时间。

  4. 创建新关系: 新增一条“张三 lives_in 北京”的关系,其 valid_at 为当前时间。

这种处理方式保证了图谱的非破坏性更新,开发者可以回溯任何一个时间点的图谱状态。


4. 源码实现逻辑:从文本到时序图

Graphiti 如何从一段杂乱的文本中抽象出这些时序数据?其处理流程主要分为三步:

第一步:LLM 提取(Extraction)

Graphiti 调用 LLM 生成结构化 JSON。Prompt 中会明确要求提取:

  • Entities: 识别文本中的主体。

  • Relationships: 识别主体间的动作。

  • Timestamps: 识别文本中提到的明确或隐含的时间点。

第二步:时序排序(Temporal Ordering)

graphiti/graph 引擎中,系统会根据提取到的 valid_at 对边进行排序。如果文本中没有提到时间,系统会默认使用处理时间(Processing Time)。

第三步:冲突检测与置信度更新

源码中包含一套逻辑来评估“新信息”对“旧知识”的影响。如果新信息具有更高的时效性或证据强度,旧的边缘将被标记为“非活跃(Inactive)”。


5. 总结

通过对 Graphiti 源码的剖析,我们可以看到它对“知识”的理解是动态的:

  • 实体(Entity) 是不断进化的摘要集合。

  • 时序关系(Temporal Edge) 是带有起止时间轴的链条。

对于开发者来说,Graphiti 不仅提供了一个存储工具,更提供了一种处理信息流随时间演变的架构范式。如果你正在构建需要“记住过去、理解现状”的 AI Agent,理解 Graphiti 的时序定义将是你掌握高级 RAG(检索增强生成)技术的关键。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐