OpenClaw 内置向量记忆插件memory-lancedb研究

2026年4月27日 9点热度 0人点赞 0条评论

一、什么是 memory-lancedb 插件

memory-lancedb 是 OpenClaw 内置的向量记忆插件,基于 LanceDB 向量数据库实现,为 AI 对话提供语义搜索能力。

向量数据库在 AI 记忆中的位置

AI 记忆系统通常有两层:

层次 机制 特点
传统记忆 关键词匹配 / 人工整理 精确但依赖词形,整理成本高
向量记忆 语义相似度搜索 理解含义,但需要额外基础设施

向量数据库的核心思想是:将文本转换成"数字向量"(embedding),存入向量库。搜索时,把问题也转成向量,找出"距离最近"的记忆——这比关键词匹配强大得多。比如问"备份老失败怎么办",向量搜索能找到所有相关讨论,而不只是包含"备份"这个词的记录。

memory-lancedb 与内置记忆系统的关系

OpenClaw 已有两套记忆系统:

  • MEMORY.md + 每日笔记:人工维护的结构化长期记忆,按日期组织
  • 梦境系统(Memory-Core):每日凌晨批量处理 session 文件,高分内容写入 MEMORY.md

memory-lancedb 是第三套,主打实时语义搜索,与上述两者不冲突,可以共存。

二、如何安装和启用

前置条件

memory-lancedb 需要以下组件:

  1. Ollama(本地 LLM 运行时)
  2. nomic-embed-text 模型(向量编码模型,768 维)

安装 Ollama:

curl -fsSL https://ollama.com/install.sh | sh

拉取向量模型:

ollama pull nomic-embed-text

启动 Ollama 服务:

systemctl start ollama

插件启用配置

修改 ~/.openclaw/openclaw.json,在 plugins.entries 中添加或确认以下配置:

{
"plugins": {
"entries": {
"memory-lancedb": {
"enabled": true,
"config": {
"embedding": {
"apiKey": "not-needed",
"model": "nomic-embed-text",
"baseUrl": "http://127.0.0.1:11434/v1",
"dimensions": 768
},
"autoCapture": true,
"autoRecall": true,
"captureMaxChars": 1000
}
}
}
}
}

关键参数说明:

参数 说明
enabled 是否启用该插件
embedding.model 向量编码模型,当前推荐 nomic-embed-text
embedding.baseUrl Ollama API 地址,本地默认为 http://127.0.0.1:11434/v1
autoCapture 是否自动捕获对话片段存入向量库
autoRecall 是否在推理时自动召回相关记忆
captureMaxChars 单次捕获的最大字符数

验证是否正常运行

启用后重启 Gateway:

systemctl restart openclaw-gateway

查看日志确认插件加载:

tail -f /root/.openclaw/logs/gateway.log | grep "memory-lancedb"

正常输出:

memory-lancedb: initialized (db: ~/.openclaw/plugin-runtimes/memory-lancedb/lancedb, model: nomic-embed-text)

三、工作原理

整体架构

用户对话 → agent_end 钩子触发 → 提取对话文本(role=user 的消息)→ 关键词过滤(MEMORY_TRIGGERS 匹配)→ 调用 Ollama(nomic-embed-text)生成向量 → 存入 LanceDB 表(id / text / vector / importance / category / createdAt)→ 搜索时:query → 向量 → LanceDB 向量搜索 → 相似度排序 → 返回结果

存储 Schema

LanceDB 表结构(表名:memories):

字段 类型 说明
id UUID 唯一标识符
text string 原始文本内容
vector float[768] nomic-embed-text 生成的 768 维向量
importance float 重要性分数(默认 0.7)
category string 分类:preference / fact / decision / entity / other
createdAt timestamp 存入时间(毫秒)

自动捕获机制

插件通过 before_prompt_buildagent_end 两个钩子实现自动捕获:

触发条件(MEMORY_TRIGGERS):

  • 包含"记住"/"remember"/"prefer"等关键词
  • 包含邮箱、手机号(10 位以上数字)
  • 包含"always"/"never"/"important"等强度词
  • 包含"My xxx is..." / "I like..." 等偏好表达

捕获上限:每次对话最多捕获 3 条,防止数据爆炸。

