Mem0 AI 记忆管理
一句话概述
Mem0(读作"mem-zero")是一个为 AI 应用提供智能记忆层的开源工具,让 AI 助手能记住用户偏好、跨对话学习和持续适应,解决了 LLM "金鱼记忆"(每次对话都是从零开始)的问题,已获 $24M 融资。
核心知识点表格
| 知识点 | 说明 |
|---|
| 项目地址 | https://github.com/mem0ai/mem0 |
| 官网 | https://mem0.ai |
| 最新版本 | v2.0.2(2026年5月) |
| 核心功能 | AI 应用的长期记忆管理 |
| 记忆范围 | User(用户级)/ Session(会话级)/ Agent(代理级) |
| 存储后端 | 19 种向量数据库 + 图数据库 |
| 许可证 | Apache 2.0 |
| 融资 | $24M(2025年10月) |
| 部署方式 | 云端 API / 自托管 |
安装与配置
方式一:pip 安装(最简单)
# 基础安装
pip install mem0ai # 安装 Mem0 Python SDK
# 带 NLP 增强的安装(推荐,支持混合搜索和实体提取)
pip install "mem0ai[nlp]" # 包含 BM25 关键词匹配和实体提取
# 带图记忆的安装
pip install "mem0ai[graph]" # 包含 Neo4j 图数据库支持
方式二:使用云端 API
from mem0 import MemoryClient # 导入云端客户端
# 使用 Mem0 Cloud(无需自己管理基础设施)
client = MemoryClient(api_key="m0-xxx") # 在 app.mem0.ai 注册获取 Key
自托管配置
from mem0 import Memory # 导入本地 Memory 类
# 自托管配置(使用 Ollama 本地模型 + Chroma 向量库)
config = {
"llm": {
"provider": "ollama", # 使用 Ollama 本地 LLM
"config": {
"model": "llama3.1:8b", # 模型名
"base_url": "http://localhost:11434" # Ollama 地址
}
},
"embedder": {
"provider": "ollama", # 嵌入模型也用 Ollama
"config": {
"model": "nomic-embed-text", # 嵌入模型名
"base_url": "http://localhost:11434"
}
},
"vector_store": {
"provider": "chroma", # 使用 Chroma 向量数据库
"config": {
"collection_name": "mem0", # 集合名
"path": "./mem0_data" # 本地存储路径
}
}
}
# 创建记忆实例
memory = Memory.from_config(config) # 用配置初始化
基本使用
添加记忆
from mem0 import Memory
memory = Memory() # 使用默认配置(OpenAI + Qdrant)
# 添加用户记忆
memory.add(
"我叫彭文强,是2026届生物信息学专业的毕业生", # 要记住的信息
user_id="pengwq" # 用户标识
)
memory.add(
"我的毕业论文方向是2型糖尿病肠道菌群宏基因组分析",
user_id="pengwq"
)
memory.add(
"我使用conda管理Python环境,主要环境有t2d_ml和bioinfo",
user_id="pengwq"
)
搜索记忆
# 根据问题搜索相关记忆
results = memory.search(
"这个用户的研究方向是什么?", # 搜索查询
user_id="pengwq" # 指定用户
)
for mem in results["results"]:
print(f"记忆: {mem['memory']}") # 记忆内容
print(f"相关度: {mem['score']}") # 相关度分数
print("---")
获取所有记忆
# 获取某个用户的所有记忆
all_memories = memory.get_all(user_id="pengwq")
for mem in all_memories["results"]:
print(f"ID: {mem['id']}") # 记忆 ID
print(f"内容: {mem['memory']}") # 记忆内容
print(f"创建时间: {mem['created_at']}") # 创建时间
更新和删除记忆
# 更新某条记忆
memory.update(
memory_id="mem-id-xxx", # 记忆 ID
data="我已经找到了生信工程师的工作" # 新内容
)
# 删除某条记忆
memory.delete(memory_id="mem-id-xxx")
# 删除某用户的所有记忆
memory.delete_all(user_id="pengwq")
高级用法
三级记忆范围
# User 级记忆:跨所有对话持久化
memory.add(
"用户偏好:中文回答,加白话解释",
user_id="pengwq" # 用户级
)
# Session 级记忆:单次对话内的上下文
memory.add(
"本次对话在讨论 Snakemake 工作流",
user_id="pengwq",
session_id="session-20260511" # 会话级
)
# Agent 级记忆:特定 AI 代理的记忆
memory.add(
"这个代理负责生物信息学教学",
agent_id="bioinfo-tutor" # 代理级
)
图记忆(Graph Memory)
from mem0 import Memory
# 配置图记忆(需要 Neo4j)
config = {
"graph_store": {
"provider": "neo4j", # 图数据库
"config": {
"url": "bolt://localhost:7687", # Neo4j 地址
"username": "neo4j",
"password": "password"
}
},
"version": "v1.1" # 启用图记忆需要 v1.1
}
memory = Memory.from_config(config)
# 添加的信息会自动提取实体和关系
memory.add(
"彭文强的导师是张教授,张教授专注于宏基因组研究",
user_id="pengwq"
)
# 自动建立关系:彭文强 → 导师 → 张教授
# 张教授 → 专注于 → 宏基因组研究
在对话中使用记忆
import openai
from mem0 import Memory
memory = Memory()
client = openai.Client()
def chat_with_memory(user_id, message):
"""带记忆的对话函数"""
# 第一步:搜索相关记忆
relevant_memories = memory.search(message, user_id=user_id)
memory_context = "\n".join([m["memory"] for m in relevant_memories["results"]])
# 第二步:构造带记忆的提示词
system_prompt = f"""你是一个AI助手。以下是你对这个用户的了解:
{memory_context}
请根据这些记忆个性化你的回答。"""
# 第三步:调用 LLM
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": message}
]
)
answer = response.choices[0].message.content
# 第四步:把这次对话也存入记忆
memory.add(f"用户问: {message}\nAI回答: {answer}", user_id=user_id)
return answer
# 使用
print(chat_with_memory("pengwq", "帮我复习一下 Alpha 多样性的概念"))
# AI 会参考之前的记忆,知道用户是生信方向,用白话解释
FastEmbed 本地嵌入
# 使用 FastEmbed 实现完全本地化(无需调用外部 API)
config = {
"embedder": {
"provider": "fastembed", # 使用 FastEmbed
"config": {
"model": "BAAI/bge-small-en-v1.5" # 嵌入模型
}
},
"llm": {
"provider": "ollama",
"config": {
"model": "llama3.1:8b",
"base_url": "http://localhost:11434"
}
}
}
memory = Memory.from_config(config)
# 整个记忆系统完全在本地运行,零 API 调用费用
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
OpenAI API key not found | 未设置 API Key | 设置环境变量 OPENAI_API_KEY 或使用本地 LLM |
Vector store connection failed | 向量数据库未启动 | 启动对应的向量数据库(Chroma/Qdrant/etc) |
Memory not found | 记忆 ID 不存在 | 先用 get_all() 获取正确的记忆 ID |
NLP dependencies missing | 缺少 NLP 依赖 | 安装 pip install "mem0ai[nlp]" |
Neo4j connection error | 图数据库配置错误 | 检查 Neo4j 地址、用户名、密码 |
Rate limit exceeded | 云端 API 请求过频 | 降低请求频率或升级套餐 |
速查表
# === Mem0 Python SDK 速查 ===
from mem0 import Memory
m = Memory() # 初始化
# 添加记忆
m.add("内容", user_id="user1")
m.add("内容", user_id="user1", session_id="s1") # 会话级
m.add("内容", agent_id="agent1") # 代理级
# 搜索记忆
m.search("查询", user_id="user1")
# 获取所有记忆
m.get_all(user_id="user1")
# 获取单条记忆
m.get(memory_id="xxx")
# 更新记忆
m.update(memory_id="xxx", data="新内容")
# 删除记忆
m.delete(memory_id="xxx")
m.delete_all(user_id="user1")
# 记忆历史
m.history(memory_id="xxx")
与同类工具对比
| 特性 | Mem0 | LangChain Memory | Zep | 自建方案 |
|---|
| 记忆提取 | 自动(LLM驱动) | 手动管理 | 自动 | 需自建 |
| 图记忆 | 支持 | 不支持 | 支持 | 需自建 |
| 多级范围 | User/Session/Agent | Session 为主 | User/Session | 需自建 |
| 向量存储 | 19 种后端 | 多种 | 内置 | 需选择 |
| 冲突解决 | 自动 | 无 | 有限 | 需自建 |
| 上手难度 | 简单 | 中等 | 中等 | 困难 |
| 云端服务 | 有 | 有 | 有 | 无 |
| 开源 | Apache 2.0 | MIT | 部分开源 | 取决于实现 |
选择建议:如果你在做需要记忆的 AI 应用(聊天机器人、个人助手、客服系统),Mem0 是最成熟的开箱即用方案。如果已经深度使用 LangChain,可以先试试 LangChain 内置的 Memory 模块。