源码深度学习 · 零基础友好 · 20 天

Mem0 源码学习

为 AI Agent 提供可抽取、存储、检索和个性化使用的长期记忆层。这不是 API 速查表,而是一条可以重复走的源码路线:每天用 30 分钟,从一个真实相对路径出发,先用类比建立直觉,再把它接回整条运行链路。

00

开篇 · 这是个什么项目

Mem0 可以先想成一间智能体的长期记忆卡片盒。它的代码不是一堆孤立文件:入口接到需求,核心对象做判断,工具或模型完成工作,状态把结果交给下一个环节。

💡 20 天的主线先找入口和地图,再跟一次真实任务穿过核心循环;随后研究状态、模型、工具与扩展;最后用复盘把全部概念连成一张可迁移的地图。不要背目录名,要不断问「谁创建它、它把什么交给谁」。
大白话读源码像参观工厂:第一天先看门牌和楼层,不急着拆机器。后面每节课只打开一个焦点路径,但始终知道它属于哪层、服务哪个业务动作。
01

架构全景(动起来看)

发光扫过的每一层都是一次任务可能经过的站点。不同仓库命名不同,但「接入 → 编排 → 核心能力 → 资源」的责任边界很相似。

L5 · 接入层
Python/TS SDK本层职责
CLI本层职责
Server本层职责
L4 · 记忆编排
Memory API本层职责
写入本层职责
搜索本层职责
L3 · 智能处理
事实抽取本层职责
实体本层职责
偏好本层职责
L2 · 检索层
向量本层职责
BM25本层职责
重排本层职责
L1 · 持久化
向量库本层职责
SQLite 元数据本层职责
输入用户任务组织对象 / 流程执行模型 / 工具沉淀状态 / 记忆
设计取舍分层会增加跳转文件的次数,却让每层只承担一种职责:入口容易替换,核心逻辑能测试,模型与外部工具可插拔。读代码时先沿箭头追「数据」而不是追每一个类。
02

怎么使用这份教程

⏱️

每天 30 分钟

6 讲,每讲先问问题,再给本质和大白话。

📍

真实相对路径

所有路径都从项目根目录算,不把你的机器路径写进源码引用。

🧪

先验证再推理

每页都有可复制 bash 命令;文件版本变化时以本地实际内容为准。

🧭

可迁移方法

学会从入口、数据结构、循环和扩展点读任何 AI 项目。

S1

阶段 1 · 产品边界与配置

D01-D03 · 产品边界、SDK 与配置
01

认识记忆层问题

README.md:区分短上下文、会话记忆与长期个性化记忆。

≈30 min · 6 讲开始学 →
02

Python 包与依赖

pyproject.toml:理解核心依赖与可选 LLM、向量库 extras。

≈30 min · 6 讲开始学 →
03

配置模型

mem0/configs/base.py:阅读 MemoryConfig、记忆项和后端配置。

≈30 min · 6 讲开始学 →
S2

阶段 2 · 写入记忆路径

D04-D07 · 写入记忆的完整路径
04

Memory 主入口

mem0/memory/main.py:定位 add、search、get、update、delete 的主流程。

≈30 min · 6 讲开始学 →
05

消息规范化

mem0/memory/utils.py:学习消息、视觉消息与模型 JSON 输出解析。

≈30 min · 6 讲开始学 →
06

事实抽取提示词

mem0/configs/prompts.py:理解 ADD-only 事实抽取与 Agent 上下文提示。

≈30 min · 6 讲开始学 →
07

记忆抽象与存储

mem0/memory/base.py:学习 MemoryBase 的职责与扩展边界。

≈30 min · 6 讲开始学 →
S3

阶段 3 · 多路检索与排序

D08-D11 · 多路检索与排序
08

向量检索接口

mem0/vector_stores/base.py:理解插入、搜索、过滤和删除的统一能力。

≈30 min · 6 讲开始学 →
09

Qdrant 具体实现

mem0/vector_stores/qdrant.py:将接口映射到真实向量数据库操作。

≈30 min · 6 讲开始学 →
10

Embedding 适配

mem0/embeddings:理解 OpenAI、本地和云模型的向量化封装。

≈30 min · 6 讲开始学 →
11

混合检索与评分

mem0/utils/scoring.py:学习 BM25、归一化和多信号融合。

≈30 min · 6 讲开始学 →
S4

阶段 4 · 可插拔模型与存储

D12-D14 · 可插拔模型和存储
12

实体提取

mem0/utils/entity_extraction.py:理解实体如何提升关联记忆的召回。

≈30 min · 6 讲开始学 →
13

LLM 抽象

mem0/llms/base.py:学习模型提供商可替换的接口设计。

≈30 min · 6 讲开始学 →
14

工厂模式

mem0/utils/factory.py:追踪 LLM、Embedding、重排器和向量库的装配。

≈30 min · 6 讲开始学 →
S5

阶段 5 · TypeScript 与服务化

D15-D17 · TypeScript SDK 与服务化
15

TypeScript 平台客户端

mem0-ts/src/client/index.ts:比较 TypeScript SDK 与 Python API。

≈30 min · 6 讲开始学 →
16

TS 开源实现

mem0-ts/src/oss:阅读本地记忆、向量库和示例。

≈30 min · 6 讲开始学 →
17

TS 社区集成

mem0-ts/src/community:理解 community 集成包的边界。

≈30 min · 6 讲开始学 →
S6

阶段 6 · 集成、测试与闭环

D18-D20 · 集成、测试和完整应用
18

自托管服务

server:理解 API、Dashboard、认证与 Docker 化边界。

≈30 min · 6 讲开始学 →
19

应用集成示例

integrations/vercel-ai-sdk:学习在 Agent/UI 框架中插入记忆操作。

≈30 min · 6 讲开始学 →
20

测试一条记忆闭环

tests:从测试学习 add → extract → search 的可验证行为。

≈30 min · 6 讲开始学 →