去重机制:存入前会先搜索是否有相似内容(相似度 > 0.95 则跳过),避免重复记录。

搜索机制

向量搜索使用 LanceDB 的 vectorSearch 方法:

  1. 将用户 query 通过同一 embedding 模型转成向量
  2. 在 LanceDB 表中做向量最近邻搜索(默认返回 5 条)
  3. 计算余弦相似度分数:score = 1 / (1 + distance)
  4. 过滤:��返回 score >= 0.5 的结果
  5. 注入到下次推理的 system prompt 中

四、优势

1. 语义搜索能力强

传统关键词匹配只能找包含相同词的内容,向量搜索能理解语义。例如:

  • 问题:"上次那个备份失败的问题怎么处理的?"
  • 向量搜索能找到关于备份的所有相关讨论,即使从没出现"备份"这个词

2. 自动运行,无人工成本

autoCapture: true 后,对话中的关键信息自动被提取存入,不需要人工整理。

3. 实时更新

不同于每日批量处理的梦境系统,memory-lancedb 在每次对话结束后立即存入,记忆几乎是实时的。

4. 与现有记忆系统互补

  • MEMORY.md = 人工精选的长期记忆(高质量但稀疏)
  • 梦境系统 = 每日提炼的精华(中等质量,定时)
  • LanceDB = 全量捕获的语义记忆(高数量,实时)

三者可以并存,各司其职。

五、劣势

1. Agent 数据不隔离(核心问题)

所有 Agent 的对话数据存入同一张表,没有 agentId 字段区分。

当前存储 schema 中没有 agentIdagent_end 钩子虽然能通过 ctx.agentId 获取来源 Agent,但插件代码完全忽略了这个字段

这意味着:

  • loan(贷款咨询)处理的客户姓名、电话、贷款方案
  • main(主助手)处理的老板个人对话、财务信息

全部混存在一起。搜索时可能互相污染——main 搜索"客户资料"可能误召回到 loan 的数据。

2. 部署复杂度增加

需要额外部署 Ollama + 拉取模型,增加了运维负担。且 nomic-embed-text 模型约 274MB,需要预留存储空间。

3. 向量数据存储开销

每条记忆除了原始文本,还需存储 768 维浮点向量(约 3KB/条)。对话量大时存储增长明显。

4. 无法按 Agent 禁用

插件启用是全局性的。一旦开启,所有 Agent 的对话都会被捕获,无法只让特定 Agent 使用,或排除特定 Agent。

5. 搜索质量依赖 embedding 模型

nomic-embed-text 是轻量级模型,中文语义理解能力有限,中文对话的向量化效果可能不如英文。

六、建议

当前环境不建议启用

在我们当前的多 Agent 环境下(main / loan / observer / writer / coder),数据隔离问题是决定性障碍。loan 处理客户敏感信息,一旦与 main 的对话混存,存在数据泄露风险。

仅单 Agent 或可尝试

如果只有单一 Agent 使用场景(如个人助手),或能接受所有数据混存,启用后能获得不错的语义搜索体验。

关注后续版本

建议关注 OpenClaw 后续版本更新,等待插件支持:

  • agentId 字段(存入时标记来源)
  • 搜索时按 agentId 过滤
  • per-agent 启用/禁用开关

替代方案

当前阶段,保持现有记忆体系即可:

  • MEMORY.md 管理精选长期记忆
  • 每日笔记(memory/YYYY-MM-DD.md) 记录日常对话
  • 梦境系统 凌晨提炼精华写入 MEMORY.md

这套体系虽然不如向量搜索"智能",但胜在安全、可控、无额外依赖,且完全按 Agent 路径天然隔离数据。

附录:相关文件路径

文件 说明
~/.openclaw/plugin-runtimes/memory-lancedb/ LanceDB 数据目录
~/.openclaw/openclaw.json 插件配置位置
/usr/lib/node_modules/openclaw/dist/extensions/memory-lancedb/index.js 插件源码
研究结论:memory-lancedb 是一个有潜力的向量记忆方案,但当前版本在多 Agent 环境下的数据隔离机制不完善,建议等待后续版本更新后再正式启用。

kenny

这个人很懒,什么都没留下

文章评论