入门 📋 7 个步骤 第 432 / 470 篇

给 Agent 接上长期记忆:用 Mem0 做跨会话记忆层

用 Mem0 给 Agent 加一层跨会话、跨用户的持久记忆:Memory().add 存事实、Memory().search 检索、在 Agent 循环里注入系统提示,并支持更新/删除与平台版 MemoryClient。

2026.09.14· 17 分钟阅读· 约 1017 字· 🧠 Mem0 / 💾 长期记忆

没有记忆的 Agent,每次对话都像"失忆患者"——用户上一句说"我是素食者",下一句它就推荐荤菜。Mem0 是一个专为 Agent 设计的记忆层:你把对话片段喂给它,它会自动抽出"事实"存好,需要时按用户/标签/语义检索出来再注入提示词。本教程从装包到接进 Agent 循环,全程可跑。

🧠 本教程适合:想让 Agent"记住"用户偏好、历史上下文的开发者/产品同学。需要 Python 3.10+;开源版默认用 OpenAI 做抽取与向量化。

先搞懂:记忆层解决什么?

用一句话理解:Mem0 把"用户说过的话"变成"可检索的事实库",Agent 每次回答前先查这个库,再决定怎么答。它负责存储、抽取、去重、检索,你的 Agent 逻辑只管"规划 + 调工具",不用自己维护一大坨对话历史。

操作Mem0 API作用
存add(messages, user_id)抽取事实并存储
取search(query, filters)按用户/语义检索
改update / delete更新或遗忘某条

Step 1:安装并配置

1 pip 装好,配好抽取模型
pip install mem0ai
export OPENAI_API_KEY="sk-..."   # 开源版默认用 OpenAI 做事实抽取与向量化
💡 不想用 OpenAI?Mem0 开源版可换 Ollama / Anthropic / 本地嵌入,具体见 Mem0 配置文档(改 Memory 的 config 即可)。

Step 2:初始化 Memory

2 一行拿到记忆对象
from mem0 import Memory

m = Memory()

默认存储位置要知道。开源版 Memory() 默认把向量存到 /tmp/qdrant、历史存到 ~/.mem0。涉及真实用户隐私数据,请改用私有部署 / 自托管向量库,别用默认本地路径裸奔。

Step 3:存一条记忆

3 add 自动拆成事实

把一段对话(角色 + 内容)交给 add,Mem0 会自动把"我是 Alex,喜欢篮球和游戏"拆成多条独立事实分别存:

messages = [
  {"role": "user", "content": "我是 Alex,喜欢篮球和游戏。"},
  {"role": "assistant", "content": "好的,我会记住你的兴趣。"},
]
m.add(messages, user_id="alex")
🔑 关键:用 user_id 区分不同用户。这样检索时只取该用户的事实,不会把 A 的偏好泄露给 B。

Step 4:检索记忆

4 search 按用户过滤
results = m.search("你了解我什么?", filters={"user_id": "alex"})
for r in results["results"]:
    print(r["memory"])
# 可能输出:
# 喜欢篮球
# 喜欢游戏
# 名字是 Alex

Step 5:在 Agent 循环里用记忆

5 注入系统提示

把检索到的记忆拼进系统提示,Agent 跨会话、跨用户都一致:

import openai

def chat(user_id: str, user_input: str) -> str:
    mem = m.search(user_input, filters={"user_id": user_id})
    memory_block = "\n".join(f"- {x['memory']}" for x in mem["results"])

    sys_prompt = f"你是助手,遵循已知记忆:\n{memory_block}"
    resp = openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": sys_prompt},
            {"role": "user", "content": user_input},
        ],
    )
    return resp.choices[0].message.content
🧩 这正是"记忆层"的价值:Agent 代码不必维护长对话历史,只管"先查 Mem0、再回答"。新会话、新进程都能拿到同一份记忆。

Step 6:更新与遗忘

6 修正错误、响应撤回
m.update(memory_id, text="新事实文本")  # 修正
m.delete(memory_id)                    # 删除(用户撤回 / 合规)

合规红线:用户要求删除数据要真删。涉及 GDPR / 个人信息保护时,必须走 delete 并保留操作审计,不能只"在提示里忽略"。Mem0 平台版自带治理与审计能力。

Step 7:平台版(MemoryClient,可选)

7 免运维、带治理

不想自己管向量库和抽取管线,可以用 Mem0 平台版,API 几乎一致:

from mem0 import MemoryClient

client = MemoryClient(api_key="your-mem0-key")
client.add(messages, user_id="alex")
results = client.search("...", filters={"user_id": "alex"})
🏢 平台版免运维、带治理(SOC 2 / HIPAA / 审计),适合生产;开源版适合自托管和本地调试。按团队实际合规要求选择。

常见问题速查

现象原因 & 解决
add 报错 401OPENAI_API_KEY 未配置(开源版默认用它抽取)
检索串味(A 看到 B)search 没传 filters={"user_id": ...}
本地存储找不到检查 /tmp/qdrant 与 ~/.mem0 权限
要换模型改 Memory 的 config,见 Mem0 配置文档
← 返回教程中心