Graph 记忆总览(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/mem0ai/mem0/4.1-graph-memory-overview
翻译时间:2026-05-27T08:44:56.395Z
翻译模型:deepseek-chat
原文字符数:9692
项目:Mem0 (mem0)
---
图谱记忆概述
相关源文件
以下文件被用作生成此 Wiki 页面的上下文:
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
图谱记忆与向量记忆对比
下图展示了单条信息的不同处理路径。
对比:自然语言到代码实体空间
graph TB
subgraph "自然语言输入"
Input["'Alice works at Google'"]
end
subgraph "向量记忆管线(代码空间)"
VM_Main["Memory.add()"]
VM_LLM["基于LLM的事实提取"]
VM_Store["VectorStoreBase.insert()"]
Input --> VM_Main
VM_Main --> VM_LLM
VM_LLM --> VM_Store
end
subgraph "图谱记忆管线(代码空间)"
GM_Main["MemoryGraph._add_to_graph()"]
GM_Tools["LLM工具调用"]
GM_Store["GraphStoreBase.add_node_relationships()"]
Input --> GM_Main
GM_Main --> GM_Tools
GM_Tools --> GM_Store
end
| 方面 | 向量记忆 | 图谱记忆 |
|---|---|---|
| 结构 | 扁平嵌入向量 | 节点和边 |
| 查询 | 语义相似性搜索 | 关系遍历 |
| 去重 | 文本相似度/冲突解决 | 通过嵌入向量进行实体匹配 |
| 关系 | 隐式(通过嵌入向量) | 显式(通过边) |
| 使用场景 | "查找相似记忆" | "查找实体 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 类充当编排器。当配置中启用了图谱功能时,它会在向量和图谱存储后端之间进行协调。
graph TB
subgraph "核心编排"
Main["Memory(开源版)/ MemoryClient(平台版)"]
end
subgraph "图谱子系统"
MG["MemoryGraph / GraphStoreFactory"]
GStore["NeptuneGraph / Neo4jGraph / KuzuGraph"]
end
subgraph "支持工具"
LLM["LlmFactory"]
Embed["EmbedderFactory"]
Hist["History(SQLiteManager / Postgres)"]
end
Main -->|"初始化"| MG
MG -->|"使用"| GStore
MG -->|"提取"| LLM
MG -->|"匹配"| Embed
Main -->|"审计追踪"| Hist
来源: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)识别事实,然后进一步处理为实体和关系。
sequenceDiagram
participant M as 记忆编排器
participant MG as 图谱模块
participant LLM as LLM 提供商
participant GS as 图存储(例如 Neptune)
M->>MG: 从消息中提取
MG->>LLM: 识别实体与关系
LLM-->>MG: 提取的三元组
MG->>GS: 合并节点和关系
GS-->>MG: 成功
MG-->>M: 图谱元数据
来源: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