最近折腾 OpenClaw 的记忆系统,踩了个很典型的坑:
embedding 模型一换,memory-lancedb 里的旧库就不能直接用了。
原因其实很直白。
向量库里存的不是原始文本,而是文本在某个 embedding 模型下算出来的向量。模型换了,向量的维度和分布往往也会变。这个时候还接着用旧库,轻则召回变差,重则直接报错。
常见症状一般是这些:
- 记忆召回突然不准了
- 查询结果开始乱
- 新数据写不进去
- 库看起来还在,实际上已经不太能用
问题就在这里:
embedding 模型不是普通配置项,它本身就是向量库的一部分前提。
所以这件事不能按“换个参数”来理解,得按“做一次迁移”来处理。
更稳的办法其实就几条:
- 切模型时不要默认复用旧库
- 要么新建库
- 要么清空后重建索引
- 最好把当前模型名也记进库的元信息里
- 启动时顺手检查一下模型和库是不是匹配
这次给我的教训很简单:
只要 embedding 模型变了,就默认旧向量库有兼容性风险。
最麻烦的不是它马上炸掉,而是它表面还能跑,只是结果越来越怪。
这种反而最难排查。