源码解读:Graphiti 如何定义实体(Entity)与时序关系(Temporal Edge)?
在构建大语言模型(LLM)的长期记忆系统时,传统的向量数据库(Vector DB)往往难以处理复杂的事实关联和时间演变。Zep 团队推出的开源项目 Graphiti 提供了一种全新的思路:通过**动态知识图谱(Dynamic Knowledge Graph)**来构建记忆。
Graphiti 的核心优势在于它不仅能存储“谁是谁”,还能记录“关系随时间的变化”。本文将深入 Graphiti 的源码,揭示它是如何在代码层面定义**实体(Entity)以及最关键的时序关系(Temporal Edge)**的。
1. 为什么需要时序关系?
传统的知识图谱通常是静态的。例如,“张三在 A 公司工作”这条三元组(Subject-Predicate-Object),在传统图中一旦存入就很难优雅地表达“张三后来跳槽到了 B 公司”这一变化。
Graphiti 引入了时间维度,使得图谱能够像人类记忆一样:
-
记录演变: 知道某个事实在何时发生,何时失效。
-
消除冲突: 当新信息与旧信息冲突时,通过时间戳来决定哪个是当前的“事实”。
-
情境感知: 能够根据时间线检索特定时段的知识。
2. 实体定义:超越简单的节点
在 Graphiti 的源码中,实体的定义不仅仅是一个带标签的节点。我们可以在其核心模型定义(通常位于 models 或 schema 模块)中看到它的基本构造。
核心属性
一个典型的 Entity(或 Node)在 Graphiti 中包含以下关键字段:
-
Name (名称): 实体的唯一标识符或主要称呼(如 "Elon Musk")。
-
Type (类型): 实体的分类(如 "Person", "Organization", "Event")。
-
Summary (摘要): Graphiti 会利用 LLM 对关于该实体的多条信息进行聚合,生成一个动态更新的描述。
-
Attributes (属性): 一个灵活的键值对集合,用于存储非结构化的细节。
源码视角:
Graphiti 利用 LLM 的提取能力,在插入数据时会自动进行“实体对齐”(Entity Resolution)。如果两个实体的语义相近,系统会将它们合并,并更新其摘要。
3. 时序关系(Temporal Edge)的奥秘
这是 Graphiti 的灵魂所在。在源码中,一个关系(Edge)不再仅仅是两个节点之间的连线,它被赋予了生命周期。
关键时间戳字段
在 Relation 或 Edge 模型中,你会发现以下字段:
-
created_at(创建时间): 记录该事实第一次被存入系统的时间。 -
valid_at(生效时间): 事实在现实世界中发生的时间(由 LLM 从文本中提取,例如“2023年开始工作”)。 -
invalid_at(失效时间): 当新的矛盾信息出现时,旧的关系并不会被物理删除,而是将其invalid_at标记为当前时间。
关系的版本控制
Graphiti 采用了一种类似“多版本并发控制”(MVCC)的逻辑。当系统接收到新消息“张三现在搬到了北京”时,它会执行以下逻辑:
-
检索张三现有的
lives_in关系。 -
发现旧关系是“张三 lives_in 上海”。
-
更新旧关系: 将旧关系的
invalid_at设为当前消息的时间。 -
创建新关系: 新增一条“张三 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(检索增强生成)技术的关键。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)