暂无菜单项

OpenClaw 记忆系统升级:从 memory-core 迁移到 memory-lancedb-pro

发布于
7

使用 OpenClaw 一段时间后,很多人会遇到一种很恼火的情况:明明已经在 MEMORY.md 写过规则,Agent 到了新对话还是忘记调用指定 Skill,或者只记得大概意思,却召回不到那条真正重要的指令。

例如,写歌词时忘记调用歌词 Skill,总结视频时跳过指定工具,下载内容前也不检查 Cookie。问题往往不是“完全没有记忆”,而是记忆召回不够精准。这也是从 memory-core 升级到 memory-lancedb-pro 的主要原因。

memory-lancedb-pro 为 OpenClaw 提供长期记忆与混合检索
memory-lancedb-pro 为 OpenClaw 提供长期记忆与混合检索
核心变化:memory-lancedb-pro 不只做向量相似度搜索,还加入 BM25 关键词检索、Cross-Encoder 重排序、智能提取、记忆衰减和多作用域隔离,让“语义相近”与“精确命中规则”同时参与召回。

为什么 memory-core 容易“记得但想不起来”?

纯向量检索擅长找到语义相似内容,却不一定能优先命中强规则。比如搜索“删除操作必须使用 trash”,模型可能召回大量与删除文件相关的对话,却没有把真正的安全规则排在最前面。

当记忆数量越来越多,普通聊天、临时信息和重要规范混在一起,结果就会被噪音淹没。要解决这一问题,需要的不只是换一个向量数据库,而是一整套更精细的检索与生命周期管理。

四种 OpenClaw 记忆方案对比

特性 memory-core memory-wiki memory-lancedb memory-lancedb-pro
存储 SQLite Wiki 格式 LanceDB LanceDB
检索 纯向量 关键词+向量 纯向量 向量+BM25 混合
重排序 Cross-Encoder
智能提取 LLM 六类分类
遗忘机制 Weibull 衰减
多作用域 agent/user/project
管理工具 基础 CLI 基础 完整 CLI + MCP 工具
数据迁移 原生 需手动 可迁移 迁移与导入工具

选择 memory-lancedb-pro 的三个理由

1. 混合检索更适合规则与工作流

Pro 版可以同时执行向量搜索与 BM25 全文检索,再经过融合与 Cross-Encoder 重排序。向量负责理解语义,BM25 负责命中具体词语,重排序则重新判断哪些结果最符合当前查询。

向量检索
找到表达方式不同但含义相近的记忆。
BM25
精确命中工具名、项目名、命令和强约束关键词。
Cross-Encoder
对候选结果重新评分,把最相关内容推到前面。

原配置采用向量 70%、BM25 30% 的权重,可作为起点,但不是所有数据集的最佳答案。规则型记忆较多时,可以适当提高 BM25 权重;自然语言偏好较多时,则保留更高的向量权重。

2. 智能提取与记忆衰减

Pro 版可以借助 LLM 将重要信息归入六类:

  • profiles:用户画像、技术栈与长期背景。
  • preferences:代码风格、回复格式与个人习惯。
  • entities:人物、地址、项目和具体对象。
  • events:事故、决策和阶段性事件。
  • cases:踩坑记录、解决方法与案例经验。
  • patterns:常见问题、重复行为和工作流模式。

同时,Weibull 衰减模型会结合时间、访问频率和重要性调整记忆权重,让低价值噪音逐渐淡出。这里的“遗忘”通常是降低召回优先级,不应理解为未经确认就直接删除源文件。

3. 可控的数据导入与作用域

canonicalCorpus 可以索引 MEMORY.mdmemory/**/*.md,并按需加入会话记录。多作用域则允许按照 Agent、用户和项目隔离记忆,避免不同客户或项目之间互相污染。

推荐原则:MEMORY.md 和 Markdown 记忆文件保留为可读、可备份的事实源,让 LanceDB 充当语义索引。数据库负责“找到”,文件负责“审计和恢复”。

一键安装:先下载,再执行

