深夜两点,你盯着对话框里那个 AI 助手第三次问出「你叫什么名字?」——你们上周明明聊过三小时的项目规划。你给每个新会话都塞了系统提示词,把用户档案存进数据库再拼回上下文,可它还是记不住。这不是模型能力的问题,是记忆层缺失。Mem0 的出现就是为了解决这个痛点。
什么是 Mem0
Mem0 读作 mem-zero,是一个为 AI 应用提供智能记忆层的开源项目。它不只是一个向量数据库封装,而是一个完整的记忆管理系统:自动从对话中提取事实和偏好,以向量嵌入方式存储,并通过语义搜索、关键词匹配和实体链接的混合检索方式召回相关记忆。它支持用户级、会话级、智能体级等多层级记忆,你可以为不同维度分别存储和检索记忆。
先说结论:截至 2026 年 8 月底,Mem0 在 GitHub 上已有 6.4 万 Star,采用 Apache 2.0 协议。Python SDK 最新版为 2.0.19,Node.js SDK 最新版为 3.1.7,两个 SDK 都是官方持续维护的。项目本身定位很清晰:它同时提供托管云服务和开源自托管两套路径,方便你从原型直接平滑过渡到生产。
安装与最小示例
安装 Python SDK 只需要一条命令,Python 3.10 以上版本即可:
pip install mem0ai
然后创建一个记忆对象。默认情况下,它使用 OpenAI 的 gpt-5-mini 做事实提取、text-embedding-3-small 做嵌入,向量存储用的是本机 Qdrant,历史记录落在 SQLite,你不需要先部署任何基础设施:
import os
from mem0 import Memory
m = Memory()
注意:这个默认配置会调用 OpenAI 的接口,所以需要设置 OPENAI_API_KEY 环境变量。如果你不想用 OpenAI,可以换成 Ollama、Anthropic、Gemini 等 provider,或者把嵌入换成 HuggingFace 本地模型,后面讲自托管时再说。
存入记忆。把一段对话传给 Mem0,它会自动提取关键事实:
messages = [
{"role": "user", "content": "我叫王小明,在北京做后端开发,最近在研究 Go 语言"},
{"role": "assistant", "content": "好的,我记住了。你是在北京工作的 Go 后端开发者。"}
]
m.add(messages, user_id="user_wangxm")
add 方法返回的是 Mem0 提取并存储的记忆条目。每个记忆会附带向量嵌入,供后续语义检索使用。
搜索记忆。当用户发起新会话时,你可以用自然语言查询相关记忆:
results = m.search("这个开发者是谁?做什么工作的?", user_id="user_wangxm")
print(results)
搜索结果按相关性排序。你可以把返回的记忆内容拼接到 LLM 的系统提示词或用户消息中,实现跨会话的上下文延续。带元数据的存储可以让你对记忆做更精细的筛选:
conversation = [
{"role": "user", "content": "我计划五月去日本三周,不吃海鲜"},
{"role": "assistant", "content": "好的,我会记录你的行程和饮食偏好"}
]
m.add(
conversation,
user_id="traveler_42",
metadata={"trip": "japan_2025", "preferences": ["no_shellfish"]}
)
matches = m.search(
"有什么饮食限制?",
filters={"user_id": "traveler_42", "metadata.trip": "japan_2025"}
)
元数据键名建议使用小写加下划线的格式,避免后续出现大小写敏感导致的过滤失效。
为 AI 助手接入记忆:一个完整流程
下面是一个把 Mem0 集成进 AI 助手的完整流程。这个助手每次收到用户消息时,先查询 Mem0 获取相关历史记忆,连同当前消息一起发给 LLM,再把新的对话内容存回 Mem0:
import os
from openai import OpenAI
from mem0 import Memory
openai_client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
mem0 = Memory()
USER_ID = "user_zhangwei"
def chat_with_memory(user_message: str) -> str:
# 1. 检索相关历史记忆
relevant_memories = mem0.search(user_message, user_id=USER_ID)
# 2. 组装上下文
memory_context = ""
results = relevant_memories.get("results", [])
for mem in results[:5]:
memory_context += "- " + mem.get("memory", "") + "
"
system_prompt = (
"你是一个有记忆能力的助手。以下是关于用户的历史记忆:
"
+ (memory_context or "(暂无历史记录)")
+ "
请基于这些记忆和当前问题给出个性化回答。"
)
# 3. 调用 LLM
response = openai_client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_message}
]
)
assistant_reply = response.choices[0].message.content
# 4. 将本轮对话存入记忆
conversation = [
{"role": "user", "content": user_message},
{"role": "assistant", "content": assistant_reply}
]
mem0.add(conversation, user_id=USER_ID)
return assistant_reply
print(chat_with_memory("我叫张伟,是一名产品经理"))
print(chat_with_memory("我上次说了我是做什么的?"))
这个模式的关键在于先查后存:每次对话前检索相关记忆注入上下文,对话后把新信息存入记忆库。随着记忆积累,助手会越来越了解用户。官方的集成列表里还有 LangGraph、CrewAI、AutoGen、LlamaIndex、OpenClaw、Claude Code 等适配,如果你想接进现有的 Agent 框架,通常都能找到现成方案。
生产部署要点
从原型到生产,Mem0 的部署方式需要认真考量。它提供两条主要路径:托管云服务和自托管。托管云服务是最快的上手方式,注册即用,无需管理基础设施,官方按照记忆条数分层定价:免费档提供 1 万条记忆,付费档从每月 19 美元的 Starter 起步,最高档 Pro 每月 249 美元,具体额度以官方页面为准。
自托管适合对数据主权和成本敏感的场景。官方参考栈由 Docker Compose 编排:一个运行 REST API 和 Web 仪表盘的 mem0 服务,外加一个带 pgvector 扩展的 PostgreSQL,API 端口是 8888,仪表盘端口是 3000。配置走环境变量,下面是最核心的几个。首先是 .env 文件:
OPENAI_API_KEY=your_openai_api_key
JWT_SECRET=your_jwt_secret
ADMIN_API_KEY=your_admin_api_key
其中 JWT_SECRET 是必填的,服务在认证开启状态下缺少它就不会启动。ADMIN_API_KEY 属于兼容旧版本的共享管理密钥,新部署建议按官方文档走安装向导生成管理员账号和每用户 API Key。对应的启动配置示意如下:
services:
mem0:
build: .
ports:
- "8888:8000"
depends_on:
postgres:
condition: service_healthy
environment:
- OPENAI_API_KEY=$OPENAI_API_KEY
- JWT_SECRET=$JWT_SECRET
volumes:
- ./history:/app/history
postgres:
image: ankane/pgvector
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=your_password
healthcheck:
test: ["CMD", "pg_isready"]
interval: 5s
生产环境中还需要注意几个关键点。
认证与安全。自托管服务的认证默认开启,AUTH_DISABLED=true 只用于本地开发,官方明确说明生产环境禁止使用。暴露到公网前必须配置反向代理并启用 HTTPS,API Key 应通过 Kubernetes Secrets、Docker Secrets 或云平台的环境变量注入,不要把密钥写进代码仓库。
向量数据库选型。Python SDK 默认使用本机 Qdrant,如果你想换成别的后端,官方支持 pgvector、Chroma、Pinecone、Redis、Weaviate、Milvus、Elasticsearch 等选项。pgvector 适合已经使用 PostgreSQL 的中小规模部署;如果记忆量达到百万级,可以考虑 Qdrant 或 Pinecone 这类专门的向量数据库,检索延迟更可控。
记忆的增长与修正。需要理解一个关键语义:add 是增量追加,它不会自动覆盖或删除旧记忆。当用户改变了偏好或者存储了错误事实,你要主动调用 update 或 delete 来做修正,官方 API 还支持一次批量删除最多 1000 条记忆。如果不在上层应用设计记忆修剪或老化策略,存储成本会随使用时间持续上升。
离线部署。默认配置下,提取和嵌入都依赖 OpenAI 的 API。如果要完全离线运行,需要把 LLM 和嵌入模型换成本地 provider,比如用 Ollama 跑 LLM、用 HuggingFace 的 sentence-transformers 做嵌入,官方文档给了一步步替换的方法。注意自托管镜像默认只捆绑 openai、anthropic、gemini 三类 provider,要加别的需要自己把依赖装进镜像。
生产环境选型:Mem0 与替代方案
走到生产部署这一步,你需要回答一个问题:Mem0 是不是当前场景的最佳选择?2026 年的 AI 记忆层赛道已经有多个成熟方案,各有侧重。下面这张表把几个主流方案的定位放在一起:
| 方案 | 架构特点 | 适合场景 | 备注 |
|---|---|---|---|
| Mem0 | 自动提取加语义检索的记忆层 | 通用记忆、快速接入 | Apache 2.0,托管加自托管 |
| Zep | 时序知识图谱 | 时间线推理、实体关系演进 | 托管服务为主 |
| Letta | 三层内存架构,核心、召回、归档 | 长时间运行的自主智能体 | 原名 MemGPT |
| Hindsight | 从原始事实自动综合观察 | 生产记忆基础设施 | 可本地自托管 |
| LangMem | LangGraph 原生记忆 | LangChain 生态深度用户 | 与 LangGraph 深度绑定 |
Mem0 适合追求快速接入和开箱即用体验的场景。它的优势在于官方 SDK 覆盖 Python 和 Node.js 两个生态,托管服务成熟,集成示例覆盖主流 Agent 框架。如果你需要一个通用的记忆层,不依赖复杂时间线推理,Mem0 是比较稳妥的选择。
Zep 基于时序知识图谱架构,在时间线推理方面有明显优势。如果你的应用需要处理复杂的实体关系和时间线演进,比如客服系统追踪工单状态、法律文书的时间线梳理,Zep 会更合适,这类场景用纯向量检索往往答不准。
Letta(原名 MemGPT)提供类似操作系统的三层记忆架构,核心、召回、归档分层管理,适合需要精细控制智能体内存状态的长时间运行场景,目前 GitHub 上约 2.4 万 Star。
Hindsight 是较新的方案,主打从原始事实中自动综合出结构化的观察,可用于自托管的生产记忆基础设施。LangMem 则是 LangChain 生态的原生选择,如果你已经深度使用 LangGraph,它的接入成本最低。
选择建议:
- 追求最快落地、多语言支持、愿意使用托管服务,选 Mem0
- 需要时间线推理和复杂实体关系,选 Zep
- 长时间运行的自主智能体,需要精细内存控制,选 Letta
- 数据必须留在本地、零 API 成本,考虑 Hindsight 或 Mem0 自托管
- 已深度使用 LangChain 或 LangGraph,选 LangMem
另外,需要留意的是:Mem0 官方披露的基准分数,比如 LoCoMo 92.5 分、LongMemEval 94.4 分,来自官方 evaluation 页,按照 top_200 检索预算给出,尚未经过独立第三方全面验证。评估时最好用自己的数据集做实际测试,尤其是 BEAM 这种百万级 token 规模的基准,它的分数会明显低于小规模的 LoCoMo。
从一条 pip install 到生产级部署,Mem0 提供了一条从零到一的清晰路径。先跑通最小示例,用托管服务验证效果,再根据数据主权和成本需求决定是否自托管——这是目前最务实的落地节奏。