agentic_huge_data_base / wiki
页面 Mem0 · 3 记忆系统·DeepWiki 中文全文译文

3 · 记忆系统(Memory System)

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

项目Mem0 章节3 状态全文译文 模块检索、召回与索引、测试、发布与运维、界面与交互、模型调用与提供方适配
源码线索
  • 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
模块标签
  • 检索、召回与索引
  • 测试、发布与运维
  • 界面与交互
  • 模型调用与提供方适配
  • 系统架构

章节正文

记忆系统

记忆系统

相关源文件

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

  • 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
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
  • mem0/memory/utils.py
  • tests/configs/test_prompts.py
  • tests/memory/test_main.py
  • tests/test_chatty_llm_parsing.py
  • tests/test_main.py
  • tests/test_memory.py
  • tests/test_proxy.py

概述

记忆系统是核心子系统,负责在 Mem0 中存储、检索和管理记忆数据。它协调用户消息、基于大语言模型(LLM)的事实提取、冲突解决以及多后端存储(包括向量存储、图存储和历史数据库)之间的数据流。

该系统通过智能管线处理对话消息,具体流程如下:

  1. 使用大语言模型(LLM)提取关键事实 mem0/memory/main.py:423-456
  2. 解决与现有记忆的冲突 mem0/memory/main.py:496-590
  3. 并发地将数据存储到向量和图后端 mem0/memory/main.py:369-377
  4. 通过 SQLiteManager 维护所有变更的审计追踪 mem0/memory/storage.py:11-19

关键组件:

  • Memory 类:开源实现,提供直接存储访问 mem0/memory/main.py:172
  • MemoryClient 类:用于托管部署的平台 API 客户端。
  • 向量存储:支持语义相似性搜索 mem0/utils/factory.py:101-131
  • 图存储:捕获实体关系 mem0/memory/graph_memory.py:29
  • 历史数据库:提供审计追踪和会话消息持久化 mem0/memory/storage.py:128-148

子页面:

来源: mem0/memory/main.py:172-234mem0/memory/storage.py:11-19docs/core-concepts/memory-operations/add.mdx:8-56

核心架构

记忆系统主要通过 Memory mem0/memory/main.py:172(用于开源部署)和 MemoryClient(用于平台部署)实现。两者提供相同的核心操作,但在存储访问方式上有所不同。

图表:记忆系统组件依赖关系
Mem0 · 图表:记忆系统组件依赖关系 · 图 1
Mem0 · 图表:记忆系统组件依赖关系 · 图 1

来源: mem0/memory/main.py:172-234mem0/utils/factory.py:10-140

组件职责
组件实例属性主要职责初始化方式
向量存储self.vector_store通过嵌入向量进行语义相似性搜索VectorStoreFactory.create() mem0/memory/main.py:183-185
图存储self.graph实体关系查询GraphStoreFactory.create() mem0/memory/main.py:201-204
历史数据库self.db审计追踪与消息存储SQLiteManager() mem0/memory/main.py:187
大语言模型(LLM)self.llm事实提取与冲突解决LlmFactory.create() mem0/memory/main.py:186
嵌入器self.embedding_model为存储和搜索生成向量EmbedderFactory.create() mem0/memory/main.py:178-182
重排序器self.reranker搜索结果优化(可选)RerankerFactory.create() mem0/memory/main.py:191-197

来源: mem0/memory/main.py:172-234mem0/memory/storage.py:11-19

记忆生命周期

记忆系统通过一个多阶段管线处理数据,该管线涉及基于大语言模型(LLM)的智能处理、冲突解决以及双存储写入。

图表:添加操作生命周期
Mem0 · 图表:添加操作生命周期 · 图 2
Mem0 · 图表:添加操作生命周期 · 图 2

来源: mem0/memory/main.py:281-598mem0/memory/main.py:599-608docs/core-concepts/memory-operations/add.mdx:39-49

图表:搜索操作生命周期
Mem0 · 图表:搜索操作生命周期 · 图 3
Mem0 · 图表:搜索操作生命周期 · 图 3

来源: mem0/memory/main.py:758-857mem0/memory/main.py:832-851docs/core-concepts/memory-operations/search.mdx:32-45

双存储架构

记忆系统使用两个并发运行的主要存储后端,外加一个用于变更追踪和消息历史的审计数据库。

存储后端
后端实例属性数据模型操作
向量存储self.vector_store嵌入向量 + 元数据载荷search()get()list()insert()update()delete()
图存储self.graph(可选)实体(节点)+ 关系(边)add()search()get_all()delete_all() mem0/memory/graph_memory.py:29-700
历史数据库self.dbSQLite 审计日志与消息add_history()get_history()save_messages() mem0/memory/storage.py:150-219
图表:并发存储执行
Mem0 · 图表:并发存储执行 · 图 4
Mem0 · 图表:并发存储执行 · 图 4

