一级标题
二级标题
三级标题
四级标题
加粗
删除
高亮
代码块
chmod 777 filename.sh
创建引用
- 无序列表
- 有序列表1
- 有序列表2
点击展开/折叠 这里是折叠内容,可以放文字、列表、图片、代码块等。
<details>
<summary>点击展开/折叠</summary>
这里是折叠内容,可以放文字、列表、图片、代码块等。
</details>
加粗
删除
高亮
代码块
chmod 777 filename.sh
创建引用
点击展开/折叠 这里是折叠内容,可以放文字、列表、图片、代码块等。
<details>
<summary>点击展开/折叠</summary>
这里是折叠内容,可以放文字、列表、图片、代码块等。
</details>
书籍信息:《高效能人士的七个习惯》
依赖 (Dependence) → 独立 (Independence) → 互赖 (Interdependence)
↓ ↓ ↓
你照顾我 我可以做到 我们可以做到
(习惯 1-3) (习惯 4-6) (习惯 7)
个人愿景的原则
核心要点:
付诸行动:
自我领导的原则
核心要点:
付诸行动:
自我管理的原则
核心要点:
时间管理矩阵:
紧急 不紧急
重要 Ⅰ危机处理 Ⅱ预防/规划/学习 ← 聚焦这里
Ⅲ干扰/会议 Ⅳ琐事/浪费时间
付诸行动:
人际领导的原则
核心要点:
付诸行动:
移情沟通的原则
核心要点:
倾听层次:
付诸行动:
创造性合作的原则
核心要点:
付诸行动:
平衡的自我提升原则
核心要点:
付诸行动:
不断更新 (习惯七)
↑
←────────────┼─────────→
↓ ↓
个人领域成功 公众领域成功
(独立) (互赖)
┌─────────────┐ ┌─────────────┐
│ 积极主动 ① │ │ 双赢思维 ④ │
│ 以终为始 ② │ →→ │ 知彼解己 ⑤ │
│ 要事第一 ③ │ │ 统合综效 ⑥ │
└─────────────┘ └─────────────┘
QMD (Query Markdown Document) 是一个基于 RAG (Retrieval-Augmented Generation) 的智能文档查询系统,专为 Markdown 文档库设计。
核心定位:
┌─────────────────────────────────────────────────────────┐
│ QMD Search 系统 │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │ 文档索引层 │ │ 检索引擎 │ │ LLM 增强层 │ │
│ │ - Markdown │ │ - BM25 FTS5 │ │ - Query │ │
│ │ - 分块 │─▶│ - 向量检索 │─▶│ Expansion │ │
│ │ - Embedding│ │ | - RRF 融合 │ │ - Rerank │ │
│ └─────────────┘ └──────────────┘ └────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ SQLite 数据库 │ │
│ │ - FTS5 全文索引 │ │
│ │ - sqlite-vec │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
用户添加文档
│
▼
读取 Markdown 文件
│
├──▶ 提取元数据(标题、标签、创建时间)
│
├──▶ 文档分块(Chunking)
│ - 按段落/标题分割
│ - 保留上下文继承关系
│
├──▶ 生成 Embedding 向量
│ - 使用 Sentence Transformers
│ - 默认模型:all-MiniLM-L6-v2
│
└──▶ 存储到数据库
- 原文 → SQLite FTS5(全文索引)
- 向量 → sqlite-vec(向量索引)
- 元数据 → 关系表
用户查询:"如何在 Obsidian 中配置同步?"
│
├─────────────────────┬─────────────────────┐
│ │ │
▼ ▼ ▼
BM25 全文检索 向量语义检索 LLM Query Expansion
(关键词匹配) (语义相似度) (可选,扩展查询)
│ │ │
│ 返回 Top 20 │ 返回 Top 20 │ 生成 3-5 个变体
│ │ │
└─────────────────────┴─────────────────────┘
│
▼
Reciprocal Rank Fusion (RRF)
融合两个结果列表
│
▼
Position-Aware Blending
根据位置调整最终分数
│
▼
LLM Rerank(可选)
使用 LLM 重新排序 Top 40
│
▼
返回最终 Top 10 结果
技术栈:SQLite FTS5
-- 查询示例
SELECT
d.title,
d.path,
bm25(documents_fts, 10.0, 1.0) as bm25_score
FROM documents_fts f
JOIN documents d ON d.id = f.rowid
WHERE documents_fts MATCH 'Obsidian 同步'
ORDER BY bm25_score ASC -- BM25 分数越低越好(负数)
特点:
技术栈:sqlite-vec + Sentence Transformers
# 生成查询向量
query_embedding = model.encode("如何在 Obsidian 中配置同步?")
# 向量相似度搜索(余弦相似度)
SELECT
d.title,
d.path,
vec_distance_cosine(query_vec, embedding) as similarity
FROM documents d
ORDER BY similarity DESC
LIMIT 20
特点:
目的:融合 BM25 和向量检索的结果
公式:
RRF Score = Σ (1 / (k + rank_i))
其中:
- rank_i = 文档在第 i 个结果列表中的排名
- k = 60(经验值,防止分母过小)
示例:
文档 A: BM25 排名 3, 向量排名 5
RRF Score = 1/(60+3) + 1/(60+5) = 0.0159 + 0.0154 = 0.0313
文档 B: BM25 排名 1, 向量排名 15
RRF Score = 1/(60+1) + 1/(60+15) = 0.0164 + 0.0133 = 0.0297
→ 文档 A 排名更高(在两个列表中都表现稳定)
优势:
# 原始查询
query = "Obsidian 同步配置"
# LLM 生成的变体
expanded_queries = [
"Obsidian 如何设置自动同步",
"Obsidian sync configuration",
"Obsidian 多设备数据同步方法",
"Obsidian 云端备份设置"
]
# 对每个变体执行检索,合并结果
触发条件:
# 从混合检索中获取 Top 40 候选
candidates = hybrid_search(query, limit=40)
# 使用 LLM 评估相关性
reranked = llm.rerank(query, candidates)
# 返回 Top 10
return reranked[:10]
常用模型:
# 使用 pipx 安装(推荐,隔离环境)
pipx install qmd
# 或从源码安装
pip install -e .
# 1. 添加文档集合(Collection)
qmd add obsidian-vault --path ~/opt/Obsidian_vault --pattern "*.md"
# 2. 更新索引
qmd update
# 3. 查看状态
qmd status
# 基础搜索
qmd search "如何在 Obsidian 中配置同步"
# 限定集合
qmd search "同步配置" --collection obsidian-vault
# 指定结果数量
qmd search "同步" --limit 5
# 显示完整文档内容
qmd search "同步" --full
# 显示行号
qmd search "同步" --line-numbers
# 输出为 JSON
qmd search "同步" --format json
# 输出为 Markdown
qmd search "同步" --format md
# 使用 query 命令执行深度搜索
qmd query "如何在 Obsidian 中配置同步"
# 等价于
qmd search "如何在 Obsidian 中配置同步" --full --rerank
# 列出所有集合
qmd list
qmd ls
# 重命名集合
qmd collection rename old-name new-name
# 删除集合
qmd remove collection-name
# 清理数据库(删除孤立向量)
qmd cleanup
# 启动监听模式
qmd watch
# 监听特定集合
qmd watch --collection obsidian-vault
功能:
qmd update# ✅ 好的查询
qmd search "Obsidian 同步 配置 多设备" # 关键词明确
qmd search "如何设置自动备份" # 自然语言
# ❌ 避免过于宽泛
qmd search "同步" # 太短,结果过多
qmd search "配置" # 缺少上下文
# 工作文档
qmd search "项目规范" -c work-notes
# 个人笔记
qmd search "读书笔记" -c personal
# 技术文档
qmd search "API 设计" -c tech-docs
优势:
在 Markdown 中使用标准 Frontmatter:
---
created: 2026-04-15
tags: [obsidian, 同步,配置]
category: 技术文档
---
# 文档标题
搜索时:
qmd search "tags:obsidian 同步"
qmd search "category:技术文档 配置"
# 精确匹配优先
qmd search "npm install 命令" --format files
# 语义理解优先
qmd query "怎么安装 Node.js 包" # 使用 LLM 增强
# 快速浏览(默认 CLI)
qmd search "同步"
# 获取文件列表(用于脚本)
qmd search "同步" --format files
# 导入到其他工具
qmd search "同步" --format json | jq '.[].file'
# 生成报告
qmd search "同步" --format md > 搜索结果.md
# 每周更新索引
qmd update
# 每月清理数据库
qmd cleanup
# 查看索引状态
qmd status
# 编辑配置文件 ~/.config/qmd/config.yaml
embedding:
model: "BAAI/bge-small-zh-v1.5" # 中文优化
dimension: 512
推荐模型:
all-MiniLM-L6-v2(快)、bge-large-en(准)bge-small-zh-v1.5、text2vec-base-chinese# config.yaml
chunking:
max_length: 512 # 最大 chunk 长度
overlap: 50 # 重叠字符数
by_paragraph: true # 按段落分割
# config.yaml
llm:
backend: "ollama"
model: "bge-reranker"
rerank_top_k: 10
| 场景 | 建议 |
|---|---|
| 文档库 < 1000 篇 | 默认配置即可 |
| 文档库 > 5000 篇 | 使用 --collection 过滤 |
| 需要精确匹配 | 优先使用 qmd search |
| 需要语义理解 | 使用 qmd query(带 Rerank) |
| 实时性要求高 | 启用 qmd watch 监听 |
| 批量处理 | 使用 --format json 导出 |
| 工具 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| QMD | 本地运行、支持中文、混合检索 | 需要索引时间 | Obsidian/Markdown 文档库 |
| Obsidian 内置搜索 | 无需配置、实时 | 仅关键词匹配 | 小型笔记库 |
| Elasticsearch | 分布式、高性能 | 配置复杂、资源占用高 | 企业级搜索 |
| Algolia | 云端、开箱即用 | 收费、数据外传 | SaaS 应用 |