ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OpenClaw 又慢还费钱?给它装个 QMD 本地语义搜索 Skill 试试

OpenClaw 又慢还费钱?给它装个 QMD 本地语义搜索 Skill 试试

1. OpenClaw 长会话变慢变贵的真实原因

先说结论:OpenClaw 慢,八成不是模型本身慢,而是你每次都在给它喂一整本"回忆录"。我见过太多人把 MEMORY.md 越写越长,三个月后单次请求上下文飙到十几万 token,响应时间从 2 秒变成 2 分钟,账单从几毛钱变成几块钱,最后还大概率超时失败——钱花了,答案没拿到。

这个问题的本质是检索粒度太粗。传统记忆系统的逻辑是"把整个记忆文件塞进上下文",但一次对话真正相关的信息往往只有两三句话。剩下 95% 的内容全是噪音:过期的项目笔记、早就废弃的方案、跟当前问题八竿子打不着的会议记录。模型要在这堆噪音里找答案,推理时间随输入 token 线性增长,成本也随 token 线性增长,精准度反而因为干扰而下降。

QMD(Quantum Memory Database)解决的正是这一层。它是 Shopify 联合创始人 Tobi Lütke 开源的本地语义搜索引擎,核心思路很朴素:不要把整个文件塞给 AI,先用本地搜索找到最相关的 2-3 个片段,再把这些精准内容传给模型。底层是 TypeScript + Bun 写的,用 node-llama-cpp 跑本地 GGUF 模型,三层混合检索——BM25 全文搜索 + 向量语义搜索 + LLM 重排序,全程离线,数据不出本机。

适合谁?三类人最该装:会话历史超过 1 万 token 的(基本跑一周就超)、经常被长会话卡死困扰的、单次请求成本超过 1 块钱的。如果你只是偶尔问两句短问题,那确实没必要折腾。但只要你有长期项目记忆、跨文件知识检索的需求,QMD 带来的差距是数量级的——实测 token 削减 60-97%,响应快 5-50 倍,成本降 90-99%。

下面我按"装 QMD → 配 OpenClaw → 验证效果 → 排错"的顺序走一遍,所有命令和配置都能直接复制。

2. 装 QMD 前必须搞定的两个前置条件

动手之前先确认两件事,否则后面会卡在莫名其妙的地方。

第一,OpenClaw 版本必须 ≥ 2026.2.2。老版本没有 memory backend 切换能力,配置写了也不生效。先查:

openclaw --version

如果低于 2026.2.2,先升级再往下走。这一步别偷懒,我见过有人配置改了半天没反应,最后发现是版本太老。

第二,SQLite 必须支持 vector 扩展,版本 ≥ 3.40.0。QMD 的向量检索依赖这个扩展,系统自带的 SQLite 经常版本不够。验证命令:

sqlite3 --version

macOS 用户用 Homebrew 装最新版:

brew install sqlite

Linux(Ubuntu/Debian):

sudo apt update sudo apt install sqlite3

Windows 用户去 SQLite 官网下载页拿sqlite-tools-win-x64-*.zip,解压到比如C:\sqlite,然后把这个目录加进系统 PATH:右键"此电脑"→属性→高级系统设置→环境变量→编辑 Path→添加C:\sqlite。改完必须重启终端,否则 PATH 不生效。

两个前置都过了,再装 QMD 本体。推荐用 Bun,速度快:

bun install -g @tobilu/qmd

用 npm 也行:

npm install -g @tobilu/qmd

不想全局安装可以直接跑:

npx @tobilu/qmd --version

装完验证:

qmd --version

能打印版本号就说明装好了。首次运行会下载本地模型(几百 MB,需要联网),之后完全离线。

这里插一句关于模型调用的成本控制。QMD 负责把上下文压下来,但最终生成还是走模型 API。如果你想让整条链路的成本更可控,可以在 TaoToken 的模型对话入口先跑通一次基准请求,确认模型 ID 和计费口径,再接到 OpenClaw 里。地址是 https://taotoken.net/api,模型对话页在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite ,API Key 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 生成。这一步不是必须,但对想量化"省了多少"的人有用。

