Mem0 项目解读:AI Agent 长期记忆层到底怎么设计

Agent 记忆不能只靠聊天记录续命
很多 Agent 产品一开始都会遇到同一个问题:
用户昨天已经说过自己不吃海鲜,今天再问旅行餐厅推荐,Agent 又推荐了一家海鲜餐厅。
你告诉它项目用的是 PostgreSQL,下一轮新会话里它又按 MySQL 写 SQL。
客服 Agent 已经处理过某个用户的退款单,用户下次进来还要从头解释一遍。
这些问题看起来像“上下文不够长”。
但我觉得更准确地说,它们是“没有一层可治理的长期记忆”。
上下文窗口再长,也有几个问题解决不了:
- 成本会越来越高;
- 历史里噪声很多;
- 用户偏好、项目事实、临时任务状态混在一起;
- 旧事实和新事实可能冲突;
- 多个 Agent 之间很难共享同一套记忆;
- 记忆是否能写入、能召回、能删除,都需要治理。
所以 Agent Memory 不是简单地“把历史塞回 Prompt”。
它更像 Agent 运行时外面的一层基础设施:
对话 / 工具结果 / 用户反馈
-> 提取值得记的事实
-> 按用户、会话、Agent、组织分层存储
-> 下一次任务按范围检索
-> 注入当前上下文
-> 更新、删除、审计和评测
Mem0 值得写,就是因为它比较完整地把这条链路产品化、SDK 化和工具化了。
一句话讲清 Mem0
Mem0 可以理解成:
给 AI Agent 和 LLM 应用提供的一层通用长期记忆基础设施,负责从交互中提取可复用记忆,按作用域存储,并在未来任务中检索回来。
这句话里有三个关键词。
第一,长期记忆。
Mem0 不是只保存当前会话。它强调跨 session、跨用户、跨 Agent 的记忆复用,尤其适合个人助手、客服、教育、销售、医疗、生产力工具这类需要连续性的应用。
第二,基础设施。
它不只是一个算法 demo,而是有 SDK、CLI、MCP Server、开源版本、自托管服务、托管平台、API、Dashboard、评测框架和多框架集成。
第三,作用域。
Mem0 文档里反复强调 user_id、run_id、agent_id、metadata、filters。也就是说,记忆不是全局乱放,而是要回答:这条记忆属于谁?在哪个任务里有效?未来谁可以读取?
这点很重要。
因为 Agent Memory 的问题,从来不只是“能不能记住”,还包括“能不能记对范围”。
为什么说 mem0 是 Agent 记忆方向的热门项目
mem0 火,不只是因为“记忆”这个概念火。
更关键的是,它踩中了 Agent 落地时很具体的痛点:
模型会回答,但不会持续了解用户。
Agent 能执行任务,但不会沉淀历史经验。
RAG 能查文档,但不擅长维护用户偏好和跨会话事实。
长上下文能塞历史,但成本和噪声都很高。
Mem0 的定位刚好在这些问题中间。
它不像传统 RAG 那样只面向文档问答,也不像普通聊天记录那样无差别保存历史。它试图把对话中“值得长期复用的信息”抽出来,变成未来可检索的记忆。
官方文档给出的典型场景也很清楚:
- AI assistants:保持连续对话;
- Customer support:记住历史工单和用户背景;
- Healthcare:追踪偏好和历史;
- Productivity / gaming:让环境根据用户行为适应。
对 Agent 开发者来说,这个项目还有一个现实吸引力:
它可以用很少的代码先接起来。
比如最小思路就是:
from mem0 import Memory
memory = Memory()
memory.add(
[
{"role": "user", "content": "I prefer concise answers."},
{"role": "assistant", "content": "Got it. I will keep answers short."}
],
user_id="alice"
)
results = memory.search(
"How should I answer Alice?",
filters={"user_id": "alice"},
top_k=3
)
这段代码的意义不在语法,而在抽象:
Agent 不需要自己从零实现 memory extraction、embedding、vector store、metadata filter、reranker、conflict handling。它只需要在合适时机调用 add,在回答前调用 search。
这就是 mem0 项目的切入点:把 Memory 从“每个团队自己手搓的一段逻辑”变成一层可复用组件。

