图谱记忆总览
图谱记忆概述
相关源文件
本章引用的主要源码文件:
docs/components/vectordbs/dbs/neptune_analytics.mdxdocs/core-concepts/memory-operations/add.mdxdocs/core-concepts/memory-operations/delete.mdxdocs/core-concepts/memory-operations/search.mdxdocs/core-concepts/memory-operations/update.mdxdocs/core-concepts/memory-types.mdxdocs/open-source/configuration.mdxdocs/open-source/overview.mdxdocs/platform/advanced-memory-operations.mdxdocs/platform/features/platform-overview.mdxdocs/platform/overview.mdxexamples/graph-db-demo/neptune-example.ipynbmem0/configs/enums.pymem0/configs/vector_stores/neptune.pymem0/configs/vector_stores/supabase.pymem0/vector_stores/neptune_analytics.pytests/vector_stores/test_neptune_analytics.py
图谱记忆是 Mem0 核心向量记忆系统的可选扩展,它将知识表示为实体(节点)及其关系(边)构成的图谱。这种方式支持结构化知识表示、复杂关系查询以及理解不同信息片段之间的语义关联。
关于图存储提供商(Neo4j、Kuzu、Memgraph、Neptune)的配置详情,请参见 4.2 图存储提供商。关于实体提取和关系建立的具体实现,请参见 4.3 实体与关系提取。
什么是图谱记忆
图谱记忆通过将信息存储在图数据库结构中,补充了 Mem0 基于向量的记忆系统。向量记忆擅长语义相似性搜索,而图谱记忆则捕获实体之间的显式关系,支持诸如"谁认识谁"或"用户 X 购买了哪些产品"这类查询。
系统使用大语言模型(LLM)自动从对话文本中提取实体(人物、地点、事物)及其关系,然后将它们作为节点和边存储在图数据库中。每个实体节点包含一个用于相似性匹配和去重的向量嵌入。
主要特性:
- 以实体为中心:将离散实体(人物、地点、概念)存储为节点。
- 关系感知:捕获显式关系(认识、工作于、喜欢)作为边。
- 混合存储:将图结构与向量嵌入结合用于节点匹配。
- 自动提取:基于大语言模型(LLM)的工具调用进行实体和关系识别。
- 可选功能:需要安装
graph额外依赖并进行特定配置。
来源:docs/core-concepts/memory-operations/add.mdx:46-48、docs/platform/advanced-memory-operations.mdx:67-68、examples/graph-db-demo/neptune-example.ipynb:11-13
图谱记忆与向量记忆对比
下图展示了单条信息的不同处理路径。
对比:自然语言到代码实体空间
| 方面 | 向量记忆 | 图谱记忆 |
|---|---|---|
| 结构 | 扁平嵌入向量 | 节点和边 |
| 查询 | 语义相似性搜索 | 关系遍历 |
| 去重 | 文本相似度/冲突解决 | 通过嵌入向量进行实体匹配 |
| 关系 | 隐式(通过嵌入向量) | 显式(通过边) |
| 使用场景 | "查找相似记忆" | "查找实体 X 的所有关系" |
| 存储 | 向量数据库(Qdrant、Pinecone 等) | 图数据库(Neo4j、Neptune 等) |
来源:docs/core-concepts/memory-operations/add.mdx:40-49、docs/core-concepts/memory-operations/search.mdx:32-45、examples/graph-db-demo/neptune-example.ipynb:11-13
架构与集成
系统组件
Memory 类充当编排器。当配置中启用了图谱功能时,它会在向量和图谱存储后端之间进行协调。
来源:docs/open-source/overview.mdx:66-85、docs/open-source/configuration.mdx:59-83、examples/graph-db-demo/neptune-example.ipynb:131-160
并行执行模型
当用户调用 add() 时,Mem0 会同时处理向量和图谱更新。
- 向量路径:从消息中提取事实,并存储在配置的
VectorStore中。 - 图谱路径:将相同的消息传递给图谱子系统进行实体/关系提取。
- 合并:最终响应同时返回向量记忆结果和图谱关系。
来源:docs/core-concepts/memory-operations/add.mdx:40-49、docs/platform/advanced-memory-operations.mdx:111-113
实体与关系模型
节点属性
图中的每个实体节点都包含用于范围限定和检索的属性。
| 属性 | 描述 |
|---|---|
name | 节点的唯一标识符(例如"Alice")。 |
user_id | 用于隔离不同用户之间的图谱。 |
agent_id | 用于隔离不同智能体之间的图谱。 |
embedding | 实体名称的向量表示,用于去重。 |
来源:docs/core-concepts/memory-operations/add.mdx:19-25、docs/core-concepts/memory-operations/search.mdx:19-24、examples/graph-db-demo/neptune-example.ipynb:11-13
关系格式
关系通常以三元组格式提取:source -- RELATIONSHIP -- destination。例如,Alice -- WORKS_AT -- Google。
来源:docs/platform/advanced-memory-operations.mdx:111-113、examples/graph-db-demo/neptune-example.ipynb:11-13
基本用法
初始化
通过配置提供商启用图谱记忆。
# 使用 Amazon Neptune 作为图谱记忆的示例
config = {
"graph_store": {
"provider": "neptune",
"config": {
"endpoint": "neptune-graph://my-graph-identifier",
},
},
"llm": {
"provider": "aws_bedrock",
"config": {"model": "us.anthropic.claude-3-7-sonnet-20250219-v1:0"}
}
}
from mem0 import Memory
m = Memory.from_config(config)
来源:examples/graph-db-demo/neptune-example.ipynb:131-160、docs/open-source/configuration.mdx:59-83
添加与搜索
# 添加记忆会同时触发向量和图谱提取
m.add("我更喜欢东京的精品酒店", user_id="morgan")
# 搜索会检索语义相似的事实以及图谱关系
results = m.search("Morgan 对酒店有什么偏好?", user_id="morgan")
来源:docs/platform/advanced-memory-operations.mdx:73-86、docs/platform/advanced-memory-operations.mdx:122-129
数据流:提取与存储
提取过程利用大语言模型(LLM)识别事实,然后进一步处理为实体和关系。
来源:docs/core-concepts/memory-operations/add.mdx:40-49、docs/platform/advanced-memory-operations.mdx:111-113、examples/graph-db-demo/neptune-example.ipynb:11-13
会话范围限定与隔离
图谱记忆遵循与向量记忆相同的范围限定规则。使用 user_id、agent_id 和 run_id 等过滤器,确保在一个用户上下文中搜索"Alice"时不会返回另一个用户上下文中的"Alice"。
来源:docs/core-concepts/memory-operations/search.mdx:62-64、docs/core-concepts/memory-operations/search.mdx:159-175、docs/core-concepts/memory-types.mdx:50-57