3. 可复制的 OpenClaw 接入 QMD 配置片段

配置文件位置按系统区分,内容完全一样:

  • macOS / Linux:~/.openclaw/openclaw.json
  • Windows:C:\Users\你的用户名\.openclaw\openclaw.json

打开这个 JSON,找到memory节点(没有就新建),改成下面这样:

{ "memory": { "backend": "qmd", "qmd": { "limits": { "timeoutMs": 8000 } } } }

两个参数说清楚:

backend: "qmd"是把记忆后端从默认的 SQLite 切到 QMD。这是开关,不写这行后面全白搭。

timeoutMs: 8000是检索超时,单位毫秒。默认 4 秒在首次索引或大目录下经常不够,会触发回退。设成 8 秒是实测比较稳的值,机器慢的可以拉到 12000。

如果你要指定索引目录(比如只索引项目文档,不索引整个 home),可以加indexPaths:

{ "memory": { "backend": "qmd", "qmd": { "indexPaths": [ "~/projects/docs", "~/notes" ], "limits": { "timeoutMs": 8000 } } } }

indexPaths支持多个路径,建议只放 Markdown 和纯文本目录。QMD 主要吃.md和.txt,PDF、Word 这些要先转成 Markdown 再放进去,否则索引不到。

配置改完,重启 Gateway:

openclaw gateway restart

重启后 OpenClaw 会自动走 QMD 检索。有个兜底机制值得知道:QMD 出问题时会自动回退到内置 SQLite 记忆系统,不会让你直接不能用,但你会感觉"怎么又变慢了"——所以看到变慢先查日志。

如果你用的是 Claude Code 这类编码 Agent,想把 QMD 的检索结果接到编码流程里,可以在 TaoToken 的 Coding Plan 页面看接入方式:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。注意 QMD 是本地检索层,不替代模型,两者是配合关系。

4. 验证 QMD 生效:日志、耗时与命中率对比

配置写完不算完,得证明它真的在工作。分三步验证。

第一步,看日志确认后端切换。开一个终端跟日志:

openclaw logs --follow

然后随便发一条会触发记忆检索的消息。日志里出现类似Using QMD memory backend的字样,说明切换成功。如果还是看到 SQLite 相关字样,回去检查 JSON 是不是写错了层级,或者版本没达标。

第二步,测单次检索耗时。我试过的做法是准备一个已知答案的问题,比如"三个月前那个项目最后用的什么方案",分别在启用前后各问一次,记录响应时间。启用前长会话经常 40 秒以上甚至超时,启用后基本 1-3 秒。你可以用time命令包一层做粗略计时:

time openclaw ask "我们之前所有项目用过哪些技术栈"

重点看两件事:响应时间是否进入个位数秒级,以及上下文 token 数是否明显下降(日志里一般会打印本次注入的 token 量)。如果 token 还是几万,说明索引没建好或者indexPaths指错了目录。

第三步,看命中率。QMD 的三层混合检索里,纯语义搜索精准度大约 59%,加上 BM25 和 LLM 重排序后能到 93% 左右。验证方法是准备 10 个有明确答案的历史问题,看返回的片段里是否包含正确答案所在的那几句。如果经常检索到无关片段,检查两件事:索引目录里是不是混进了大量无关文件,以及文档本身是不是写得太碎(一句话一个文件那种,语义检索很难命中)。

一个对照表帮你判断状态:

指标未启用 QMD启用 QMD 正常异常信号
响应时间5-120 秒1-3 秒仍 >10 秒
注入 token5K-200K削减 60-97%仍上万
长会话稳定性易超时不卡死频繁回退
日志后端sqliteqmd显示 sqlite

三项都达标,说明链路通了。有一项不对,进下一节排错。

5. 常见报错排查:401、local proxy failed、reading choices

这一节按真实会撞上的报错来。