项目提供社区维护的安装脚本。为了便于审查,不建议直接把远程脚本通过管道送进 Shell;先下载、查看,再执行:

curl -fsSL https://raw.githubusercontent.com/CortexReach/toolbox/main/memory-lancedb-pro-setup/setup-memory.sh -o setup-memory.sh
less setup-memory.sh
bash setup-memory.sh

脚本会检测环境、选择 Embedding Provider、写入配置并重启 Gateway,可使用 Jina、SiliconFlow、OpenAI、Ollama 等方案。执行前仍应备份现有配置与记忆数据。

手动安装方式

当前项目文档优先推荐通过 OpenClaw CLI 安装测试版:

openclaw plugins install memory-lancedb-pro@beta

如果需要跟踪仓库源码,也可以使用源文中的手动方式:

git clone https://github.com/CortexReach/memory-lancedb-pro.git ~/.openclaw/workspace/plugins/memory-lancedb-pro
cd ~/.openclaw/workspace/plugins/memory-lancedb-pro
npm install
npm run build
注意:如果通过 npm 或源码安装,plugins.load.paths 必须填写插件的绝对路径。不要照抄他人的用户名路径,也不要在公开配置中明文保存 API Key。

配置 openclaw.json

下面保留源配置的核心结构,并将密钥改为环境变量占位符。请根据自己的系统用户名、模型和服务商调整:

{
  "plugins": {
    "slots": {
      "memory": "memory-lancedb-pro"
    },
    "load": {
      "paths": ["/Users/你的用户名/.openclaw/workspace/plugins/memory-lancedb-pro"]
    },
    "entries": {
      "memory-lancedb-pro": {
        "enabled": true,
        "config": {
          "embedding": {
            "provider": "openai-compatible",
            "model": "BAAI/bge-m3",
            "apiKey": "${SILICONFLOW_API_KEY}",
            "baseURL": "https://api.siliconflow.cn/v1",
            "dimensions": 1024
          },
          "autoCapture": true,
          "autoRecall": true,
          "smartExtraction": true,
          "extractMinMessages": 2,
          "extractMaxChars": 8000,
          "retrieval": {
            "mode": "hybrid",
            "vectorWeight": 0.7,
            "bm25Weight": 0.3,
            "rerank": "cross-encoder",
            "rerankApiKey": "${SILICONFLOW_API_KEY}",
            "rerankModel": "BAAI/bge-reranker-v2-m3",
            "rerankEndpoint": "https://api.siliconflow.cn/v1/rerank"
          },
          "canonicalCorpus": {
            "enabled": true,
            "syncOnSearch": true,
            "includeSessionTranscripts": true
          },
          "sessionMemory": {
            "enabled": false
          }
        }
      }
    }
  }
}

配置中几个关键开关:

  • autoCapture:自动捕获值得长期保存的信息。
  • autoRecall:回答前自动召回相关记忆。
  • smartExtraction:使用 LLM 进行分类、合并和去重。
  • canonicalCorpus.enabled:索引现有 Markdown 记忆文件。
  • includeSessionTranscripts:把会话记录加入索引,数据量较大时应谨慎开启。
  • sessionMemory.enabled: false:初期避免会话摘要污染长期检索。

从 memory-core 迁移前先做什么?

源环境从 memory-core 迁移了 4243 条记忆、涉及 387 个文件,并通过自定义脚本生成迁移清单。这个数字是个案,不代表每个人都能直接“一键迁移”。memory-core、memory-lancedb 与不同版本 Pro 的数据结构并不完全相同。

  1. 备份配置:保存当前 openclaw.json
  2. 备份事实源:复制 MEMORY.mdmemory/ 和现有数据库目录。
  3. 先开 canonicalCorpus:确认 Markdown 文件可以被索引和召回。
  4. 小批量导入:先迁移一部分数据,检查重复、乱码和作用域。
  5. 再切换 memory slot:确认新插件稳定后,将其设为唯一活动记忆插件。

从旧版 memory-lancedb 迁移时,可结合项目当前 CLI 和迁移文档;从 memory-core 迁移则应依据实际数据结构选择导出、清单或自定义脚本。

