🗺️Mem0 源码解析系列(一):记忆是如何被添加的
2026-4-9
| 2026-4-9
Words 2668Read Time 7 min
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 的记忆添加流程可以概括为以下架构:
整体架构流程图
整体架构流程图
核心文件位于 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 向量存储支持

七、完整流程示例

让我们用一个完整示例串联整个过程:
端到端示例流程
端到端示例流程

流程拆解:

  1. 提取事实
      • LLM 从对话中提取:["Name is 张三", "Likes 拿铁 coffee"]
  1. 搜索相似记忆
      • 在向量数据库中搜索相似的记忆
      • 结果:未找到相似记忆(假设是新用户)
  1. 决策操作
      • LLM 决定:两条事实都需要 ADD
  1. 执行操作
      • 创建两条记忆记录
      • 生成 embedding 并存入向量数据库
  1. 图存储
      • 提取实体:{"张三": "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

九、总结

通过这次源码解析,我们了解到:
  1. Mem0 的记忆添加不只是简单的存储,而是包含了:
      • 智能事实提取
      • 相似性检索
      • 增删改决策
      • 双存储架构
  1. 核心设计理念
      • 用 LLM 智能管理记忆生命周期
      • 向量存储处理事实检索
      • 图存储处理实体关系
      • 并行处理提升效率
  1. 提示词工程是 Mem0 的核心
      • 事实提取提示词定义了 7 种信息类型
      • 记忆更新提示词定义了 4 种操作类型
      • 这些精心设计的提示词是 Mem0 智能管理的关键

十、系列预告

通过这篇文章,了解了 Mem0 的记忆添加流程,包括智能事实提取、相似性检索、增删改决策以及双存储架构。接下来,我们将深入探讨 Mem0 的提示词工程,了解如何通过精心设计的提示词来实现智能管理。 - 第二篇:提示词工程的深度解析
敬请期待!

相关代码文件: - mem0/memory/main.py:核心 Memory 类 - mem0/memory/graph_memory.py:图存储实现 - mem0/configs/prompts.py:提示词定义 - mem0/utils/factory.py:各种工厂类
  • agent
  • Mem0
  • 长期记忆
  • AI 日报 — 2026年03月30日 周一Mem0-给AI-Agent装上长期记忆
    Loading...