Storage 05
Graph Memory
知识图谱的力量
交互
逐条添加对话句子,实时观察 knowledge graph 的生长过程。
节点: 0关系: 0对话轮次: 0/5
从扁平到结构化
Vector memory 将每条信息视为独立的点。但现实世界的信息是关联的——"张伟在字节跳动工作"和"字节跳动正在迁移到 Rust"意味着张伟可能需要学习 Rust。
Knowledge graph 以实体-关系-实体三元组存储信息,保留结构:
(张伟) —works_at→ (字节跳动)
(字节跳动) —migrating_to→ (Rust)
(张伟) —interested_in→ (Rust)
推理:张伟对 Rust 的兴趣可能与他公司的技术迁移有关。
(字节跳动) —migrating_to→ (Rust)
(张伟) —interested_in→ (Rust)
推理:张伟对 Rust 的兴趣可能与他公司的技术迁移有关。
Graphiti:基准实现
Graphiti(23K star,由 Zep 开发)从对话中增量构建 temporal knowledge graph。每段新对话提取实体和关系,合并到现有图中。
Extract
LLM 从对话中识别实体和关系。
Cognify
将新三元组与现有图对齐——去重、合并、解决冲突。
Load
写入图数据库(Neo4j),构建 vector 索引以支持混合查询。
Cognee:"6 行代码"方案
Cognee(12.5K star)以最小 API 封装了同样的 Extract-Cognify-Load 模式。
| 维度 | Graphiti | Cognee |
|---|---|---|
| 核心特性 | 双时间模型(见 S06) | 最小 API,快速集成 |
| 图存储 | Neo4j | 多后端(Neo4j、NetworkX...) |
| 检索 | 图遍历 + vector 搜索 | 图遍历 + vector 搜索 |
| 适用场景 | 需要 temporal 推理的复杂应用 | 快速原型、中等复杂度 |
Graph vs Vector
Vector 擅长模糊搜索("用户的偏好是什么?"),但丢失关系。
Graph 擅长结构化查询("张伟的公司用什么技术?"),但构建成本更高。
它们是互补的,不是竞争的。Mem0 最新版本同时支持两者。
下一节
Graph 保留了结构,但事实会变。"张伟住在北京"——这是什么时候的事?下一节:temporal memory——给每个事实加上时间戳。