验证配置与召回效果

openclaw config validate
openclaw gateway restart
openclaw logs --follow --plain | grep "memory-lancedb-pro"

项目文档建议进一步检查插件信息和统计:

openclaw plugins info memory-lancedb-pro
openclaw memory-pro stats

不要只看“插件已注册”,还要设计可重复测试:

  • 保存一条包含明确工具名的规则,换一种表达方式搜索。
  • 同时放入多条“删除”相关内容,确认强规则是否排在前面。
  • 切换项目或用户作用域,检查是否发生跨项目泄漏。
  • 关闭外部 Rerank API,观察降级后的召回是否仍可接受。

CPU 不支持 AVX 怎么办?

部分 Linux x64 环境中的 LanceDB 原生向量搜索可能依赖 AVX/AVX2。如果出现 SIGILL 或相关崩溃,可先检查 CPU:

grep -o 'avx[^ ]*' /proc/cpuinfo | head -1

项目文档提供了兼容开关:

"retrieval": {
  "disableNativeCosine": true
}

也可以使用环境变量:

export MEMORY_LANCEDB_DISABLE_NATIVE_COSINE=1

开启后会改用范围受控的行扫描和 JavaScript 余弦排序,兼容性更好,但大型记忆库的性能可能下降。

升级后的实际变化

切换 Pro 版后,最明显的目标不是“记忆数量变多”,而是以下几件事更可控:

  • 搜索删除规则时能优先命中明确约束,而不是泛泛的相似内容。
  • 新对话中的重要信息被自动提取、分类和去重。
  • 低价值旧记忆逐渐降低权重,避免检索越来越嘈杂。
  • 历史文件、会话和手动导入范围可以分别控制。
  • 通过 CLI 和管理工具查看、搜索、导出或删除记忆。

项目地址:CortexReach/memory-lancedb-pro GitHub。准备体验前,可先查看 memory-lancedb-pro 站内详情页;尚未安装主程序的用户可进入 OpenClaw 站内工具页

我的观点:长期记忆系统最重要的不是“永远不忘”,而是可解释地记住正确内容。混合检索和重排序提升召回,多作用域降低污染,Markdown 事实源和导出工具负责审计。只有这三部分同时存在,Agent 记忆才适合进入长期工作流。

总结

如果只是保存少量个人偏好,memory-core 仍然够用;如果已经积累大量规则、项目决策和会话记录,并且经常出现“有记忆但召回不到”,memory-lancedb-pro 更值得尝试。

迁移时不要急着覆盖旧系统。先备份,再安装和验证,最后分批导入。把可读文件作为事实源,把 LanceDB 作为检索索引,才能让 OpenClaw 的记忆从黑盒变成真正可管理的基础设施。

说明:插件处于持续开发中,安装命令、配置字段和版本兼容性可能变化;实际操作前请核对 GitHub 当前 README、版本说明与 OpenClaw 插件架构。

常见问题(FAQ)

memory-lancedb-pro 比 memory-core 强在哪里?
它增加向量与 BM25 混合检索、Cross-Encoder 重排序、LLM 智能提取、Weibull 衰减、多作用域隔离和完整管理工具。
可以直接把 memory-core 一键迁移过去吗?
不同版本和数据结构需要不同迁移方式。建议先备份 MEMORY.md、memory 目录、数据库和配置,再小批量导入并验证作用域与重复数据。
为什么推荐保留 MEMORY.md?
Markdown 文件可作为可读、可审计和可恢复的事实源,LanceDB 负责语义索引;数据库损坏或升级时仍能重新构建索引。
CPU 不支持 AVX 怎么处理?
可设置 retrieval.disableNativeCosine 为 true,或使用 MEMORY_LANCEDB_DISABLE_NATIVE_COSINE=1,改用 JavaScript 余弦排序兼容模式。
0 点赞
0 收藏
分享
0 讨论
反馈
0 讨论
热门最新
总结
暂无总结
0 / 600
嗨,下午好!
所有的成功,都源自一个勇敢的开始
近期热门