OpenClaw 本地语义记忆插件,基于 Qdrant 和 Transformers.js 实现零配置的语义搜索。
📦 ClawHub: https://clawhub.ai/skills/memory-qdrant
- 🧠 本地语义搜索 - 使用 Transformers.js 在本地生成 embeddings
- 💾 内存模式 - 零配置,无需外部服务
- 🔄 自动捕获 - 通过 lifecycle hooks 自动记录重要信息
- 🎯 智能召回 - 根据上下文自动检索相关记忆
clawhub install memory-qdrantcd ~/.openclaw/plugins
git clone https://github.com/zuiho/openclaw-memory-qdrant.git memory-qdrant
cd memory-qdrant
npm install首次运行准备:
-
Node.js 版本: 需要 Node.js ≥18.17
node --version # 检查版本 -
构建工具(用于编译原生依赖):
- Windows: Visual Studio Build Tools
npm install --global windows-build-tools
- macOS: Xcode Command Line Tools
xcode-select --install
- Linux: build-essential
sudo apt-get install build-essential # Debian/Ubuntu sudo yum groupinstall "Development Tools" # RHEL/CentOS
- Windows: Visual Studio Build Tools
-
网络访问:
- 安装时需要访问 npmjs.com 下载依赖包
- 首次运行时会从 huggingface.co 下载 embedding 模型(约 25MB)
- 如果配置了外部 Qdrant 服务器,需要能访问该服务器
-
原生依赖:
sharp: 图像处理库(可能需要编译)onnxruntime: ML 推理引擎(可能需要编译)undici: HTTP 客户端(通过 @qdrant/js-client-rest 引入)
# 使用 npm ci 确保可重现的安装(推荐用于生产环境)
npm ci
# 或者分步安装(用于调试)
npm install --ignore-scripts # 跳过 post-install 脚本
npm rebuild # 然后重新构建原生模块问题: 原生模块编译失败
- 确保已安装对应平台的构建工具
- 尝试清理缓存:
npm cache clean --force - 删除 node_modules 重新安装:
rm -rf node_modules && npm install
问题: 模型下载失败
- 检查网络连接和防火墙设置
- 确保能访问 huggingface.co
- 模型会缓存在
~/.cache/huggingface/目录
问题: Node 版本不兼容
- 升级到 Node.js 18.17 或更高版本
- 使用 nvm 管理多个 Node 版本:
nvm install 18 && nvm use 18
在 OpenClaw 配置文件中启用插件:
{
"plugins": {
"memory-qdrant": {
"enabled": true,
"autoCapture": false, // 默认关闭,需要时手动开启
"autoRecall": true,
"captureMaxChars": 500
}
}
}- qdrantUrl (可选): 外部 Qdrant 服务地址,留空使用内存模式
- persistToDisk (默认 true): 在内存模式下将记忆保存到磁盘
- 数据存储在
~/.openclaw-memory/目录(或自定义路径) - 重启后数据不会丢失
- 设置为 false 使用纯内存模式(重启后清空)
- 仅在内存模式下生效(未配置 qdrantUrl 时)
- 数据存储在
- storagePath (可选): 自定义存储目录
- 留空使用默认路径
~/.openclaw-memory/ - 支持
~符号表示用户主目录 - 仅在
persistToDisk: true时生效
- 留空使用默认路径
- autoCapture (默认 false): 自动记录对话内容
⚠️ 隐私保护: 默认会跳过包含 PII(邮箱、电话号码)的文本- 需要配合
allowPIICapture才能捕获 PII
- allowPIICapture (默认 false): 允许捕获包含 PII 的文本
⚠️ 隐私风险: 仅在理解隐私影响后启用- 需要
autoCapture同时启用才生效
- autoRecall (默认 true): 自动注入相关记忆到对话
- captureMaxChars (默认 500): 单条记忆最大字符数
- maxMemorySize (默认 1000): 内存模式下的最大记忆条数
- 仅在内存模式下生效(未配置 qdrantUrl 时)
- 达到上限时自动删除最旧的记忆(LRU 淘汰策略)
- 范围:100-1000000 条
- 设置为 999999 表示无限制(不会自动删除旧记忆)
⚠️ 无限制模式可能导致内存耗尽,请谨慎使用- 外部 Qdrant 模式不受此限制
- 磁盘持久化(默认): 数据保存到
~/.openclaw-memory/并在重启后恢复- 设置
persistToDisk: false可切换到纯内存模式(重启后清空)
- 设置
- Qdrant 模式: 如果配置了
qdrantUrl,数据会发送到该服务器⚠️ 仅配置受信任的 Qdrant 服务器- 建议使用本地 Qdrant 实例或专用服务账户
- 首次运行: Transformers.js 会从 Hugging Face 下载模型文件(约 25MB)
- 运行时: 内存模式无网络请求;Qdrant 模式会连接配置的服务器
- autoCapture 默认关闭,需要手动开启
- PII 保护: 默认情况下,即使启用 autoCapture,包含邮箱或电话号码的文本也会被自动跳过
- allowPIICapture: 设置为 true 才能捕获包含 PII 的文本
⚠️ 仅在理解隐私风险后启用- 适用场景:个人笔记、测试环境
- 不适用场景:共享环境、生产环境、处理他人数据
- 建议仅在个人环境使用,避免在共享或生产环境开启
- 首次使用时在隔离环境测试
- 审查
index.js了解数据处理逻辑 - 敏感环境建议锁定依赖版本(
npm ci) - 定期检查存储的记忆内容
插件提供三个工具:
保存重要信息到长期记忆:
memory_store({
text: "用户喜欢用 Opus 处理复杂任务",
category: "preference",
importance: 0.8
})搜索相关记忆:
memory_search({
query: "工作流程",
limit: 5
})删除特定记忆:
memory_forget({
memoryId: "uuid-here"
})
// 或通过搜索删除
memory_forget({
query: "要删除的内容"
})- 向量数据库: Qdrant (内存模式)
- Embedding 模型: Xenova/all-MiniLM-L6-v2 (本地运行)
- 模块系统: ES6 modules
插件使用工厂函数模式导出工具,确保与 OpenClaw 的工具系统兼容:
export default {
name: 'memory-qdrant',
version: '1.0.0',
tools: [
() => ({
name: 'memory_search',
description: '...',
parameters: { ... },
execute: async (params) => { ... }
})
]
}Q: 为什么要用工厂函数?
A: OpenClaw 的工具系统会调用 tool.execute(),直接导出对象会导致 tool.execute is not a function 错误。工厂函数确保每次调用都返回新的工具实例。
Q: 为什么要用 ES6 modules?
A: OpenClaw 的插件加载器期望 ES6 模块格式。需要在 package.json 中设置 "type": "module"。
Q: 数据存储在哪里?
A: 内存模式下数据仅在进程运行期间保存。重启后需要重新索引。未来版本会支持持久化存储。
# 安装依赖
npm install
# 测试(需要 OpenClaw 环境)
openclaw gateway restartMIT
- Qdrant - 向量数据库
- Transformers.js - 本地 ML 推理
- OpenClaw - AI 助手框架