最近在做一个客服 Agent 项目,对话轮次经常超过 50 轮,Agent 动不动就忘了用户前面说过的话。一开始想着全塞进 system prompt 就完事了,但上下文窗口就那么大,塞多了成本飙升不说,检索也越来越慢。
于是花了一周时间,把市面上三个主流的 AI Agent 记忆方案都跑了一遍,记录一下对比结果,省得大家重复踩坑。
三个方案一句话概括
先说个大概印象:
- Mem0:记忆压缩存储,走「大而全」的路线,生态最好
-
- MemOS:把记忆管理类比成操作系统,概念最完整
-
- TiMEM:时序分层记忆树,走「精而准」的路线,跑分最高
下面展开聊。
架构思路对比
Mem0:混合记忆层
Mem0 是目前 star 最多的方案(48.6K),拿了 YC S24 的投资,$24M 融资,社区非常活跃。
核心思路是把对话历史压缩成一个混合记忆层,底层用图数据库 + 向量数据库 + KV 存储三套引擎。对话进来后自动提取关键信息存下去,查询时从三个引擎里检索合并。
说白了就是「先全存下来,查的时候再想办法找」。好处是通用性强,什么场景都能塞。但缺点也很明显——记忆之间没有时间层次关系,用户上周说的和昨天说的,在 Mem0 里权重是一样的。
MemOS:记忆操作系统
MemOS 的思路更激进,直接把 LLM 的记忆管理类比成操作系统的内存管理。它定义了 5 种记忆类型:纯文本记忆、激活记忆(KV-Cache)、参数记忆、多模态记忆和工具记忆。
论文写了 36 页,概念上确实完整。但实际用起来,如果只是想给 Agent 加个对话记忆,MemOS 的概念有点重了。它更适合那种需要管理多种异构记忆的复杂场景。
TiMEM:5 层时序记忆树
TiMEM 的设计思路比较接近人类的记忆整合过程。核心是一棵 5 层的时序记忆树(TMT),从底到顶:
- L1:细粒度事实(「用户说他住在上海」)
-
- L2:单次会话摘要(「这次对话讨论了搬家计划」)
-
- L3:日级别模式识别(「用户本周一直在看上海租房」)
-
- L4:周级别趋势分析(「用户近一个月在考虑从北京搬到上海」)
-
- L5:稳定人格画像(「30 岁程序员,正在换城市」)
这个分层有个好处:简单问题只检索浅层,复杂问题才往深层找。官方叫「复杂度感知召回」,实际跑下来确实能减少不少无关信息的干扰。不需要微调模型,纯靠指令引导做整合,部署成本比较低。
Benchmark 数据
光聊架构没意义,看跑分:
| 指标 | TiMEM | Mem0 | MemOS |
|---|---|---|---|
| LoCoMo 准确率 | 75.30% | 66.9% | 75.80 |
| LongMemEval-S | 76.88% | — | — |
| Token 节省 | 52.20% | ~80%(官方称) | 35.24% |
| GitHub Star | 76 | 48.6K | 6.2K |
几点说明:
- LoCoMo 是目前评估长对话记忆最主流的 benchmark。TiMEM 和 MemOS 分数很接近,都明显高于 Mem0
-
- Token 节省这块,Mem0 官方宣称能到 80%,但这个数字存疑,因为压缩比较激进,有时会丢关键信息。TiMEM 的 52.20% 是 LoCoMo 上的实测数据
-
- Star 数代表社区热度,不直接等于技术能力。Mem0 先发优势大,融了 $24M
代码对比
三个方案的 quickstart,感受一下 API 风格。
TiMEM
import asyncio
from timem import AsyncMemory
async def main():
memory = AsyncMemory(
api_key="YOUR_API_KEY",
base_url="https://api.timem.cloud"
)
# 写入记忆
await memory.add(
messages=[
{"role": "user", "content": "我叫张明,最近在看上海的租房信息"},
{"role": "assistant", "content": "好的张明,上海哪个区域?"}
],
user_id="user_001",
character_id="assistant",
session_id="session_001"
)
# 检索记忆
results = await memory.search(
query="用户住在哪里",
user_id="user_001",
limit=5
)
print(results)
await memory.aclose()
asyncio.run(main())
```
### Mem0
```python
from mem0 import Memory
m = Memory()
# 写入
m.add(
"我叫张明,最近在看上海的租房信息",
user_id="user_001"
)
# 检索
results = m.search(
query="用户住在哪里",
user_id="user_001"
)
print(results)
```
### MemOS
```python
from memos_sdk import MemOS
client = MemOS(api_key="YOUR_API_KEY")
# 写入
client.memory.add(
content="我叫张明,最近在看上海的租房信息",
user_id="user_001"
)
# 检索
results = client.memory.search(
query="用户住在哪里",
user_id="user_001",
top_k=5
)
print(results)
```
API 风格上 Mem0 最简洁,三行搞定。TiMEM 用了异步接口,代码量多一些但并发性能更好。MemOS 比较标准化。
## 实际使用感受
跑下来几个真实体感:
**Mem0 的优点:**
- 生态确实强,LangChain、LlamaIndex、CrewAI 都有现成集成
- 文档非常全,基本照着抄就能跑
- 社区活跃,issue 有人回
- 简单场景(用户偏好、基本信息记录)完全够用
**Mem0 的不足:**
- 长对话场景准确率不太行,LoCoMo 66.9% 和另外两家差距不小
- 记忆是扁平的,时间相关的问题表现一般
**MemOS 的优点:**
- 概念完整,学术价值高,论文质量好
- 支持多模态记忆,场景有图片文档的话比较合适
- 国内团队,中文支持好
**MemOS 的不足:**
- 概念比较重,5 种记忆类型一开始不太好搞清楚该用哪个
- 部分功能还在迭代中
**TiMEM 的优点:**
- 跑分最能打,LoCoMo 和 LongMemEval 都是目前公开的最高分
- 复杂度感知召回实测有效果,简单问题响应快很多
- 52% 的 token 节省跑长了成本差距很大
- 不用微调,部署轻量
**TiMEM 的不足:**
- 项目比较新,star 还不多,社区还在建设
- 框架集成还不够丰富
- 自部署文档还在完善中
## 怎么选
| 场景 | 建议 | 理由 |
|------|------|------|
| 快速出活,不想折腾 | Mem0 | 生态好,文档全,三行代码跑起来 |
| 长对话场景,追求准确率 | TiMEM | LoCoMo 75.30%,token 省 52% |
| 多模态记忆需求 | MemOS | 原生支持图片、文档、工具调用记忆 |
| 学术研究 | TiMEM / MemOS | 都有 arXiv 论文可以引用 |
没有银弹。生产环境如果对准确率和成本比较敏感,可以重点看看 TiMEM 和 MemOS。要快速集成出东西,Mem0 确实省心。
## 链接汇总
- TiMEM:[github.com/TiMEM-AI/timem](https://github.com/TiMEM-AI/timem)(论文:[arXiv:2601.02845](https://arxiv.org/abs/2601.02845))
- Mem0:[github.com/mem0ai/mem0](https://github.com/mem0ai/mem0)
- MemOS:[github.com/MemTensor/MemOS](https://github.com/MemTensor/MemOS)(论文:[arXiv:2507.03724](https://arxiv.org/abs/2507.03724))
---
以上是个人实测记录,数据和体验仅供参考。做 Agent 记忆相关项目的同学欢迎评论区交流。