项目信息
- 项目名:qmd
- 链接:https://github.com/tobi/qmd
- 我写这篇时可见的公开信息来源:GitHub Trending 页面、仓库 README、公开 CHANGELOG
先说结论
如果你最近在看 agent 工作流,qmd 是今天 Trending 里一个很值得关注、但容易被低估的项目。它表面上是“本地文档搜索引擎”,但更准确的说法应该是:它在把个人和团队私有知识,整理成一个能被 agent 稳定调用的本地检索层。
我对它的工程判断是:qmd 的价值不在于提出了全新的检索算法,而在于把“本地优先 + 混合检索 + MCP 接入 + agent 可消费输出”这几件事组合得相当实用。 这类项目不一定最炸裂,但很可能比很多高调的 agent 框架更容易真正落地。
它真正值得看的点有三个:
- 它解决的是一个普遍且持续存在的问题——知识分散在 Markdown、会议纪要、工作文档里,agent 想用却拿不到稳定上下文;
- 它不是只做“能搜”,而是把 BM25、向量检索、LLM rerank、上下文树和 MCP 接口串成一条完整管线;
- 它选择了 all-local 路线,这意味着隐私、延迟、可控性都更适合真实工作流。
但也要说清楚:qmd 目前更像一层高质量本地检索底座,不是完整 agent 平台。它能显著改善知识召回质量,但不能替代上层任务规划、工具编排和结果验证。
它解决什么问题
今天大多数 agent 在“使用私有知识”这件事上都有类似问题:
- 文档散落在多个目录和文件夹,难统一索引;
- 纯关键词搜索太脆,换个说法就找不到;
- 纯向量检索又容易召回语义相近但工程上不相关的内容;
- 就算检索到了,agent 拿到的也常常只是几段孤立文本,而不是带上下文的材料;
- 很多团队其实不想把内部文档上传到云端做 SaaS 检索。
qmd 的切入方式很明确:把本地 Markdown、会议记录、文档知识库整理成一个本地查询系统,然后把查询结果以适合 agent 消费的方式暴露出去。
从 README 可见,它支持把 notes、meetings、docs 这类目录定义成 collection,支持追加 context 描述,支持 embeddings,最后通过 search / vsearch / query / get / multi-get 等接口把结果吐给人或 agent。
这类设计的实用价值很高。因为真实工作流里,很多时候我们并不缺模型,而是缺一个稳定、低摩擦、不会泄露数据的“私有知识入口”。qmd 就是在补这层。
核心架构 / 思路
基于 README 和 CHANGELOG,qmd 的核心思路大致可以拆成四层。
1. 数据组织层:Collection + Context
qmd 不是简单把一堆文件丢进向量库,而是先让用户把数据源组织成 collection,例如:
- 个人笔记
- 会议纪要
- 工作文档
- 某个项目的内部说明
更关键的是它支持额外加 context,例如“这是季度会议纪要”“这是内部 API 文档”。README 里甚至明确说 context tree 是关键特性,因为它能让 LLM 在选文档时做出更好的上下文判断。
这是个很对的设计。很多 RAG 系统失败,不是败在 embedding 模型,而是败在语料组织太粗暴。qmd 至少意识到:文档不仅有内容,还有位置、层级和用途。
2. 检索层:BM25 + Vector + LLM rerank
qmd 的检索不是单一路线,而是混合管线:
- BM25 负责高精度关键词命中;
- 向量检索负责语义召回;
- LLM rerank 负责把初步候选重新排序;
- 最终通过
query暴露成更高质量的统一入口。
这不是新概念,但很重要。因为单一检索路线很难兼顾准确率和覆盖率。尤其是知识库里经常同时存在:
- 专有名词;
- 缩写;
- 口语化表达;
- 不规范标题;
- 大量历史会议记录。
纯 BM25 会漏召回,纯向量会引入噪音。混合检索是更现实的方案。
3. 本地推理层:all-local 而不是把数据交出去
README 里明确写了:它的 LLM rerank 和本地推理依赖 node-llama-cpp + GGUF 模型,强调 all-local。这个选择很关键。
我认为 qmd 最有现实吸引力的一点,就是它不是默认把内部文档送去第三方云服务处理,而是优先让组织把能力部署在自己机器上。这对以下场景尤其重要:
- 不适合上云的内部资料;
- 个人知识库和日记类内容;
- 对延迟敏感、希望离线可用的工作流;
- 想把 agent 能力嵌进本地开发环境的人。
当然,这也意味着资源门槛会转移到本地机器上。all-local 不是零成本,只是把成本从云订阅换成设备资源和配置复杂度。
4. 集成层:CLI + MCP,让 agent 真能调用
qmd 不只是一个 CLI 工具,它还暴露 MCP server。README 里可见的 MCP 工具包括:
querygetmulti_getstatus
这件事的重要性在于:它不是停在“你可以自己搜”,而是进一步变成“agent 可以把它作为外部知识工具直接调用”。
而且它还支持 stdio 和 HTTP transport,后者用于长驻服务,避免每次重复加载模型。对于实际 agent 工作流来说,这比 demo 阶段常见的一次性脚本有意义得多。
为什么现在值得看
1. 因为 agent 的下一轮竞争不只是模型,而是知识入口
今天很多 agent 的短板不是不会推理,而是拿不到对的上下文。团队内部真正阻碍交付的,往往不是“模型不够聪明”,而是:
- 查不到该看的文档;
- 找到的内容不完整;
- 搜出来太多噪音;
- 结果没法稳定复用。
qmd 正好对准这个问题。它不造新模型,而是改善模型进入知识库的路径。
2. 因为本地优先正在重新变得有吸引力
过去很多 AI 工具默认上云,但随着隐私、成本、稳定性和组织合规要求增加,本地优先路线在重新变得重要。尤其是个人生产力和开发者工具场景,很多人其实更希望:
- 数据留在本机;
- 没网也能工作;
- 成本可预期;
- 能自己替换模型和参数。
qmd 这条路线的长期价值,不一定来自最大市场,而可能来自最稳定的一批高频用户。
3. 因为它在往“可工程验证”的方向演进
CHANGELOG 很值得看。可见最近版本不是只在堆概念,而是在补一堆工程细节,例如:
- 代码文件基于 tree-sitter 做 AST-aware chunking;
- 支持 bench 命令评估 precision@k、recall、MRR、F1;
- 支持 per-collection model configuration;
- 支持跳转到编辑器具体行号;
- 处理 embedding stall、上下文窗口、BM25 token 细节、GPU fallback 等问题。
这些更新有一个共同信号:项目已经在面对真实使用中的稳定性、性能和评估问题,而不只是“做出一个看起来像 AI 搜索的 demo”。
README / 公开描述里能确认的东西
这里先把能确认的信息和工程判断分开。
公开可确认的信息
根据仓库 README / CHANGELOG,当前公开能确认的包括:
- qmd 面向本地 Markdown、会议纪要、文档知识库等内容;
- 支持 collection 和 context 管理;
- 支持关键词搜索、语义搜索、混合检索和 reranking;
- 支持 CLI 和 MCP;
- 支持 HTTP 形式的长驻 MCP 服务;
- 最近版本加入了 AST-aware code chunking、bench 命令、按 collection 配模型等功能;
- 项目明确面向 agentic flows,而不是只给人类手工搜索。
我的工程判断
我的判断是,qmd 的核心竞争力不在“算法领先”,而在工作流集成质量。它把几个常见但容易分裂的能力拼在一起了:
- 本地索引
- 检索管线
- 结构化输出
- MCP 接入
- 长驻服务
- 基础评测
这套组合如果稳定,足以让它成为很多 agent 工作流里的“默认知识层”。对于开发者、研究者、内容团队,价值都很直接。
真正要验证什么
如果要判断 qmd 值不值得长期跟进,我会重点看下面几件事。
1. 大规模本地知识库下是否还能保持速度和稳定性
小型 Markdown 仓库都好做,真正难的是:
- 文档数量上万;
- 会议纪要很长;
- 多个 collection 同时启用;
- 本地模型比较慢;
- 频繁增量更新。
它现在已经开始补 embedding stall、memory bound、GPU fallback 这些问题,说明作者已经踩到真实规模带来的坑。但后续是否能继续扛住,还要看实际口碑。
2. 混合检索效果是否稳定优于简单替代方案
README 里讲得很顺,但真正要看的是:它相对于“ripgrep + 文件树 + 模型总结”这种更轻的方案,到底提升了多少;相对于常见向量库 RAG,又多带来了多少准确率收益。
好消息是它已经有 qmd bench,这至少说明项目接受“效果要被量化”这件事。我认为这是很好的信号。
3. MCP 调用体验是否足够顺手
很多 MCP 工具的问题不是能力不够,而是:
- 安装麻烦;
- 依赖模型太重;
- 每次调用都慢;
- 返回格式不够 agent 友好。
qmd 目前在这条线上方向是对的,尤其是 --json、--files 和 HTTP daemon 模式,都明显是为 agent 消费而设计的。但最终成败还是要看实际集成是否顺滑。
4. 它能否从“个人工具”进一步成为团队共享底座
本地工具天然容易在个人场景成功,但要进团队,还要解决:
- 共享索引策略;
- 权限边界;
- 模型和资源配置;
- 文档更新同步;
- 多人协作的一致性。
这一步难度会比个人使用高很多,也是它未来能否继续向上走的关键。
潜在风险
风险 1:本地优先很好,但资源和配置复杂度也更高
all-local 的好处很明显,但代价也明显:
- 模型下载和兼容问题;
- 本地算力和内存限制;
- 不同系统上的依赖差异;
- 首次配置成本。
这会限制一部分非技术用户的采用。
风险 2:效果波动可能来自语料本身,而不只是工具
很多团队会把“搜不准”归因给工具,但实际上文档质量、命名规范、上下文标注、会议纪要质量都会直接影响结果。qmd 再强,也无法完全拯救混乱语料。
风险 3:它更像底座,不是闭环产品
如果用户预期是“装上 qmd,agent 就自动变聪明很多”,那大概率会失望。它本质上是检索和上下文层,而不是完整任务系统。它能改善 agent 的输入,但不能代替 agent 的规划、执行和验证。
哪些地方最值得借鉴
即便你不直接使用 qmd,它也有几件事很值得 agent / developer tools 团队借鉴。
1. 不要把“私有知识接入”只理解成上传向量库
很多团队默认一上来就做云端索引和在线检索,但对大量真实用户来说,本地优先其实更有吸引力。qmd 说明:本地路线不是退步,而是另一种更可控的产品选择。
2. 检索产品要围绕工作流,而不是围绕模型炫技
qmd 里最有价值的不是“用了 rerank”,而是它考虑了:
- collection 怎么组织;
- context 怎么补;
- agent 怎么调用;
- 搜索结果怎么回到编辑器;
- 效果怎么 benchmark。
这就是典型的工程化思路。
3. Agent 工具最好输出结构化、可继续处理的结果
--json、--files、MCP、HTTP daemon,这些设计都说明作者理解一件事:agent 不是人。给 agent 的工具,不应该只吐一段漂亮文本,而应该提供可拼接、可筛选、可继续处理的结构化结果。
总结
qmd 不是今天 Trending 里最喧闹的项目,但它很可能是最容易进入真实工作流的一类项目。它代表的方向很明确:把本地知识检索做成 agent 的可靠底座,而不是又一个云端大而全平台。
如果你在搭建自己的 agent 工作流、个人知识系统,或者团队内部文档助手,qmd 值得重点观察。我的总体结论是:
- 它的工程方向是对的;
- 公开信息足以支撑“值得持续跟进”的判断;
- 它短期最应该验证的是性能、检索质量和 MCP 集成体验;
- 它中长期真正的想象力,在于成为本地 agent 生态里的默认知识入口层。
一句话总结:qmd 不炫,但很实;不是概念型 agent 项目,而是有机会长期留在工具链里的那种基础设施。