来源: mem0/memory/main.py:369-377mem0/memory/storage.py:150-219mem0/memory/graph_memory.py:29-194

会话作用域

记忆系统要求至少提供一个会话标识符(user_idagent_idrun_id)来限定所有操作的作用域。这确保了记忆能够在适当的上下文中被组织和检索。

会话标识符要求

所有记忆操作至少需要以下之一:

  • user_id:限定到特定用户。
  • agent_id:限定到特定 AI 代理。
  • run_id:限定到对话或工作流会话。

_build_filters_and_metadata() 函数 mem0/memory/main.py:87-165 会校验这些要求并构建:

  1. base_metadata_template:在存储期间附加到新记忆的元数据。
  2. effective_query_filters:在搜索或列出记忆时应用的过滤器。
图表:过滤器构建流程
Mem0 · 图表:过滤器构建流程 · 图 5
Mem0 · 图表:过滤器构建流程 · 图 5

有关包含逻辑运算符(AND/OR/NOT)和比较运算符的高级过滤功能,请参阅会话作用域与过滤器

来源: mem0/memory/main.py:87-165mem0/memory/main.py:100-110

智能记忆处理

默认情况下,记忆系统使用大语言模型(LLM)进行事实提取和冲突解决,而不是存储原始消息。

两阶段大语言模型(LLM)处理

阶段 1:事实提取 mem0/memory/main.py:423-456

  • 将对话消息转换为结构化事实。
  • 使用专用提示词,如 USER_MEMORY_EXTRACTION_PROMPTAGENT_MEMORY_EXTRACTION_PROMPT mem0/memory/utils.py:15-29
  • 支持通过 self.custom_instructions mem0/memory/main.py:186 提供自定义事实提取提示词。

阶段 2:冲突解决 mem0/memory/main.py:496-590

  • 将新事实与通过向量搜索检索到的现有记忆进行比较。
  • 大语言模型(LLM)确定操作:ADDUPDATEDELETENONE
  • PROCEDURAL_MEMORY_SYSTEM_PROMPT mem0/configs/prompts.py:20 引导。

有关用于确定记忆操作的逻辑详情,请参阅智能记忆处理

来源: mem0/memory/main.py:423-456mem0/memory/main.py:496-590mem0/memory/utils.py:15-29

审计追踪

SQLiteManager mem0/memory/storage.py:11 维护所有记忆修改的完整审计日志,并持久化对话历史。

历史数据库模式

历史表追踪所有记忆生命周期事件:

列名类型内容
idTEXT唯一历史记录 ID
memory_idTEXT受影响记忆的 ID
old_memoryTEXT先前内容(ADD 操作为 NULL)
new_memoryTEXT新内容(DELETE 操作为 NULL)
eventTEXTADD、UPDATE 或 DELETE
actor_idTEXT进行更改的实体
roleTEXTuser 或 assistant
访问历史
# 获取某个记忆的完整历史
history_records = memory.history(memory_id="mem_123")

每个记忆操作(添加/更新/删除)都会调用 self.db.add_history() mem0/memory/storage.py:150-191 来记录更改。

来源: mem0/memory/storage.py:102-149mem0/memory/main.py:1091-1123

部署选项

记忆系统提供两种部署模式:开源(本地 SDK)和平台(托管服务)。

部署对比
特性开源 (Memory)平台 (MemoryClient)
入口点Memory(config) mem0/memory/main.py:172MemoryClient(api_key="...")
存储用户管理的向量/图数据库完全托管的基础设施
配置通过 MemoryConfig mem0/configs/base.py:15 进行精细控制通过仪表盘进行项目级设置
操作add、search、update、delete、get_all、history所有操作 + batch_update、batch_delete
异步支持AsyncMemorymem0/memory/main.py:1411AsyncMemoryClient

有关每种部署模式的详细用法,请参阅:

来源: mem0/memory/main.py:172-234mem0/memory/main.py:1411docs/platform/overview.mdx:18-26

性能与高级特性

并发执行

记忆系统使用 ThreadPoolExecutor mem0/memory/main.py:369-377 并行执行向量和图操作:

# 在 add() 期间并发存储
with concurrent.futures.ThreadPoolExecutor() as executor:
    future1 = executor.submit(self._add_to_vector_store, ...)
    future2 = executor.submit(self._add_to_graph, ...)
    concurrent.futures.wait([future1, future2])
原始消息存储

设置 infer=False 可以绕过基于大语言模型(LLM)的事实提取,直接按原样存储消息 mem0/memory/main.py:387-421

# 存储原始对话数据,不经过智能层处理
memory.add(messages, user_id="alice", infer=False)

此模式会跳过冲突解决,将每条消息作为单独的条目存储在向量存储中。

来源: mem0/memory/main.py:369-377mem0/memory/main.py:387-421docs/core-concepts/memory-operations/add.mdx:117-120