Mem0 的核心流程:Add 和 Search
要理解 mem0,先抓两个动作就够了:
add 写入记忆
search 读取记忆
其他 update、delete、get、events、dashboard、MCP,本质上都是围绕这两个动作展开。
Add:不是存原文,而是提取值得记的事实
Mem0 文档里 add 的核心流程大致是:
输入消息
-> LLM 提取关键事实、偏好、目标、决策
-> 检查已有记忆,避免重复或冲突
-> 存入向量存储和相关元数据
-> 返回 memory_id
这比“保存聊天记录”多了一步:提取。
比如用户说:
我下个月去东京,别给我推荐海鲜,我更喜欢精品酒店。
Mem0 不应该只是把这句话整段塞进数据库。更合理的是提取成几条可复用记忆:
用户下个月计划去东京。
用户避免海鲜。
用户偏好精品酒店。
这样未来搜索“有什么饮食禁忌”“酒店偏好是什么”“旅行目的地是哪里”时,都能更容易召回。
这也是 Memory 和普通消息日志的差别:
| 方式 | 存什么 | 典型问题 |
|---|---|---|
| 原始聊天记录 | 完整对话 | 噪声多,检索成本高 |
| RAG chunk | 文档片段 | 更偏资料检索,不一定是用户状态 |
| Mem0 memory | 提取后的事实、偏好、决策 | 需要控制提取质量和更新策略 |
当然,这里也有风险。
一旦提取错了,记忆就会长期影响后续任务。所以后面我会专门讲治理边界。
Search:不是全量塞历史,而是按问题找相关记忆
search 的核心目标是:
当前问题 -> 找到少量相关记忆 -> 给 Agent 当前轮使用
Mem0 文档里的搜索流程包含 query processing、vector search、filtering、reranking 和结果返回。
这说明它不是简单 SELECT * FROM memories,而是带有作用域和排序的检索。
最重要的工程建议是:搜索时一定要带作用域。
比如:
memory.search(
"What does the user prefer?",
filters={"user_id": "alice"}
)
如果不按 user_id、agent_id、run_id 或 metadata 过滤,就容易出现记忆串号:
- A 用户的偏好被 B 用户召回;
- 测试会话里的假数据进入正式回答;
- 一个 Agent 的结论被另一个 Agent 误用;
- 上一个项目的技术栈污染下一个项目。
这也是为什么我觉得 mem0 的重点不只是向量搜索,而是“带作用域的记忆检索”。
Memory 的默认错误不一定是“搜不到”,更常见的是“搜到了不该搜的东西”。

