你用 OpenClaw 跑几轮就懂那种绝望:token 像开了倍速。🔥 尤其 Anthropic 的 Claude 用户,更刺激,聊着聊着直接 hit limit。 更气人的是,很多时候不是你问得复杂,是 agent 把一堆八竿子打不着的信息硬塞进 context。钱花了,答案还跑偏。
这里有个非常“反直觉”的结论:
你要的不是“更大的上下文”。 你要的是“更会找的记忆”。
把“整本 MEMORY.md 扔进去”这套戒了。 换成:先搜,再喂。只喂相关段落。
这篇就讲一个工具:qmd。 它干的事很简单:把你的笔记/文档/会议记录做成可搜索的本地索引,然后给 agent 提供“精准片段”,而不是“整本搬运”。
0)qmd 到底是什么?别神化,它就是“给 Agent 用的本地搜索”
qmd 出自 Tobi Lütke(Shopify 的联合创始人兼 CEO)。 官方自我介绍也很直白:本地搜索引擎,给你记不住的东西用的,专门面向 agent workflow。
它的关键点在于“混合检索”这条链路: BM25 全文(FTS5)+ 向量语义 + LLM rerank,外加 query expansion(帮你把问题扩写成更好搜的表达)。
更爽的是:全本地跑。模型第一次用会自动拉下来,后面离线也能用。
1)装好 qmd:别抠细节,照着抄就行
qmd 官方推荐用 Bun 全局安装:
# 全局安装
bun install -g https://github.com/tobi/qmd
有两个小坑提前说清楚:
- qmd 要求 Bun >= 1.0.0。
- macOS 可能需要 Homebrew 装 SQLite(为了扩展支持),别问,问就是依赖现实。
2)把“记忆库”建起来:索引你真正想让它记住的东西
你在 OpenClaw 目录里通常会有:daily logs、memory、docs、workspace 之类。 qmd 的做法是建 collection,然后统一 embed。
按官方推荐的最省事路径是这样:
# 假设你在 OpenClaw 项目目录
cd ~/clawd
# 给 memory 建一个 collection(建议只索引 md)
qmd collection add ./memory --name daily-logs --mask "**/*.md"
# 也可以把项目文档单独建一个库
qmd collection add . --name workspace --mask "**/*.md"
# 生成向量(会把所有已索引的内容跑一遍)
qmd embed
想让结果更“像人”,你可以给不同库加一句“背景说明”,这玩意会出现在检索结果里,agent 看了不容易误会。
qmd context add qmd://daily-logs "Daily logs and decisions"
qmd context add qmd://workspace "Project docs and specs"
3)怎么搜?别再执着 “--hybrid”,现在直接用 query
网上有些旧教程还在写 “search --hybrid”。 qmd 现在更清晰:三种模式拆开了。
qmd search:关键词(快,适合你记得原话)qmd vsearch:纯语义(你不记得原话也能摸到)qmd query:混合 + rerank(默认推荐,质量最好)
直接抄这几条:
# 关键词
qmd search "Ray 写作风格"
# 纯语义
qmd vsearch "他写作更像什么风格"
# 混合 + rerank(最推荐)
qmd query "Ray 的写作风格是什么"
qmd 的 rerank 链路里明确写了融合策略和评分解释,甚至连“为什么这么融合”都写出来了,很工程师。
4)你关心的“零成本”到底成本在哪:模型下载一次,之后真离线
你原素材里提到会下 Jina 的 embedding / reranker。 这里我要提醒一句:qmd 的模型配置是会迭代的,别死记某个型号。
按当前 README,它会自动下载三套 GGUF 模型(embedding、rerank、query expansion),缓存到本地目录。 也就是说:你的“API 成本”是 0,硬盘成本是一次性。
真正的省钱,不是“少问两句”。 是“每次只喂 200 token,而不是喂 2000 token 的垃圾”。
5)MCP 集成:让 agent 自己去“回忆”,你别当搬运工
如果你希望 agent 自动检索,而不是你手动跑 qmd 再复制粘贴,直接把 qmd 作为 MCP server 挂进去。
qmd 官方列出来的 MCP 工具是这些(名字前面带 qmd_):
qmd_search / qmd_vsearch / qmd_query / qmd_get / qmd_multi_get / qmd_status
配置示例(官方给了 Claude Desktop / Claude Code 的 JSON)。
{
"mcpServers": {
"qmd": {
"command": "qmd",
"args": ["mcp"]
}
}
}
你在 OpenClaw 里做同样的事也就一个思路: 把 “qmd mcp” 当成一个工具入口,让 agent 先 query,再决定要不要 get 原文。
6)两个真实场景:为什么它会省 10 倍 token
场景 A:回忆用户偏好(最典型)
用户问:“Ray 的写作风格是什么?” 很多 agent 的默认反应是:把 MEMORY.md 整本塞进去。
结果呢? 2000 token 起步,90% 内容无关,模型还容易被噪音带跑。
qmd 的打法更像人:先搜一句 “Ray 写作风格”,只捞相关段落,然后再回答。 你给模型的上下文变短了,注意力反而更集中。
场景 B:跨文件检索(真正省你命)
用户问:“之前讨论过什么?” 你要是靠手动翻文件,翻到怀疑人生。 你要是靠塞对话历史,token 又炸。
qmd 直接在所有 collections 里做 query,返回高相关片段 + 文件位置。
你再决定要不要 qmd get 拉完整段落。效率很像“有个靠谱助理在旁边翻资料”。
7)避坑指南:qmd 用不好也会变成“噪音制造机”
qmd 强归强,你也别把它当万能垃圾桶。
你索引什么,它就记住什么。 你把垃圾喂进去,它就会很认真地给你检索垃圾。
几个建议很实用:
- 别把 .env、密钥、token、隐私聊天记录全丢进去 agent 记住了不等于安全,尤其 OpenClaw 这种能连一堆应用的东西,本质是“高权限基础设施”。
- 给 collection 分层:daily logs 一库,项目 docs 一库,别一锅粥 不分层,你自己都不知道它搜出来的是哪种“记忆”。
- 大文件慎重:qmd 的 multi-get 默认会跳过太大的文件(有 max-bytes),不是它小气,是怕你把上下文塞爆。
- 定期更新:有
qmd update,也可以按你的习惯加到 cron/heartbeat。
8)收个尾:你想省 token,本质是在做“上下文工程”
OpenClaw 这种 agent 为什么容易烧钱? 因为它太容易把“可能有用的一切”都扔进 context。
qmd 的价值在于: 把“记忆”从 全量灌输 变成 按需检索。 你省的不止是钱,还有脑细胞,以及一堆莫名其妙的跑偏回答。
你要是已经在用 OpenClaw,建议今天就把这条流程跑一遍。 跑通之后,你会发现自己突然变得很淡定: agent 不再像饿狼一样吞上下文,你也不用当搬运工。😌