一、什么是 memory_search
OpenClaw 提供的"跨会话记忆"能力。新对话开始时,从过去的对话、文件、笔记里语义检索相关片段,喂给当前 LLM 当上下文。
工作原理:
- 切片(chunking):memory 目录的 .md 文件按 800 token 切块
- 向量化(embedding):每个 chunk 走 embedding 模型 → 1024 维向量
- 存到 sqlite-vec(
vec0表)+ FTS5 关键词检索
查询时 FTS5 + vec0 双路召回,融合排序后返回 top-N。
没有 embedding provider 就跑不起来。可以用 OpenClaw 自带的 OpenAI 兼容 provider,或写插件桥接私有协议 API。
二、我之前是怎么做的:自写插件 + MiniMax
最初用 MiniMax embo-01(因为有他家的 Token Plan 订阅)。
还写过一篇公众号文章来介绍我是如何实现的。
MiniMax 协议跟 OpenAI 不一样:
| OpenAI | MiniMax | |
|---|---|---|
| 请求字段 | input |
texts |
| 响应字段 | data[].embedding |
vectors |
| 入库标记 | 无 | type: "db" |
没有 OpenAI 兼容端点。所以我写了插件 ~/.openclaw/extensions/minimax-portal-embedding/,做字段翻译(input ↔ texts、data ↔ vectors),跑 Token Plan OAuth。
现在看来就是踩一个大坑,基本每次升级 OpenClaw 都会导致 memory_search 工具失败,持续几个月每次升级完成后第一件事就是"测 memory_search 是否可用"。
三、现在是怎么配置的:原生 provider + 免费 BGE-M3
最近在群里抱怨修 memory_search 的问题,才知晓有免费的向量模型,感觉白吃了几个月的苦。
BAAI/bge-m3(SiliconFlow 提供):
- 1024 维、OpenAI 兼容协议、支持 100+ 语言、MTEB 排行榜前列
- SiliconFlow 上完全免费
- 拿人手短,贴推荐链接:https://cloud.siliconflow.cn/i/mY9pSsE5
关键是 OpenAI 兼容 → 直接用 OpenClaw 原生 openai-compatible provider,不用写插件。
最终配置
{
"memory": {
"search": {
"provider": "openai-compatible",
"model": "BAAI/bge-m3",
"remote": {
"baseUrl": "https://api.siliconflow.cn/v1",
"apiKey": "***",
"headers": {
"X-API-Key": "***",
"Authorization": "***"
}
},
"enabled": true
}
}
}
遇到两个小坑
- OpenClaw 默认加 Bearer,但 SiliconFlow 用
X-API-Key。hack:headers.Authorization设"skip"(magic value,跳过自动 Bearer),真 key 写到headers.X-API-Key,apiKey填"***"placeholder。 apiKey: ***不是 bug —— 走X-API-Key,apiKey字段就是占位符。
验证
跑 openclaw memory index --force --agent main 重建索引。5193 个新 embeddings 写入、DB +108 MiB atomic swap。
自写插件下线,配置干净。
文章评论