记忆分层:user、session、agent、organization
Mem0 文档里把记忆分成多个层次。
我觉得可以这样理解:
| 层级 | 生命周期 | 适合存什么 |
|---|---|---|
| Conversation memory | 单次响应或当前轮 | 当前工具结果、临时上下文 |
| Session / run memory | 一个任务或一个会话 | 当前 onboarding、一次排障、一次旅行规划 |
| User memory | 跨会话长期存在 | 用户偏好、长期目标、账户状态 |
| Agent memory | 某个 Agent 的经验 | 工具使用偏好、执行策略、历史失败 |
| Organization memory | 多 Agent / 多用户共享 | 产品 FAQ、政策、团队规范 |
这张表很关键。
因为很多 Memory 系统一开始失败,不是存储能力不够,而是把不同生命周期的信息混在了一起。
举个例子。
用户在一次调试任务里说:
这次先跳过单元测试,我们只看编译错误。
这句话最多应该进入 session memory。
如果它被写成 user memory,后面 Agent 可能长期认为“这个用户偏好跳过单元测试”。这就是脏记忆。
再比如客服场景里:
用户当前工单的退款状态是银行处理中。
这条信息和一个具体工单、具体时间相关,不应该变成长期用户画像。
所以接 mem0 时,不能只关心“怎么 add”,还要先设计记忆分类:
哪些信息只活在 run_id 里?
哪些信息可以进 user_id?
哪些信息属于 agent_id?
哪些信息可以进入 organization shared memory?
哪些信息根本不应该写入?
这一步比接 SDK 更重要。
新算法的方向:ADD-only、实体链接、多信号检索
Mem0 2026 年的研究页面和文档里,提到一个很值得注意的变化:新的 token-efficient memory algorithm。
我不把它写成“性能数字宣传”,而是更关注它背后的设计方向。
1. ADD-only:旧事实不覆盖,新事实并存
传统记忆系统很容易做 UPDATE / DELETE。
比如用户以前说“我住北京”,后来又说“我搬到上海了”。系统可能直接把北京更新成上海。
这看起来很干净,但会丢掉时间线。
如果未来问题是:
用户什么时候搬家的?
用户以前住在哪里?
为什么之前推荐北京活动,现在推荐上海?
只保留最新事实就不够了。
Mem0 新算法强调 ADD-only extraction:新事实写入,旧事实不直接覆盖。信息变化时,旧事实和新事实都保留,用时间和检索来决定当前任务该用哪条。
这对 Agent Memory 很重要。
长期记忆不只是一个 profile 表,它更像事件流。
很多事实都有时间范围:
- 用户以前喜欢 A,现在喜欢 B;
- 项目以前用 MySQL,现在迁到 PostgreSQL;
- 订单上周是 pending,现在是 refunded;
- Agent 以前推荐过方案 1,后来用户否定了。
如果系统只保存最终状态,就很难做时间推理,也难以审计“这条记忆为什么存在”。
2. Agent-generated facts 也要进入记忆
Mem0 新算法还强调:Agent 生成并确认过的事实,也是一等记忆。
这点容易被忽略。
很多记忆系统只记用户说了什么,不记 Agent 做了什么。结果是:
用户:帮我把默认语言改成中文。
Agent:已完成。
如果只记用户请求,不记 Agent 已经完成动作,下一次 Agent 可能不知道这件事已经做过。
在真实 Agent 系统里,记忆来源至少有三类:
| 来源 | 示例 | 风险 |
|---|---|---|
| 用户输入 | 我喜欢简洁回答 | 可能是临时偏好 |
| 工具结果 | 订单状态为已退款 | 可能过期 |
| Agent 行为 | 已经帮用户更新设置 | 需要确认是否真的成功 |
Agent 行为进入记忆是必要的,但也要加证据。
不能因为 Agent 自己说“已完成”,就永久记成事实。更稳的是把它和工具返回、事件 ID、时间戳绑定起来。
3. Multi-signal retrieval:不能只靠向量相似度
Mem0 新检索里提到 semantic similarity、BM25 keyword、entity matching 多路信号融合。
这点很符合我对 Agent Memory 的判断。
长期记忆检索不能只靠语义相似。
因为很多记忆查询需要精确匹配:
- 用户 Alice 说过什么;
- 上周三发生了什么;
- 某个订单 ID 的状态;
- 某个项目名对应的技术栈;
- 某个 Agent 上次失败在哪里。
向量相似度适合找语义相关内容,但不一定擅长处理实体、时间、ID、否定、版本、冲突。
所以更可靠的记忆检索通常需要组合:
semantic search 找语义相关
keyword / BM25 找精确词和 ID
entity matching 找人、项目、组织、对象
metadata filter 控制作用域
rerank 做最后排序
这也是 mem0 的一个重要价值:它把 Memory 当成检索系统,而不是简单的 embedding demo。
MCP 接入:让 Agent 自己决定何时写记忆
Mem0 还有一个很有意思的方向:MCP Server。
它把 memory 能力暴露成一组 MCP tools,比如:
add_memorysearch_memoriesget_memoriesget_memoryupdate_memorydelete_memorydelete_all_memorieslist_entitieslist_events
这对 Coding Agent、桌面 Agent、个人助手很有吸引力。
因为这意味着 Agent 可以在自己的工具列表里直接拥有“记忆能力”:
当前任务需要历史偏好 -> search_memories
用户明确说以后都这样 -> add_memory
发现旧记忆过期 -> update_memory 或 delete_memory
需要审计发生了什么 -> list_events
但这里也要谨慎。
给 Agent 记忆工具,不等于允许它随便记。
我更推荐把写入分成三个等级:
| 写入等级 | 场景 | 是否自动 |
|---|---|---|
| 自动写入 | 低风险偏好、明确事实、任务完成记录 | 可以 |
| 待确认写入 | 长期偏好、项目规范、用户画像 | 最好确认 |
| 禁止写入 | 密码、密钥、隐私、医疗敏感信息、高风险推断 | 不写 |
尤其是 delete_all_memories 这类工具,必须有人工确认或权限控制。
Memory 是长期状态,不是普通上下文。写错一次,可能影响很多次未来任务。
Platform 和 Open Source:这是两个不同使用场景
Mem0 同时提供托管平台和开源版本。
从官方文档看,二者定位很清楚:
| 形态 | 适合谁 | 代价 |
|---|---|---|
| Platform | 想快速上线、少管基础设施的团队 | 数据和运行依赖托管服务 |
| Open Source Library | 原型验证、嵌入本地应用 | 需要自己配置 LLM、embedding、vector store |
| Self-hosted Server | 需要数据控制、私有化部署的团队 | 需要运维 auth、dashboard、向量库、升级 |
如果只是写一个 demo,用 Python/Node SDK 就够了。
如果是生产业务,而且没有强隐私和私有化要求,Platform 会省很多基础设施成本。
如果是企业内部知识、代码 Agent、医疗/金融/工业数据,最好认真评估自托管。
原因很简单:
Agent Memory 里存的不是普通缓存,而是长期用户状态、业务事实、偏好、历史行为和可能的敏感上下文。
这类数据一旦被召回,就会参与模型决策。
所以选型时不要只问“哪个接入快”,还要问:
记忆数据存在哪里?
谁能导出?
谁能删除?
有没有审计日志?
能不能按租户隔离?
能不能跑在内网?
默认 LLM 和 embedding 模型是什么?
是否会把敏感信息发给第三方模型?
对生产系统来说,Memory 是状态层,不是工具小插件。
和普通 RAG 的区别
很多人会问:mem0 和 RAG 有什么区别?
我的理解是:
RAG 更像“根据当前问题查资料”,Mem0 更像“持续维护可复用的用户/Agent 状态”。
二者当然会用到相似技术,比如 embedding、向量搜索、rerank、metadata filter。
但目标不一样。
| 维度 | RAG | Mem0 |
|---|---|---|
| 输入 | 文档、知识库、网页、PDF | 对话、用户反馈、Agent 行为、工具结果 |
| 核心问题 | 当前问题需要哪些证据 | 未来任务应该记住什么 |
| 存储对象 | chunk、文档片段 | 事实、偏好、事件、决策、状态 |
| 更新方式 | 文档更新、重建索引 | 交互中持续 add/search/update/delete |
| 主要风险 | 引错资料、召回不准 | 脏记忆、越权召回、旧事实干扰 |
| 价值 | 知识增强 | 连续性和个性化 |
这也是为什么我觉得 mem0 不应该被理解成“又一个向量数据库包装”。
它的核心抽象是 memory lifecycle:
什么时候写?
写成什么?
写到哪个作用域?
下次怎么搜?
搜出来怎么用?
错了怎么改?
过期怎么删?
效果怎么评测?
这些问题才是 Agent Memory 的工程核心。

