type
Post
status
Published
date
Apr 9, 2026
slug
mem0-source-code-analysis-2
summary
本文深入解析 Mem0 记忆添加机制,揭示其双存储架构(向量存储+图存储)如何实现智能记忆管理。通过源码剖析,详解 LLM 驱动的事实提取、相似性检索、增删改决策等核心流程,展现 Mem0 如何用提示词工程实现高效记忆生命周期管理,适合开发者理解 AI 记忆系统设计。
tags
agent
Mem0
长期记忆
category
agent
icon
password
这是 Mem0 源码解析系列的第一篇文章。我们将深入探讨 Mem0 的核心功能——记忆添加机制,理解其背后的设计思路和实现细节。
一、引言
Mem0(“mem-zero”)是一个为 AI 应用提供长期记忆层的开源项目。它能让 AI 助手记住用户偏好、适应个性化需求,并持续学习——非常适合客户支持聊天机器人、AI 助手和自主系统等场景。

Mem0 概念与应用场景
在阅读源码之前,我一直好奇:
- Mem0 是如何从对话中提取有价值的信息?
- 它如何决定是添加新记忆、更新旧记忆,还是删除过期记忆?
- 向量存储和图存储分别扮演什么角色?
带着这些问题,让我们开始探索。
二、整体架构
Mem0 的记忆添加流程可以概括为以下架构:

整体架构流程图
核心文件位于
mem0/memory/main.py,主要涉及:
- Memory.add():入口方法
- _add_to_vector_store():向量存储逻辑
- _add_to_graph():图存储逻辑三、入口方法:Memory.add()
让我们从入口方法开始(位于
mem0/memory/main.py:281):3.1 参数解析
- messages:输入内容,可以是字符串、字典或消息列表
- 字符串:
"我喜欢喝咖啡" - 单条消息:
{"role": "user", "content": "我喜欢喝咖啡"} - 消息列表:
[{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]
- user_id/agent_id/run_id:会话标识符,用于隔离不同用户/会话的记忆
- infer:是否使用 LLM 推理(默认 True)
- True:提取事实并智能管理记忆
- False:直接存储原始消息
- memory_type:记忆类型(如 “procedural_memory” 用于程序性记忆)
3.2 核心流程
add() 方法的核心逻辑(简化版):这里有个关键设计:并行执行。向量存储和图存储的添加是独立进行的,提高了效率。
四、向量存储添加:_add_to_vector_store()
这是最核心的部分,位于
mem0/memory/main.py:386。4.1 两种模式
模式一:infer=False(直接存储)
当
infer=False 时,不经过 LLM 处理,直接存储原始消息:模式二:infer=True(智能推理)
这是默认模式,流程更复杂:

智能推理四步流程
4.2 步骤详解
步骤1:提取事实
使用 LLM 从对话中提取有价值的”事实”:
提示词示例(位于
mem0/configs/prompts.py:14):步骤2:搜索相似记忆
对每个新提取的事实,在向量数据库中搜索相似的记忆:
步骤3:决定操作类型
使用 LLM 分析新旧记忆,决定操作类型:

四种操作类型决策图
决策提示词(位于
mem0/configs/prompts.py:175)定义了四种操作:决策提示词(位于
mem0/configs/prompts.py:175)定义了四种操作:示例决策过程:
步骤4:执行操作
根据决策结果执行相应的 CRUD 操作:
4.3 记忆创建细节
_create_memory() 方法(mem0/memory/main.py:1075):五、图存储添加:_add_to_graph()
图存储用于存储实体和关系,适合处理复杂的知识网络。
5.1 入口方法
位于
mem0/memory/main.py:599:5.2 图存储核心逻辑
位于
mem0/memory/graph_memory.py:76,主要步骤:5.3 实体提取示例
使用 LLM 提取实体和类型:
5.4 关系建立示例
使用 LLM 建立实体间的关系:
最终存入 Neo4j 图数据库:
六、关键组件介绍
6.1 LLM 工厂模式
Mem0 使用工厂模式支持多种 LLM:
6.2 Embedding 生成
6.3 向量存储支持
七、完整流程示例
让我们用一个完整示例串联整个过程:

端到端示例流程
流程拆解:
- 提取事实:
- LLM 从对话中提取:
["Name is 张三", "Likes 拿铁 coffee"]
- 搜索相似记忆:
- 在向量数据库中搜索相似的记忆
- 结果:未找到相似记忆(假设是新用户)
- 决策操作:
- LLM 决定:两条事实都需要 ADD
- 执行操作:
- 创建两条记忆记录
- 生成 embedding 并存入向量数据库
- 图存储:
- 提取实体:
{"张三": "person", "拿铁": "drink"} - 建立关系:
张三 -[:likes]-> 拿铁 - 存入 Neo4j
八、设计亮点

设计亮点总结
8.1 智能推理 vs 直接存储
Mem0 提供两种模式:
-
infer=True:智能提取、去重、更新,适合生产环境
- infer=False:直接存储,适合需要完整保留原始对话的场景8.2 双存储架构

双存储对比图
- 向量存储:快速相似性搜索,适合检索场景
- 图存储:实体关系管理,适合复杂知识网络
两者互补,提供更全面的记忆能力。
8.3 并行处理
向量存储和图存储并行执行,提高效率:
8.4 提示词工程
Mem0 的提示词设计非常精细:
- 事实提取提示词包含详细的分类指南和示例
- 记忆更新提示词定义了清晰的 ADD/UPDATE/DELETE/NONE 规则
- 支持自定义提示词(
custom_fact_extraction_prompt)九、总结
通过这次源码解析,我们了解到:
- Mem0 的记忆添加不只是简单的存储,而是包含了:
- 智能事实提取
- 相似性检索
- 增删改决策
- 双存储架构
- 核心设计理念:
- 用 LLM 智能管理记忆生命周期
- 向量存储处理事实检索
- 图存储处理实体关系
- 并行处理提升效率
- 提示词工程是 Mem0 的核心:
- 事实提取提示词定义了 7 种信息类型
- 记忆更新提示词定义了 4 种操作类型
- 这些精心设计的提示词是 Mem0 智能管理的关键
十、系列预告
通过这篇文章,了解了 Mem0 的记忆添加流程,包括智能事实提取、相似性检索、增删改决策以及双存储架构。接下来,我们将深入探讨 Mem0 的提示词工程,了解如何通过精心设计的提示词来实现智能管理。
- 第二篇:提示词工程的深度解析
敬请期待!
相关代码文件:
-
mem0/memory/main.py:核心 Memory 类
- mem0/memory/graph_memory.py:图存储实现
- mem0/configs/prompts.py:提示词定义
- mem0/utils/factory.py:各种工厂类