Mem0 实战:给 AI 应用加上长期记忆,从 Hello World 到生产用法

0 阅读9分钟

深夜两点,你盯着对话框里那个 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从原始事实自动综合观察生产记忆基础设施可本地自托管
LangMemLangGraph 原生记忆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 提供了一条从零到一的清晰路径。先跑通最小示例,用托管服务验证效果,再根据数据主权和成本需求决定是否自托管——这是目前最务实的落地节奏。