用 mem0 时最容易踩的坑
mem0 本身不能替你解决所有 Memory 问题。
它提供了基础设施,但治理规则仍然要自己设计。
1. 什么都写
最常见的错误是:每轮对话都 add。
这会导致记忆库很快充满噪声。
比如:
“好的”
“继续”
“你刚才说错了”
“换个说法”
“这次先这样”
这些话不一定值得长期保存。
更好的方式是定义写入规则:
用户明确表达长期偏好 -> 写
任务最终结论已验证 -> 写
工具返回的重要状态 -> 视情况写
临时讨论和中间猜测 -> 不写
2. 不设计作用域
如果所有记忆都按一个全局空间存,迟早会串。
至少要区分:
- user memory;
- session / run memory;
- agent memory;
- organization memory;
- test memory;
- production memory。
测试数据和生产数据也不要混。
3. 把召回结果直接塞给模型
搜索结果不等于真相。
Mem0 搜出来的是“相关记忆”,不是“当前一定有效的事实”。
真正稳的做法是给记忆加可信字段:
{
"memory": "Alice prefers boutique hotels",
"source": "user_statement",
"created_at": "2026-06-15",
"scope": "user",
"confidence": "high",
"status": "active"
}
模型使用时应该知道:这是用户明确说的,还是 Agent 推断的;是当前有效,还是历史信息。
4. 不做删除和审计
长期记忆必须能删。
用户偏好会变,业务规则会变,隐私要求也会变。没有 delete、update、event log 的 Memory,很容易变成不可治理的历史垃圾堆。
Mem0 MCP 和平台里有 delete、list_events 这类能力,真正上线时要把它们纳入产品设计,而不是只用 add/search。
5. 只看准确率,不看 token 和延迟
Mem0 官方文档里有一句很关键的判断:Memory evaluation 不只是 accuracy,还要看 cost 和 latency。
这点非常工程化。
如果一个系统靠每次塞 25K tokens 历史来拿高分,它不一定适合生产。生产里更关心的是:在有限 token、有限延迟、有限成本下,能不能召回正确记忆。
所以评测 Agent Memory 时,至少要看:
- 召回是否正确;
- 平均注入 token;
- p95 latency;
- 错误召回率;
- 过期记忆命中率;
- 跨用户污染率;
- 删除后是否仍被召回;
- 隐私字段是否被写入。
这比单纯看“回答像不像”更有意义。

