用 Obsidian CLI + LLM 构建本地 RAG:让你的笔记真正「活」起来
你的知识库,真的安全吗?
越来越多的人开始把工作笔记、会议记录、技术调研统统塞进 Obsidian。几个月下来,vault 里已经有几百上千个文件,信息密度极高——但也越来越难检索。
于是你开始考虑接入 AI:把笔记丢给某个云端 RAG 服务,让它帮你向量化、建索引、回答问题。听起来很美。但问题也随之而来:
- 隐私:你的笔记包含未公开的项目计划、个人思考、甚至商业机密——你真的愿意上传到陌生的服务器?
- Setup 成本:向量数据库、embedding 服务、API 费用、定期同步……光是把整套系统搭起来就要折腾半天。
- 新鲜度:你刚写的笔记,RAG 系统要多久才能感知到?
有没有一种方式,既能让 LLM 理解你的知识库,又不需要任何云端服务、不需要向量数据库、数据完全不出本机?
答案是:Obsidian CLI + LLM = 本地 RAG。
架构一览:极简但强大
这套方案的核心思路简单到令人惊讶:
你的问题
↓
Obsidian CLI(obsidian search)
↓
匹配的笔记文件路径列表
↓
LLM 读取文件内容并分析
↓
你想要的答案
整个流程只需要两个组件:
| 组件 | 职责 | 特点 |
|---|---|---|
| Obsidian CLI | 全文检索,返回匹配文件路径 | 利用 Obsidian 原生搜索,实时、精准 |
| LLM | 读取文件内容,理解语义,生成回答 | 负责「理解」,不负责「找」 |
没有向量数据库,没有 embedding 服务,没有云端 API,没有定期同步任务。你的笔记就是数据源,Obsidian 的搜索引擎就是检索器,LLM 就是分析引擎。
这不是妥协方案——对于结构良好的个人知识库,它的效果往往比复杂的云端 RAG 更稳定、更可解释。
两步 RAG 模式:Retrieve → Analyze
理解这套系统的关键,是理解它的两步工作模式。
第一步:Retrieve(检索)
使用 obsidian search 命令在 vault 里搜索关键词,获取匹配文件的路径列表。
# 搜索包含 "性能优化" 的笔记
obsidian search "性能优化"
# 限制返回数量,避免结果太多
obsidian search "API设计" --limit 10
# 搜索特定标签
obsidian search "#架构决策"
这一步的产出是文件路径列表,而不是内容本身。LLM 此时并不知道这些文件里写了什么。
第二步:Analyze(分析)
LLM 拿到文件路径后,逐个读取文件内容,然后在完整上下文中回答你的问题。
[用户] 我们的 API 网关有哪些已知的性能瓶颈?
[LLM 内部流程]
1. obsidian search "API网关 性能" → [gateway-perf-notes.md, incident-2025-11.md, arch-decisions.md]
2. 读取 gateway-perf-notes.md
3. 读取 incident-2025-11.md
4. 读取 arch-decisions.md
5. 综合三份文件,生成有据可查的回答
两步分离的设计有个重要好处:检索和理解各司其职。Obsidian 擅长快速全文检索,LLM 擅长理解和综合。不要用 LLM 去做 grep 能做的事,也不要用 grep 去做 LLM 才能做好的事。
实用场景与命令示例
下面列举几个典型使用场景,每个场景都有对应的检索策略。
场景一:主题探索
「我们讨论过哪些关于微服务拆分的内容?」
obsidian search "微服务 拆分"
obsidian search "service decomposition"
obsidian search "#微服务"
策略:用主题词 + 同义词多轮检索,合并结果去重,再交给 LLM 综合。
场景二:范围搜索
「2025 年第四季度的所有会议记录里,有哪些未解决的问题?」
obsidian search "会议记录 2025-Q4"
obsidian search "未解决 action item 2025"
策略:用时间范围 + 关键词缩小检索范围,避免 LLM 处理过多无关文件。
场景三:上下文搜索
「当时我们为什么选择 PostgreSQL 而不是 MongoDB?」
obsidian search "数据库选型"
obsidian search "PostgreSQL MongoDB 对比"
obsidian search "#架构决策"
策略:搜索决策类笔记,特别是带有 #架构决策 或 #ADR 标签的文件。
场景四:跨笔记综合
「把所有关于用户认证模块的设计文档整理成一份摘要」
obsidian search "用户认证" --limit 20
obsidian search "auth module"
obsidian search "#authentication"
策略:广撒网检索,让 LLM 负责去重和综合,输出结构化摘要。
场景五:提取行动项
「最近一个月的笔记里,有哪些我说要做但还没做的事?」
obsidian search "TODO"
obsidian search "待办 行动项"
obsidian search "[ ] "
策略:搜索 Markdown checkbox 语法或特定标记词,批量提取待办事项。
场景六:性能调查
「我们有哪些关于系统超时的事故记录?」
obsidian search "timeout 超时 incident"
obsidian search "SLA 违规"
obsidian search "#postmortem"
策略:结合中英文关键词,搜索事故复盘类笔记。
以上场景汇总:
| 场景 | 检索关键词类型 | LLM 任务 |
|---|---|---|
| 主题探索 | 主题词 + 标签 | 综合归纳 |
| 范围搜索 | 时间 + 关键词 | 筛选过滤 |
| 上下文搜索 | 决策词 + ADR 标签 | 还原决策背景 |
| 跨笔记综合 | 广泛关键词 | 结构化输出 |
| 提取行动项 | TODO/checkbox | 列举归类 |
| 性能调查 | 事故词 + postmortem | 问题溯源 |
降级策略:当 Obsidian 不在线时怎么办?
本地 RAG 有一个现实问题:Obsidian 桌面应用必须保持运行,CLI 才能正常工作。如果你在服务器上跑自动化任务,或者 Obsidian 没有启动,检索就会失败。
针对这种情况,建议建立三级降级策略:
第一级:Obsidian CLI(首选)
obsidian search "关键词"
Obsidian 在线时优先使用,检索速度快,支持 Obsidian 原生搜索语法(正则、标签、路径过滤等)。
第二级:grep_search(降级)
当 Obsidian 无法连接时,直接用 grep 在 vault 目录全文检索:
grep -r "关键词" ~/vault/ --include="*.md" -l
速度略慢,但效果相近。适合简单关键词搜索。
第三级:换词重试
无论用哪种检索工具,如果第一次搜索结果为空,不要直接放弃——换个同义词、换中英文、拆分关键词再试一次:
"性能问题" → "慢查询" / "latency" / "bottleneck"
"用户认证" → "登录" / "auth" / "JWT"
结果太多时:加 limit
obsidian search "项目" --limit 15
返回几百个结果对 LLM 来说是负担,不是帮助。一般 10–20 个文件已经足够让 LLM 提炼出有价值的答案。
最佳实践:让笔记更「可检索」
本地 RAG 的效果,70% 取决于你的笔记质量。以下是几条让 vault 更适合被 AI 检索的实践建议:
1. 描述性文件名
❌ note-20251105.md
✅ api-gateway-timeout-incident-2025-11.md
文件名是检索的第一道关卡。好的文件名让你和 AI 都能在搜索结果里一眼判断相关性。
2. 结构化笔记内容
每篇笔记最好有清晰的结构:背景、决策/结论、行动项、参考资料。结构化内容比流水账更容易被 LLM 提炼。
## 背景
...
## 决策
...
## 行动项
- [ ] ...
## 参考
- [[相关笔记]]
3. 善用标签系统
标签是范围搜索的利器。建议建立一套一致的标签体系:
#架构决策 #postmortem #会议记录 #技术调研 #TODO
搜索 #postmortem 比搜索「事故复盘」更精准,因为标签是你主动标注的,不依赖关键词匹配。
4. 原子笔记原则
一篇笔记只记录一件事。长达几千字、混杂多个主题的笔记,检索命中后 LLM 也难以精准提取信息。把大笔记拆成多个原子笔记,用 [[双链]] 连接。
5. 维护单一事实源
同一件事只在一个地方记录,其他地方引用。避免同一信息散落在多个文件里,导致 LLM 拿到相互矛盾的版本。
6. 记录决策理由
不只记录「我们决定用 X」,还要记录「为什么不选 Y 和 Z」。未来检索时,这些上下文往往比结论本身更有价值。
本地 RAG vs 云端 RAG:该怎么选?
| 维度 | 本地 RAG(Obsidian CLI + LLM) | 云端 RAG(向量数据库 + Embedding) |
|---|---|---|
| 隐私 | ✅ 100% 本地,数据不外传 | ❌ 数据上传至第三方服务器 |
| Setup 复杂度 | ✅ 极简,几乎零配置 | ❌ 需要向量数据库、embedding 服务、同步管道 |
| 新鲜度 | ✅ 实时,笔记保存即可检索 | ⚠️ 依赖索引更新频率,存在延迟 |
| 语义搜索 | ❌ 关键词匹配,无法理解语义 | ✅ 向量相似度,支持语义检索 |
| 运维成本 | ✅ 无需维护 | ❌ 需要持续运维和费用 |
| 扩展性 | ⚠️ 适合中小型 vault(数百至数千文件) | ✅ 适合大规模语料库 |
| 可解释性 | ✅ 检索过程透明,能看到用了哪些文件 | ⚠️ 向量检索结果有时难以解释 |
结论:对于个人知识库(几十到几百个文件)、隐私敏感场景、或者不想花时间维护基础设施的人来说,本地 RAG 是更务实的选择。云端 RAG 的语义搜索优势在大规模、多语言场景下更为显著,但对个人 vault 来说往往是过度工程。
一个真实案例:91 个文件、14 个文件夹的工程项目 vault(PUHK-ITMP),用本地 RAG 方案完全够用——大多数查询在几秒内就能给出有据可查的答案,而且你知道答案来自哪个文件的哪个部分。
总结与行动建议
本地 RAG 不是「穷人版 RAG」,而是针对个人知识库场景做了正确权衡的方案:用关键词检索换取零配置和完全隐私,用 LLM 的语义理解能力补足关键词检索的不足。
两者结合,形成一个「检索快、理解深、隐私好、零运维」的知识查询系统。
如果你想现在就开始:
- 安装 Obsidian CLI,确认能连接你的 vault
- 整理文件名:把模糊的笔记名改成描述性的
- 补充标签:给现有笔记加上
#架构决策、#postmortem、#TODO等标签 - 测试检索:用几个关键词搜一搜,看看结果质量
- 配合 LLM 工具使用:让 LLM agent 先 search,再 read,最后 analyze
笔记是写给未来的自己看的。现在稍微多花一点心思让它更可检索,未来的你(和你的 AI 助手)会感谢你的。
本地知识库 + 本地分析 = 真正属于你的第二大脑。不上云,不妥协。