1. 三款记忆系统到底在解决什么问题
AI 个人助手用久了都会遇到同一个尴尬:昨天刚说过的偏好、项目背景、常用路径,今天开新会话它全忘了。这不是模型变笨,而是上下文窗口被对话历史挤满后,早期信息被截断丢弃。记忆系统的职责,就是在上下文被压缩之前,把值得留存的信息落到磁盘或数据库,下一轮再按需召回。
OpenClaw、Mem0、Supermemory 是当前讨论度较高的三种思路。OpenClaw 走本地 Markdown 文件加向量检索,数据不出机器;Mem0 提供压缩引擎、TTL 过期和记忆自我修正,可自托管也可用云;Supermemory 主打图结构记忆,把「人-事-时-地」关系链建起来,在 LongMemEval 等评测集上表现靠前,但只能走云服务。
这篇不堆概念,直接给可复制的配置骨架和验证动作。为了让三套系统在同一个调用基准下对比,我用 TaoToken 的统一 Key 和 API 通道作为模型侧入口,这样切换记忆后端时不用反复改模型鉴权配置。适合正在搭个人助手、纠结记忆方案选型、或者已经踩过「聊三天就失忆」坑的开发者。
2. 用 TaoToken 统一 Key 做对比基准
三套记忆系统本身不绑定模型供应商,但召回、压缩、意图推断这些环节都要调模型。如果每换一个记忆后端就换一套 Key 和 base_url,对比结果会被鉴权差异干扰。TaoToken 的作用是把模型调用收敛成一个入口:一个 Key、一个 base_url,OpenClaw、Mem0、Supermemory 都指向它。
先拿 Key。进控制台创建 API Key,地址是 https://taotoken.net/api-keys ,创建后复制保存,页面只显示一次。模型对话调试入口在 https://taotoken.net/chat ,接入文档在 https://taotoken.net/doc ,需要长期跑编码或 Agent 工作流的可以看 Coding Plan:https://taotoken.net/coding-plan 。
统一入口的价值在对比场景里很直接:三套系统共用同一个 base_url 和 Key,响应差异就只来自记忆架构本身,而不是模型通道。下面所有配置里的base_url都填https://taotoken.net/api,api_key填你刚创建的那串。
注意:API 地址不要带 UTM 参数,直接写
https://taotoken.net/api即可,带参数的链接是给页面跳转用的。
3. OpenClaw 配置骨架与 memoryFlush 调优
OpenClaw 的记忆是纯本地 Markdown:memory/YYYY-MM-DD.md存当天日志,追加写;MEMORY.md存长期精选。对话启动时自动加载昨天和今天的日志,上下文快满时通过memoryFlush静默触发写入,语义检索可以接本地 Ollama 的 bge-m3,完全离线。
它的settings.json关键在 compaction 和 memorySearch 两块。下面是我调过的版本,把softThresholdTokens压到 3000,让记忆更早落盘:
{ "agents": { "defaults": { "model": { "provider": "openai-compatible", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoTokenKey", "model": "gpt-4o-mini" }, "compaction": { "mode": "safeguard", "reserveTokensFloor": 20000, "memoryFlush": { "enabled": true, "softThresholdTokens": 3000, "prompt": "Write any lasting notes to memory/YYYY-MM-DD.md before compaction." } }, "memorySearch": { "provider": "ollama", "model": "bge-m3", "baseUrl": "http://127.0.0.1:11434" } } } }reserveTokensFloor留 20000 是给压缩留缓冲,别设太小否则压缩还没写完上下文就爆了。softThresholdTokens是软阈值,剩余 token 低于它就触发 flush,3000 是我实测比较稳的值,再低会频繁写盘,再高容易漏记。
Ollama 侧先拉模型再起服务:
ollama pull bge-m3 ollama servememorySearch指向本地 11434 端口,检索不花钱也不出网。OpenClaw 的短板是没有 TTL 过期、没有矛盾检测、没有关系图谱,长期用下来MEMORY.md会积累重复条目,需要定期手动整理。
4. Mem0 自托管配置与 TTL 验证
Mem0 的能力集中在压缩、TTL 和记忆版本管理。它需要 Python 包加一个向量库,Qdrant、Chroma、PostgreSQL 都行。先装依赖:
pip install mem0ai qdrant-client用 Docker 起一个本地 Qdrant:
docker run -d --name qdrant -p 6333:6333 qdrant/qdrant然后写配置。Mem0 的模型侧同样指向 TaoToken,把 LLM 和 embedding 分开配:
from mem0 import Memory config = { "llm": { "provider": "openai", "config": { "model": "gpt-4o-mini", "api_key": "sk-你的TaoTokenKey", "openai_base_url": "https://taotoken.net/api" } }, "embedder": { "provider": "openai", "config": { "model": "text-embedding-3-small", "api_key": "sk-你的TaoTokenKey", "openai_base_url": "https://taotoken.net/api" } }, "vector_store": { "provider": "qdrant", "config": { "host": "127.0.0.1", "port": 6333, "collection_name": "assistant_memory" } } } m = Memory.from_config(config) m.add("用户偏好用中文回复,项目路径在 /work/demo", user_id="u1") res = m.search("用户的项目路径", user_id="u1") print(res)TTL 在 add 时通过 metadata 传,过期自动淘汰:
m.add( "临时会议纪要:周三下午评审", user_id="u1", metadata={"expiration_date": "2025-12-31"} )Mem0 的自我修正体现在记忆有版本,检测到矛盾会合并。代价是要维护 Python 环境和向量库,比 OpenClaw 重,但换来 TTL 和压缩率。压缩率官方说 80%,实际取决于对话密度,我这边长会话下 token 消耗确实降得明显。
5. Supermemory 接入与图结构召回验证
Supermemory 是云服务,基于 Postgres 加 Cloudflare Durable Objects,图结构记忆是它的核心差异:不是存片段,而是建关系链,召回时做意图推断。它没有本地部署选项,数据要过第三方服务器,敏感场景直接排除。
接入走 SDK,模型侧仍可指向 TaoToken 做统一对比:
npm install supermemoryimport Supermemory from "supermemory"; const client = new Supermemory({ apiKey: process.env.SUPERMEMORY_API_KEY }); await client.add({ content: "用户在做记忆系统选型,关注 OpenClaw、Mem0、Supermemory", containerTags: ["assistant-u1"] }); const result = await client.search({ q: "用户在选什么记忆系统", containerTags: ["assistant-u1"] }); console.log(result);图结构的价值在跨会话关系召回。比如你先说「项目 A 用 Qdrant」,后说「项目 A 的向量库要换」,Supermemory 能把两条关联起来推断出「项目 A 的向量库从 Qdrant 换掉」,而片段式记忆只能分别召回两条。它在 LongMemEval、LoCoMo、ConvoMem 上排名靠前,但纯云是硬约束。
6. 三套系统横向对照与选型判断
把关键维度拉平看:
| 特性 | OpenClaw | Mem0 | Supermemory |
|---|---|---|---|
| 部署方式 | 本地 | 自托管/云 | 仅云 |
| 数据隐私 | 完全本地 | 可完全本地 | 第三方存储 |
| 压缩方式 | 摘要压缩 | 高密度压缩 | 图结构压缩 |
| TTL 过期 | 无 | 支持 | 支持 |
| 自我修正 | 无 | 支持 | 支持 |
| 关系图谱 | 无 | 基础 | 强 |
| 部署成本 | 零 | 中 | 低 |
个人用户、数据敏感、想零成本起步,OpenClaw 够用,把memoryFlush开起来、softThresholdTokens调到 3000、定期清理MEMORY.md重复项,能覆盖大部分场景。需要 TTL 和矛盾合并、愿意维护 Python 加向量库,选 Mem0 自托管。要复杂关系图谱且不介意上云,Supermemory 召回最强,但敏感数据别放。
7. 本篇常见报错排查
OpenClaw 记忆不写入:先确认memoryFlush.enabled为 true,再看softThresholdTokens是不是设太大导致一直没触发。日志里搜memoryFlush关键字,没有触发记录就是阈值问题。Ollama 检索报连接失败,检查ollama serve是否在跑、11434 端口是否被占。
Mem0 报 401 或 base_url 错误:openai_base_url必须写https://taotoken.net/api,不要带路径后缀。embedding 和 llm 两处都要填 Key,漏一处会在 search 阶段才报错。Qdrant 连不上先docker ps看容器状态,collection 不存在时首次 add 会自动建。
Supermemory 召回为空:containerTags在 add 和 search 时必须一致,标签不匹配就查不到。云服务有网络延迟,add 后立刻 search 可能还没索引完,隔几秒再试。
三套系统共用 Key 时的限流:对比测试时并发调模型容易触发限流,把测试脚本改成串行,或者错开时间跑。TaoToken 的 Key 在控制台可以看用量,异常时先去 https://taotoken.net/console 核对调用记录。
8. 继续往下走
选型没有银弹,先跑起来再按痛点升级。想快速验证模型通道是否通,去 https://taotoken.net/chat 发一条消息看响应;要正式接入记忆系统,Key 在 https://taotoken.net/api-keys 创建,配置写法参考 https://taotoken.net/doc ;长期跑编码或 Agent 工作流、需要稳定额度的,看 https://taotoken.net/coding-plan 。三套记忆系统都可以先接 TaoToken 统一入口跑一轮,用同一套 Key 对比召回质量,再决定把哪套留在你的助手工作流里。