跳转至

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")

与同类工具对比

特性Mem0LangChain MemoryZep自建方案
记忆提取自动(LLM驱动)手动管理自动需自建
图记忆支持不支持支持需自建
多级范围User/Session/AgentSession 为主User/Session需自建
向量存储19 种后端多种内置需选择
冲突解决自动有限需自建
上手难度简单中等中等困难
云端服务
开源Apache 2.0MIT部分开源取决于实现

选择建议:如果你在做需要记忆的 AI 应用(聊天机器人、个人助手、客服系统),Mem0 是最成熟的开箱即用方案。如果已经深度使用 LangChain,可以先试试 LangChain 内置的 Memory 模块。