放弃 memory-lancedb,回到 OpenClaw 官方记忆链路:一次高成本实测后的选择

前几天我折腾了一轮 OpenClaw 的记忆系统,起因很简单:我是在抖音上看别人推荐,才去装 memory-lancedb 插件的。
视频里吹得很猛,讲得像是装上之后记忆能力直接起飞,什么长期记忆、智能召回、越用越懂你,听起来特别像那么回事。

我当时也确实被说动了,觉得官方默认那套可能偏保守,memory-lancedb 也许才是更强的“进阶方案”。
结果真正用下来之后,我的结论很干脆:根本不好用。

这里不是“试了几轮就下判断”。
我是实打实用了好几天,而且强度不低:

  • 主力模型是 gpt-5.4gpt-5.2-codex
  • 平均每天大概 90 美元 token 成本
  • 总量已经跑到了 七八亿 tokens

这种使用强度下,很多东西其实藏不住。
好不好用,不用听谁吹,跑几天就知道了。

memory-lancedb 最大的问题,不是不能跑,而是它在真实使用里远没有宣传得那么神。
手动 memory_storememory_recall 都能通,表面上看功能齐全,但一到自动召回,问题就来了:乱召回、带偏上下文、把一堆不该出现的东西塞进当前对话。

我一开始怀疑过 embedding、怀疑过向量维度、也怀疑过索引是不是坏了。后来一路查下来,问题其实挺直接:

  1. memory-lancedb 更像一个轻量插件,召回逻辑很简单
  2. 我把不少 memory 文档直接灌进了向量库,候选池一下子变脏了
  3. 它能查到东西,但经常查到的是“不该现在出现的东西”

最直观的感受就是:
你问一个当前问题,它给你翻出旧日志、联系人碎片、论坛账号,甚至是排障过程里的技术细节。系统看起来很勤快,但实际是在污染上下文。

后面我也不是没补救。我做过一轮排查和修补:

  • 关掉 memorySearch
  • memory 插槽切到 memory-lancedb
  • 调小文档分块
  • 重灌文档到 LanceDB
  • 调整 autoRecall 注入条数

这些动作不是完全没用,短时间内确实缓了一点。
但问题始终没有真正解决。越往后我越确定:我是在拿一个适合“手动长期记忆”的插件,硬扛官方主记忆系统的活。

再往后我去看 OpenClaw 本地文档和内置实现,方向就清楚了。官方路线其实一直写得很明白:

  • memory-core 才是默认 memory 插件
  • 主工具是 memory_searchmemory_get
  • 默认 backend 是 builtin
  • QMD 是实验性的 sidecar,不是默认必选项

官方文档里那句话我觉得很重要:除非你明确要运行 QMD,否则保持 builtin。

我后来就是按这个思路回切的:

  • 恢复 agents.defaults.memorySearch.enabled = true
  • plugins.slots.memory 改成 memory-core
  • 禁用 memory-lancedb
  • 重启 gateway
  • 重新检查 memory 状态

切回之后,系统一下子顺了很多。
openclaw status 里能直接看到:

  • plugin memory-core
  • FTS ready
  • vector ready
  • memory files 已接管

再做检索测试,虽然还谈不上特别聪明,但至少回到了一个正常系统该有的样子。
查用户偏好,会先命中 entities/wood.mdopinions.md;查联系人,也会优先落到实体页和用户页。尾部还是会有一点噪音,但已经不是之前那种“什么都往上冒”的状态了。

这轮折腾下来,我的判断很简单。

1. memory-lancedb 适合做轻量插件,不适合顶替官方主记忆链路

如果你只是想手动存一些偏好、事实、决定,它能用。
但如果你想让它长期承担自动召回,又把很多文档直接往里灌,基本迟早失控。

2. 官方默认路线没有想象中弱

我一开始也有点先入为主,总觉得 builtin 不够强,QMD 才像“完整版”。后来实际跑下来发现不是这么回事。
memory-core + memorySearch + builtin 本身就是一条完整路线,而且明显更稳、更省心。

3. 真正拖后腿的,不只是引擎,还有 memory 文件本身

切回官方路线后,我继续看索引结果,发现另一个现实问题:同一事实散落在多个文件里重复出现。

比如一个联系人信息,可能同时出现在:

  • daily 日志
  • world.md
  • entities/*.md
  • users/*.md

这样一来,就算官方 memory 再稳,召回时也容易把重复事实一起带出来。

所以后面我又做了一轮很小的整理,不大改结构,只收掉最明显的重复项和不该长期保留的内容,比如:

  • 把联系人详情收口到实体页 / 用户页
  • 把 public 长期记忆里的明文账号密码去掉
  • 把 daily 里已经沉淀过的长期事实弱化掉

这一步反而很关键。因为记忆系统再强,源头文件乱,结果照样会乱。

4. 这类问题,只有高强度用几天之后才会彻底暴露

这次让我更确定的一点是:记忆系统不能看演示视频,更不能只看“能不能跑通”。

小规模测试时,很多方案都像是可用的。
但当你真的连续用几天、每天烧掉几十美元 token、总量跑到几亿 token 之后,很多视频里放大的“优点”很快就会褪色,真正的问题反而会越来越明显。

memory-lancedb 在我这里就是这样。
拿来做 Demo,它挺像那么回事。
放进高强度日常使用,噪音和上下文污染会越来越烦。

5. 我现在的选择很简单:先回官方默认链路

至少在当前阶段,我不会继续折腾 QMD,也不会再把 memory-lancedb 拉回来当主系统。

后面的原则就是:

  • 主记忆:memory-core
  • backend:builtin
  • memory 文件继续分层、去重、收口
  • daily 主要记当天,长期事实尽量沉淀到固定文件

这样不花哨,但稳。

最后说一句。

如果你也在折腾 OpenClaw 记忆,而且已经开始觉得“是不是该换插件、换后端、换 embedding 才能救”,我会建议你先停一下,先确认两件事:

  1. 你是不是已经偏离了官方默认链路
  2. 你的 memory 文件本身是不是已经写乱了

很多时候,问题不在模型有多强,而在路径走偏了。

1 个赞