记忆系统(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/mem0ai/mem0/3-memory-system
翻译时间:2026-05-27T08:45:09.195Z
翻译模型:deepseek-chat
原文字符数:16660
项目:Mem0 (mem0)
---
记忆系统
相关源文件
以下文件用于生成本维基页面:
docs/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.mdxmem0/__init__.pymem0/configs/prompts.pymem0/memory/main.pymem0/memory/storage.pymem0/memory/utils.pytests/configs/test_prompts.pytests/memory/test_main.pytests/test_chatty_llm_parsing.pytests/test_main.pytests/test_memory.pytests/test_proxy.py
概述
记忆系统是核心子系统,负责在 Mem0 中存储、检索和管理记忆数据。它协调用户消息、基于大语言模型(LLM)的事实提取、冲突解决以及多后端存储(包括向量存储、图存储和历史数据库)之间的数据流。
该系统通过智能管线处理对话消息,具体流程如下:
- 使用大语言模型(LLM)提取关键事实
mem0/memory/main.py:423-456 - 解决与现有记忆的冲突
mem0/memory/main.py:496-590 - 并发地将数据存储到向量和图后端
mem0/memory/main.py:369-377 - 通过
SQLiteManager维护所有变更的审计追踪mem0/memory/storage.py:11-19
关键组件:
Memory类:开源实现,提供直接存储访问mem0/memory/main.py:172MemoryClient类:用于托管部署的平台 API 客户端。- 向量存储:支持语义相似性搜索
mem0/utils/factory.py:101-131 - 图存储:捕获实体关系
mem0/memory/graph_memory.py:29 - 历史数据库:提供审计追踪和会话消息持久化
mem0/memory/storage.py:128-148
子页面:
- 记忆类(开源) — 直接存储配置与使用
- MemoryClient(平台) — 托管 API 客户端使用
- 记忆操作 — 详细操作参数与示例
- 会话作用域与过滤器 — user_id、agent_id、run_id 过滤
- 异步操作 — 异步模式与性能
- 代理集成 — 在大语言模型(LLM)调用中自动注入记忆
- 智能记忆处理 — 基于大语言模型(LLM)的事实提取与去重
来源: mem0/memory/main.py:172-234、mem0/memory/storage.py:11-19、docs/core-concepts/memory-operations/add.mdx:8-56
核心架构
记忆系统主要通过 Memory mem0/memory/main.py:172(用于开源部署)和 MemoryClient(用于平台部署)实现。两者提供相同的核心操作,但在存储访问方式上有所不同。
图表:记忆系统组件依赖关系
graph TB
Memory["Memory<br/>(mem0/memory/main.py:172)"]
MemoryConfig["MemoryConfig<br/>(mem0/configs/base.py)"]
VectorStoreFactory["VectorStoreFactory<br/>(mem0/utils/factory.py)"]
GraphStoreFactory["GraphStoreFactory<br/>(mem0/utils/factory.py)"]
LlmFactory["LlmFactory<br/>(mem0/utils/factory.py)"]
EmbedderFactory["EmbedderFactory<br/>(mem0/utils/factory.py)"]
RerankerFactory["RerankerFactory<br/>(mem0/utils/factory.py)"]
vector_store["self.vector_store<br/>(VectorStoreBase)"]
graph["self.graph<br/>(MemoryGraph)"]
db["self.db<br/>(SQLiteManager)"]
llm["self.llm<br/>(BaseLlm)"]
embedding_model["self.embedding_model<br/>(BaseEmbedder)"]
reranker["self.reranker<br/>(BaseReranker)"]
MemoryConfig --> Memory
Memory --> VectorStoreFactory
Memory --> GraphStoreFactory
Memory --> LlmFactory
Memory --> EmbedderFactory
Memory --> RerankerFactory
VectorStoreFactory --> vector_store
GraphStoreFactory --> graph
LlmFactory --> llm
EmbedderFactory --> embedding_model
RerankerFactory --> reranker
Memory --> vector_store
Memory --> graph
Memory --> db
Memory --> llm
Memory --> embedding_model
Memory --> reranker
来源: mem0/memory/main.py:172-234、mem0/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-234、mem0/memory/storage.py:11-19
记忆生命周期
记忆系统通过一个多阶段管线处理数据,该管线涉及基于大语言模型(LLM)的智能处理、冲突解决以及双存储写入。
图表:添加操作生命周期
sequenceDiagram
participant Client
participant Memory_add["Memory.add()<br/>(main.py:281)"]
participant LLM["self.llm"]
participant Embedder["self.embedding_model"]
participant VectorStore["self.vector_store"]
participant GraphStore["self.graph"]
participant History["self.db"]
Client->>Memory_add: "add(messages, user_id, ...)"
Note over Memory_add,LLM: 阶段 1:事实提取
Memory_add->>LLM: "从消息中提取事实"
LLM-->>Memory_add: "{'facts': [...]}"
Note over Memory_add,VectorStore: 阶段 2:冲突检测
loop "对每个事实"
Memory_add->>Embedder: "embed(fact)"
Embedder-->>Memory_add: "嵌入向量"
Memory_add->>VectorStore: "搜索相似记忆"
VectorStore-->>Memory_add: "现有记忆"
end
Note over Memory_add,LLM: 阶段 3:冲突解决
Memory_add->>LLM: "确定 ADD/UPDATE/DELETE/NONE"
LLM-->>Memory_add: "{'memory': [{'event': ..., 'text': ...}]}"
Note over Memory_add,History: 阶段 4:并发存储
par "双存储"
Memory_add->>VectorStore: "insert/update/delete"
Memory_add->>GraphStore: "添加实体/关系"
end
Memory_add->>History: "add_history(event, ...)"
Memory_add-->>Client: "{'results': [...]}"
来源: mem0/memory/main.py:281-598、mem0/memory/main.py:599-608、docs/core-concepts/memory-operations/add.mdx:39-49
图表:搜索操作生命周期
sequenceDiagram
participant Client
participant Memory_search["Memory.search()<br/>(main.py:758)"]
participant Embedder["self.embedding_model"]
participant VectorStore["self.vector_store"]
participant GraphStore["self.graph"]
participant Reranker["self.reranker"]
Client->>Memory_search: "search(query, user_id, filters, ...)"
Note over Memory_search,Embedder: 查询嵌入
Memory_search->>Embedder: "embed(query)"
Embedder-->>Memory_search: "查询向量"
Note over Memory_search,GraphStore: 并发检索
par "向量 + 图搜索"
Memory_search->>VectorStore: "search(vectors, filters, limit)"
VectorStore-->>Memory_search: "vector_memories"
Memory_search->>GraphStore: "search(query, filters, limit)"
GraphStore-->>Memory_search: "graph_entities"
end
Note over Memory_search,Reranker: 可选优化
opt "rerank=True 且已配置重排序器"
Memory_search->>Reranker: "rerank(query, memories, limit)"
Reranker-->>Memory_search: "reranked_memories"
end
Memory_search-->>Client: "{'results': [...]}"
来源: mem0/memory/main.py:758-857、mem0/memory/main.py:832-851、docs/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.db | SQLite 审计日志与消息 | add_history()、get_history()、save_messages() mem0/memory/storage.py:150-219 |
图表:并发存储执行
graph LR
add_operation["Memory.add()"]
ThreadPoolExecutor["ThreadPoolExecutor<br/>(main.py:369)"]
vector_write["_add_to_vector_store()<br/>(main.py:386)"]
graph_write["_add_to_graph()<br/>(main.py:599)"]
vector_store["self.vector_store"]
graph_store["self.graph"]
history_db["self.db"]
add_operation --> ThreadPoolExecutor
ThreadPoolExecutor --> vector_write
ThreadPoolExecutor --> graph_write
vector_write --> vector_store
vector_write --> history_db
graph_write --> graph_store
来源: mem0/memory/main.py:369-377、mem0/memory/storage.py:150-219、mem0/memory/graph_memory.py:29-194
会话作用域
记忆系统要求至少提供一个会话标识符(user_id、agent_id 或 run_id)来限定所有操作的作用域。这确保了记忆能够在适当的上下文中被组织和检索。
会话标识符要求
所有记忆操作至少需要以下之一:
user_id:限定到特定用户。agent_id:限定到特定 AI 代理。run_id:限定到对话或工作流会话。
_build_filters_and_metadata() 函数 mem0/memory/main.py:87-165 会校验这些要求并构建:
base_metadata_template:在存储期间附加到新记忆的元数据。effective_query_filters:在搜索或列出记忆时应用的过滤器。
图表:过滤器构建流程
graph LR
operation["Memory 操作<br/>(add/search/get_all/delete_all)"]
build_filters["_build_filters_and_metadata()<br/>(main.py:87)"]
session_ids["user_id, agent_id, run_id"]
metadata["输入元数据"]
filters["输入过滤器"]
base_metadata["base_metadata_template<br/>(用于存储)"]
effective_filters["effective_query_filters<br/>(用于检索)"]
operation --> build_filters
session_ids --> build_filters
metadata --> build_filters
filters --> build_filters
build_filters --> base_metadata
build_filters --> effective_filters
base_metadata --> vector_write["向量/图写入"]
effective_filters --> vector_search["向量/图搜索"]
有关包含逻辑运算符(AND/OR/NOT)和比较运算符的高级过滤功能,请参阅会话作用域与过滤器。
来源: mem0/memory/main.py:87-165、mem0/memory/main.py:100-110
智能记忆处理
默认情况下,记忆系统使用大语言模型(LLM)进行事实提取和冲突解决,而不是存储原始消息。
两阶段大语言模型(LLM)处理
阶段 1:事实提取 mem0/memory/main.py:423-456
- 将对话消息转换为结构化事实。
- 使用专用提示词,如
USER_MEMORY_EXTRACTION_PROMPT或AGENT_MEMORY_EXTRACTION_PROMPTmem0/memory/utils.py:15-29。 - 支持通过
self.custom_instructionsmem0/memory/main.py:186提供自定义事实提取提示词。
阶段 2:冲突解决 mem0/memory/main.py:496-590
- 将新事实与通过向量搜索检索到的现有记忆进行比较。
- 大语言模型(LLM)确定操作:
ADD、UPDATE、DELETE或NONE。 - 由
PROCEDURAL_MEMORY_SYSTEM_PROMPTmem0/configs/prompts.py:20引导。
有关用于确定记忆操作的逻辑详情,请参阅智能记忆处理。
来源: mem0/memory/main.py:423-456、mem0/memory/main.py:496-590、mem0/memory/utils.py:15-29
审计追踪
SQLiteManager mem0/memory/storage.py:11 维护所有记忆修改的完整审计日志,并持久化对话历史。
历史数据库模式
历史表追踪所有记忆生命周期事件:
| 列名 | 类型 | 内容 |
|---|---|---|
| id | TEXT | 唯一历史记录 ID |
| memory_id | TEXT | 受影响记忆的 ID |
| old_memory | TEXT | 先前内容(ADD 操作为 NULL) |
| new_memory | TEXT | 新内容(DELETE 操作为 NULL) |
| event | TEXT | ADD、UPDATE 或 DELETE |
| actor_id | TEXT | 进行更改的实体 |
| role | TEXT | user 或 assistant |
访问历史
# 获取某个记忆的完整历史
history_records = memory.history(memory_id="mem_123")
每个记忆操作(添加/更新/删除)都会调用 self.db.add_history() mem0/memory/storage.py:150-191 来记录更改。
来源: mem0/memory/storage.py:102-149、mem0/memory/main.py:1091-1123
部署选项
记忆系统提供两种部署模式:开源(本地 SDK)和平台(托管服务)。
部署对比
| 特性 | 开源 (Memory) | 平台 (MemoryClient) |
|---|---|---|
| 入口点 | Memory(config) mem0/memory/main.py:172 | MemoryClient(api_key="...") |
| 存储 | 用户管理的向量/图数据库 | 完全托管的基础设施 |
| 配置 | 通过 MemoryConfig mem0/configs/base.py:15 进行精细控制 | 通过仪表盘进行项目级设置 |
| 操作 | add、search、update、delete、get_all、history | 所有操作 + batch_update、batch_delete |
| 异步支持 | AsyncMemory 类 mem0/memory/main.py:1411 | AsyncMemoryClient 类 |
有关每种部署模式的详细用法,请参阅:
来源: mem0/memory/main.py:172-234、mem0/memory/main.py:1411、docs/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-377、mem0/memory/main.py:387-421、docs/core-concepts/memory-operations/add.mdx:117-120