Logo
热心市民王先生

qmd 核心能力与验证

技术研究 人工智能 LLM

qmd collection add ~/notes --name notes qmd collection add ~/Documents/meetings --name meetings

2.1 功能特性详解

搜索模式

qmd 提供三种搜索模式,适用于不同场景:

命令模式适用场景速度准确性
qmd searchBM25 全文搜索关键词精确匹配极快中等
qmd vsearch向量语义搜索语义相似度查询
qmd query混合搜索 + 重排复杂查询,最佳质量中等最高

集合(Collection)管理

qmd 使用集合来组织文档:

# 创建集合
qmd collection add ~/notes --name notes
qmd collection add ~/Documents/meetings --name meetings

# 支持自定义文件匹配模式
qmd collection add ~/work/docs --name docs --mask "**/*.md"

# 列出所有集合
qmd collection list

# 删除和重命名集合
qmd collection remove myproject
qmd collection rename old-name new-name

上下文(Context)管理

上下文帮助搜索理解你的内容:

# 为集合添加描述性上下文
qmd context add qmd://notes "个人笔记和想法"
qmd context add qmd://docs "工作文档和API说明"

# 添加全局上下文(适用于所有集合)
qmd context add / "我的项目知识库"

# 查看所有上下文
qmd context list

文档检索

# 通过路径获取文档
qmd get "docs/api-reference.md"

# 通过 docid 获取(搜索结果显示 docid)
qmd get "#abc123"

# 获取特定行范围
qmd get notes/meeting.md:50 -l 100

# 批量获取文档(支持 glob 模式)
qmd multi-get "journals/2025-05*.md"
qmd multi-get "doc1.md, doc2.md, #abc123"

2.2 MCP 服务器支持

qmd 内置 MCP(Model Context Protocol)服务器,支持与 AI Agent 的深度集成:

暴露的工具

工具名功能描述
qmd_searchBM25 关键词搜索(支持集合过滤)
qmd_vsearch向量语义搜索(支持集合过滤)
qmd_query混合搜索 + 重排(支持集合过滤)
qmd_get通过路径或 docid 检索文档
qmd_multi_get批量检索文档(支持 glob、列表、docids)
qmd_status查看索引状态和集合信息

MCP 配置示例

Claude Desktop 配置 (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "qmd": {
      "command": "qmd",
      "args": ["mcp"]
    }
  }
}

Claude Code 配置 (~/.claude/settings.json):

{
  "mcpServers": {
    "qmd": {
      "command": "qmd",
      "args": ["mcp"]
    }
  }
}

2.3 数据存储架构

qmd 使用 SQLite 作为后端存储,所有数据存储在 ~/.cache/qmd/index.sqlite

数据表结构

表名用途
collections索引的目录,包含名称和 glob 模式
path_contexts虚拟路径的上下文描述 (qmd://…)
documentsMarkdown 内容和元数据,docid(6字符哈希)
documents_ftsFTS5 全文索引
content_vectorsEmbedding 向量块(哈希、序号、位置、800 tokens)
vectors_vecsqlite-vec 向量索引(hash_seq 键)
llm_cache缓存的 LLM 响应(查询扩展、重排分数)

嵌入模型配置

qmd 使用三个本地 GGUF 模型(首次使用时自动下载):

模型用途大小HuggingFace URI
embeddinggemma-300M-Q8_0向量嵌入~300MBhf:ggml-org/embeddinggemma-300M-GGUF/...
qwen3-reranker-0.6b-q8_0重新排序~640MBhf:ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF/...
qmd-query-expansion-1.7B-q4_k_m查询扩展(微调)~1.1GBhf:tobil/qmd-query-expansion-1.7B-gguf/...

模型缓存在 ~/.cache/qmd/models/ 目录。

2.4 评分系统与解释

qmd 使用多阶段评分系统:

后端原始分数

后端原始分数转换范围
FTS (BM25)SQLite FTS5 BM25Math.abs(score)0 到 ~25+
Vector余弦距离1 / (1 + distance)0.0 到 1.0
RerankerLLM 0-10 评分score / 100.0 到 1.0

最终分数解释

分数含义
0.8 - 1.0高度相关
0.5 - 0.8中等相关
0.2 - 0.5somewhat 相关
0.0 - 0.2低相关

2.5 技术限制与边界

系统要求

  • Bun >= 1.0.0(运行环境)
  • macOS: 需要 Homebrew 安装的 SQLite(扩展支持)
    brew install sqlite

文件格式限制

  • 目前主要针对 Markdown 文件优化
  • 支持通过 glob 模式自定义文件匹配
  • 大型文件(超过 10KB)在 multi-get 时可能被跳过(可配置)

模型依赖

  • 首次运行需要下载约 2GB 的 GGUF 模型
  • 需要本地下载和存储空间
  • 模型通过 HuggingFace 下载,需要网络连接

性能特征

  • 索引速度: 取决于文档数量和大小
  • 搜索速度:
    • search: 毫秒级
    • vsearch: 百毫秒级
    • query: 秒级(包含重排)
  • 内存占用: 主要取决于模型加载,约 2-3GB

2.6 可行性验证

已验证能力 ✅

  1. 本地运行: 完全本地化,无需云端 API(除首次下载模型)
  2. MCP 支持: 内置 MCP 服务器,可与 Claude、Cursor 等集成
  3. 多种输出格式: 支持 JSON、CSV、Markdown、XML 输出
  4. 集合隔离: 支持多个知识库,可按集合过滤搜索
  5. Agent 友好: --json--files 输出专为 Agent 工作流设计

潜在限制 ⚠️

  1. 仅支持 Markdown: 对其他格式(PDF、Word 等)支持有限
  2. Bun 依赖: 需要 Bun 运行时环境
  3. 模型下载: 首次使用需要下载大模型文件
  4. 单用户设计: 非多用户系统,适合个人或小型团队

参考资料