报错一:401 Unauthorized。这个跟 QMD 本身无关,是模型 API 的 Key 问题。检查 OpenClaw 配置里模型 provider 的 Key 是否过期、是否贴错了前缀。如果你用的是 TaoToken 的 Key,去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 重新生成一个,注意 Base URL 要填https://taotoken.net/api,不要带多余路径。三件套对齐:Base URL + Key + Model ID,缺一不可。

报错二:local proxy failed或连接本地服务失败。这通常是 Gateway 没起来或者端口被占。先openclaw gateway restart,还不行就查端口占用。注意:这里说的是本地 Gateway 进程,不是任何网络代理工具,别往那个方向想。如果日志显示 QMD 子进程启动失败,多半是 SQLite 版本不够或 vector 扩展缺失,回去重跑sqlite3 --version确认 ≥ 3.40.0。

报错三:reading choices或解析响应失败。这个报错说明请求发出去了但返回结构不对,常见于模型 ID 写错(比如把gpt-4o写成gpt4o)或者 Base URL 少了/v1之类的路径段。对照 TaoToken 接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 里的示例,逐字核对 Base URL 和 Model ID。另外 QMD 检索超时后回退时也可能抛这个,把timeoutMs调到 12000 再试。

报错四:OAuth 相关失败。如果你接的是需要 OAuth 的 provider(比如某些 Claude 接入方式),token 过期会报这个。重新走一遍授权流程,或者换用 API Key 方式。Claude Code 的接入细节在 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code&utm_campaign=rewrite 有完整说明,包括 Base URL 和模型 ID 的填法。

报错五:检索结果为空但日志正常。索引没建。QMD 首次使用需要先索引目录,确认indexPaths指向的目录里确实有.md/.txt文件,且路径没写错(~在 JSON 里不一定被展开,保险起见写绝对路径)。索引 12 个文件通常几秒完成,大目录首次会慢一些。

排错顺序建议:先看openclaw logs --follow的原始报错,再对照上面五类定位。别一上来就改配置,日志里通常写得很清楚。

6. 把 QMD 接进日常流程的几个实用动作

装完不是终点,用起来才值。三个动作建议固化下来。

动作一:给索引目录做减法。不要图省事把整个 home 目录塞进indexPaths。索引越杂,检索噪音越大,命中率反而掉。我的做法是只索引~/projects/*/docs和~/notes两类,废弃项目定期从目录里移走。QMD 索引 12 个文件几秒钟,但索引几千个无关文件会让每次检索都变慢。

动作二:文档写法配合检索。QMD 靠语义片段命中,所以笔记别写成一整篇没有小标题的长文。每个主题一个二级标题、每段控制在几句话,检索时更容易精准切出相关片段。这跟写代码注释一个道理——粒度对了,检索才准。

动作三:定期看回退日志。QMD 出问题会自动回退 SQLite,你不会收到弹窗,只会感觉"怎么又慢了"。每周扫一眼日志里有没有回退记录,有就按第 5 节排查。回退本身是保护机制,但长期回退等于白装。

关于成本量化,如果你想精确知道省了多少,可以在接入前后各跑一次相同问题,对比日志里的 token 数和账单。TaoToken 的控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 能看到每次请求的用量明细,配合 QMD 前后的对比数据,省下的比例一目了然。长期跑编码 Agent 的话,Coding Plan 的额度模型比按次计费更适合高频检索场景。

最后说个容易忽略的点:QMD 的模型文件占几百 MB,加上索引通常总共 1-2 GB。磁盘紧张的话,把模型缓存目录指到大盘上,别塞在系统盘。卸载也简单,配置里把backend改回"sqlite",重启 Gateway,再bun uninstall -g @tobilu/qmd就干净了。

整套流程走下来,最花时间的其实是前置的 SQLite 版本和索引目录规划,QMD 本身安装配置十分钟搞定。装完之后长会话从"不敢开"变成"随便聊",这个体验差距值得折腾一次。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进