如果我来接 mem0,会先做一个最小闭环
我不会一上来就把所有历史都接进去。
更稳的方式是先选一个低风险、强收益场景。
比如个人 AI 助手:
第一阶段:只记用户显式偏好
第二阶段:记任务完成记录
第三阶段:记长期项目约定
第四阶段:接 MCP,让 Agent 自己建议写入
第五阶段:加审计、删除、评测和数据导出
或者客服 Agent:
第一阶段:只记用户授权的偏好和历史工单摘要
第二阶段:按 user_id + ticket_id 做严格过滤
第三阶段:把退款、投诉、敏感字段排除出自动记忆
第四阶段:支持用户查看和删除记忆
第五阶段:定期评估召回是否串号和过期
最小闭环可以这样设计:
1. 写入规则
只有明确偏好、已完成任务、经过工具验证的事实可以写入。
2. 作用域设计
所有 search 必须带 user_id;任务态用 run_id;共享知识用 org scope。
3. 检索前置
Agent 回答前先 search 相关记忆,但 top_k 保持很小。
4. 使用说明
注入 Prompt 时标明:以下是历史记忆,不一定代表当前事实。
5. 更新和删除
用户纠正时 update;用户撤回时 delete;敏感信息不写。
6. 评测
每周用固定样本测记忆召回、串号、过期、成本和延迟。
这个闭环比“先把 mem0 接上再说”更可靠。
因为 Memory 一旦进入生产,就会变成 Agent 的长期状态。长期状态必须先设计边界。
我的判断:mem0 的价值在于把 Memory 变成可治理接口
我之前写过 Agent Memory,也写过记忆污染。
看 mem0 这个项目时,我最大的感受是:它把 Memory 这件事从“概念讨论”推到了“工程接口”。
它提供了几个很关键的抽象:
add 什么时候写入记忆
search 怎么按范围检索记忆
update 怎么修正记忆
delete 怎么遗忘记忆
filters 怎么控制作用域
events 怎么审计记忆操作
MCP 怎么让 Agent 自己调用记忆工具
eval 怎么评估记忆系统不是在乱召回
这些东西放在一起,才像一个生产级 Memory layer。
当然,它不是万能答案。
长期记忆仍然有几个未完全解决的问题:
- 什么信息值得写入,仍需要业务规则;
- 旧事实和新事实如何解释,仍需要时间建模;
- 搜到相关记忆不等于适合当前任务;
- 用户隐私和删除权必须进入产品设计;
- Agent 自己写记忆时必须有权限和审计;
- 记忆被污染后要能发现和回滚。
所以我不会把 mem0 理解成“接上就有长期记忆”。
更准确的理解是:
Mem0 提供了一套可用的记忆基础设施,但真正可靠的 Agent Memory,还要靠作用域、写入策略、检索约束、审计和评测共同完成。
总结
Agent 要长期有用,必须记住一些东西。
但记忆不是越多越好,也不是把聊天记录全部塞进向量库就完事。
Mem0 这个项目值得关注,是因为它把 Agent Memory 拆成了一组工程动作:
提取
存储
分层
检索
更新
删除
审计
评测
集成
这比“给 Agent 加个向量库”更接近生产系统。
对开发者来说,mem0 最值得学习的不是某个 API,而是它背后的判断:
Agent Memory 应该是一层可治理的长期状态系统,而不是一堆历史上下文。
未来 Agent 越来越多,工具越来越多,任务越来越长,Memory 会从锦上添花变成基础设施。
而 mem0 这样的项目,正是在把这层基础设施补起来。
参考资料
- Mem0 GitHub:https://github.com/mem0ai/mem0
- Mem0 Documentation: Build with Mem0:https://docs.mem0.ai/introduction
- Mem0 Platform Overview:https://docs.mem0.ai/platform/overview
- Mem0 Memory Types:https://docs.mem0.ai/core-concepts/memory-types
- Mem0 Add Memory:https://docs.mem0.ai/core-concepts/memory-operations/add
- Mem0 Search Memory:https://docs.mem0.ai/core-concepts/memory-operations/search
- Mem0 MCP:https://docs.mem0.ai/platform/mem0-mcp
- Mem0 Open Source Overview:https://docs.mem0.ai/open-source/overview
- Mem0 Memory Evaluation:https://docs.mem0.ai/core-concepts/memory-evaluation
- Mem0 Research: Benchmarking a Token-Efficient Memory Algorithm for AI Agents:https://mem0.ai/research
- Mem0 paper: Building Production-Ready AI Agents with Scalable Long-Term Memory:https://arxiv.org/html/2504.19413v1

2063

被折叠的 条评论
为什么被折叠?



