
如果你在用 OpenClaw / Claude 这类 agent,你大概率已经感受到了 token 消耗的速度:
- 聊几轮就 hit limit
- 为了“记住上下文”,agent 往 context 里塞一堆无关信息
- 不仅更贵,还会降低回答精度(噪音越多,越容易跑偏)
有没有办法让 agent 只回忆最相关的那几段,同时 完全零 API 成本?
答案是:qmd。
qmd 是 Shopify 创始人 Tobi 做的一个本地语义搜索引擎(Rust),专为 AI agent 场景设计:
- 搜索 markdown 笔记、会议记录、文档
- 混合检索:BM25 全文 + 向量语义 + LLM 重排序
- 完全本地运行(GGUF 模型),零 API 成本
- 可用 MCP 集成,让 agent 主动“精准回忆”
GitHub:https://github.com/tobi/qmd
3 步配置(10 分钟搞定)
第 1 步:安装 qmd
按官方文档安装:https://github.com/tobi/qmd
首次运行会自动下载模型(之后可完全离线):
- jina-embeddings-v3(约 330MB)
- jina-reranker-v2-base-multilingual(约 640MB)
第 2 步:创建记忆库 + 生成 embeddings
以 OpenClaw 工作目录为例:
cd ~/clawd
# 创建记忆库(索引 memory 文件夹)
qmd collection add memory/*.md --name daily-logs
# 生成 embeddings
qmd embed daily-logs memory/*.md
# 也可以索引根目录核心文件
qmd collection add *.md --name workspace
qmd embed workspace *.md
索引速度很快:十来个文件通常就是几秒级(纯本地,不联网)。
第 3 步:测试搜索
# 混合搜索(关键词 + 语义,通常最稳)
qmd search daily-logs "关键词" --hybrid
# 纯语义搜索
qmd search daily-logs "关键词"
# 查看所有 collections
qmd list
实测体感:
- 混合搜索可到 90%+ 精准度
- 纯语义在一些场景会明显飘一些
进阶:MCP 集成(让 agent 主动回忆)
把 qmd 作为 MCP server 接进去,agent 就能“先搜再答”,而不是把整个 MEMORY.md 塞进上下文。
示例:创建 config/mcporter.json
{
"mcpServers": {
"qmd": {
"command": "/Users/你的用户名/.bun/bin/qmd",
"args": []
}
}
}
开箱即用的工具通常包括:
- query:混合搜索(一般最精准)
- vsearch:纯语义
- search:关键词
- get / multi_get:精准提取段落
- status:健康检查
为什么它能省 90% token?
传统“回忆”方式是:把一整份 MEMORY.md(甚至对话历史)塞进 context。
qmd 的方式是:
- 先搜「你要的那一小段」
- 只把相关段落(比如 200 token)喂给模型
结果就是:
- 成本更低
- 噪音更少
- 回答更准
维护:定期更新索引
qmd embed daily-logs memory/*.md
qmd embed workspace *.md
你甚至可以把它加到 heartbeat / cron 里自动执行。
—
如果你已经在 OpenClaw 上跑了一段时间,我强烈建议你试一下 qmd:
本地、免费、可持续、能把“回忆”变成一件工程化的事。