agentic_huge_data_base / wiki
页面 Mem0 · 4.1 图谱记忆总览·DeepWiki 中文全文译文

4.1 · 图谱记忆总览(Graph Memory Overview)

长期记忆与上下文管理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mem0 章节4.1 状态全文译文 模块图谱与关系、系统架构、检索、召回与索引、测试、发布与运维
源码线索
  • docs/components/vectordbs/dbs/neptune_analytics.mdx
  • docs/core-concepts/memory-operations/add.mdx
  • docs/core-concepts/memory-operations/delete.mdx
  • docs/core-concepts/memory-operations/search.mdx
  • docs/core-concepts/memory-operations/update.mdx
  • docs/core-concepts/memory-types.mdx
  • docs/open-source/configuration.mdx
  • docs/open-source/overview.mdx
  • docs/platform/advanced-memory-operations.mdx
  • docs/platform/features/platform-overview.mdx
模块标签
  • 图谱与关系
  • 系统架构
  • 检索、召回与索引
  • 测试、发布与运维
  • 界面与交互

章节正文

图谱记忆总览

图谱记忆概述

相关源文件

本章引用的主要源码文件:

  • docs/components/vectordbs/dbs/neptune_analytics.mdx
  • docs/core-concepts/memory-operations/add.mdx
  • docs/core-concepts/memory-operations/delete.mdx
  • docs/core-concepts/memory-operations/search.mdx
  • docs/core-concepts/memory-operations/update.mdx
  • docs/core-concepts/memory-types.mdx
  • docs/open-source/configuration.mdx
  • docs/open-source/overview.mdx
  • docs/platform/advanced-memory-operations.mdx
  • docs/platform/features/platform-overview.mdx
  • docs/platform/overview.mdx
  • examples/graph-db-demo/neptune-example.ipynb
  • mem0/configs/enums.py
  • mem0/configs/vector_stores/neptune.py
  • mem0/configs/vector_stores/supabase.py
  • mem0/vector_stores/neptune_analytics.py
  • tests/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-48docs/platform/advanced-memory-operations.mdx:67-68examples/graph-db-demo/neptune-example.ipynb:11-13

图谱记忆与向量记忆对比

下图展示了单条信息的不同处理路径。

对比:自然语言到代码实体空间
Mem0 · 对比:自然语言到代码实体空间 · 图 1
Mem0 · 对比:自然语言到代码实体空间 · 图 1
方面向量记忆图谱记忆
结构扁平嵌入向量节点和边
查询语义相似性搜索关系遍历
去重文本相似度/冲突解决通过嵌入向量进行实体匹配
关系隐式(通过嵌入向量)显式(通过边)
使用场景"查找相似记忆""查找实体 X 的所有关系"
存储向量数据库(Qdrant、Pinecone 等)图数据库(Neo4j、Neptune 等)

来源:docs/core-concepts/memory-operations/add.mdx:40-49docs/core-concepts/memory-operations/search.mdx:32-45examples/graph-db-demo/neptune-example.ipynb:11-13

架构与集成

系统组件

Memory 类充当编排器。当配置中启用了图谱功能时,它会在向量和图谱存储后端之间进行协调。

Mem0 · 系统组件 · 图 2
Mem0 · 系统组件 · 图 2

来源:docs/open-source/overview.mdx:66-85docs/open-source/configuration.mdx:59-83examples/graph-db-demo/neptune-example.ipynb:131-160

并行执行模型

当用户调用 add() 时,Mem0 会同时处理向量和图谱更新。

  1. 向量路径:从消息中提取事实,并存储在配置的 VectorStore 中。
  2. 图谱路径:将相同的消息传递给图谱子系统进行实体/关系提取。
  3. 合并:最终响应同时返回向量记忆结果和图谱关系。

来源:docs/core-concepts/memory-operations/add.mdx:40-49docs/platform/advanced-memory-operations.mdx:111-113

实体与关系模型

节点属性

图中的每个实体节点都包含用于范围限定和检索的属性。

属性描述
name节点的唯一标识符(例如"Alice")。
user_id用于隔离不同用户之间的图谱。
agent_id用于隔离不同智能体之间的图谱。
embedding实体名称的向量表示,用于去重。

来源:docs/core-concepts/memory-operations/add.mdx:19-25docs/core-concepts/memory-operations/search.mdx:19-24examples/graph-db-demo/neptune-example.ipynb:11-13

关系格式

关系通常以三元组格式提取:source -- RELATIONSHIP -- destination。例如,Alice -- WORKS_AT -- Google

来源:docs/platform/advanced-memory-operations.mdx:111-113examples/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-160docs/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-86docs/platform/advanced-memory-operations.mdx:122-129

数据流:提取与存储

提取过程利用大语言模型(LLM)识别事实,然后进一步处理为实体和关系。

Mem0 · 数据流:提取与存储 · 图 3
Mem0 · 数据流:提取与存储 · 图 3

来源:docs/core-concepts/memory-operations/add.mdx:40-49docs/platform/advanced-memory-operations.mdx:111-113examples/graph-db-demo/neptune-example.ipynb:11-13

会话范围限定与隔离

图谱记忆遵循与向量记忆相同的范围限定规则。使用 user_idagent_idrun_id 等过滤器,确保在一个用户上下文中搜索"Alice"时不会返回另一个用户上下文中的"Alice"。

来源:docs/core-concepts/memory-operations/search.mdx:62-64docs/core-concepts/memory-operations/search.mdx:159-175docs/core-concepts/memory-types.mdx:50-57