个人知识库搭建:从 Markdown 到 RAG 检索

我写技术博客十年,笔记更是记了无数——但最常发生的场景是:“我记得我记过这个,在哪来着?” 然后翻半小时文件夹。

这篇文章记录我搭建个人知识库的过程:从 Obsidian 本地 Markdown 库,到可语义检索、可 AI 问答的知识库。

一、需求与选型

需求

  1. 笔记要能"语义找":搜"怎么处理消息重复",能匹配到写于三年前的"幂等消费"笔记
  2. 要能 AI 问答:直接问"我的缓存一致性方案是什么",AI 翻笔记回答
  3. 本地优先:数据在自己手里,不上传私有云

选型(2025 年初的调研结论)

方案 类型 优点 缺点
Obsidian + 官方 Sync 笔记+同步 双链、插件生态 检索是关键词,无语义
自建知识库(Dify/WeKNora 类) 本地 RAG 语义检索 + 问答 要维护服务
本地向量库 + RAG 工具链 自建 完全可控 要一点工程
语雀/Notion AI 云 开箱即用 数据在别人那

我的结论:笔记本体用 Obsidian(本地 Markdown),检索层自己搭 RAG 流水线——数据永远本地,检索能力可编程扩展。

二、笔记规范:RAG 的前提

先泼冷水:笔记不规范化,什么 RAG 都救不了你。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 消息幂等方案
---
tags: [消息队列, 幂等, RabbitMQ]
date: 2023-01-15
status: 常用方案
---

## 核心结论
MQ at-least-once 投递下,消费端必须幂等。
方案:唯一键 + INSERT IGNORE / Redis SETNX / 业务状态机。

## 细节
...
## 关联
[[RabbitMQ 削峰]]

规范要点:

  1. 每条笔记一个主题(别写"杂记")
  2. tags 前置(frontmatter,检索过滤用)
  3. 结论放最前(AI 摘录友好)
  4. 双链关联([[xxx]],图谱 + 上下文)

三、检索层:本地 RAG

架构

O 文 切 向 向 问 b 档 分 量 量 答 s 解 ( 化 库 : i │ ▼ 析 │ ▼ 按 │ ▼ ( │ ▼ ( │ ▼ 问 d ( 标 本 S 题 i 定 f 题 地 Q a 时 r 结 L → n 索 o 构 e i 引 n ) m t 检 笔 t b e 索 记 m e - 库 a d v T ( t d e o M t i c p a e n K r r g / k ) → d + C o h 拼 w 正 r n 文 o P ) ) m r a o m 本 p 地 t 版 ) → L L M ( 本 地 或 A P I )

关键实现点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 检索核心(简化)
def ask(query):
    # 1. 混合检索:向量 + 关键词
    vec_hits = vector_search(query, top=10)
    kw_hits  = keyword_search(query, top=10)   # 标题/标签命中
    candidates = merge(vec_hits, kw_hits)

    # 2. 重排:相关度排序
    ranked = rerank(query, candidates, top=5)

    # 3. 拼 Prompt 问答(带来源)
    context = "\n\n".join(f"[{h.note}]: {h.content}" for h in ranked)
    return llm.chat(f"基于以下笔记回答:\n{context}\n问题:{query}")

我的踩坑(和《RAG 工程化》一致):

  • 切分按 Markdown 标题,不按固定 token
  • 必须带来源(哪篇笔记),AI 回答可追溯
  • 混合检索(向量 + 关键词),标题命中权重高
  • 增量索引:笔记变更才重建该篇向量

四、落地效果

场景 之前 之后
找"幂等方案"笔记 关键词搜不到,翻 10 分钟 语义检索秒出
问"我的缓存方案" 凭记忆回忆 AI 翻笔记回答 + 给来源
写博客查历史方案 凭印象写 从知识库引用,准确性高

五、避坑清单

✅ ✅ ✅ ✅ ❌ ❌ 笔 混 重 本 别 别 记 合 排 地 把 一 先 检 向 笔 上 规 索 + 量 记 来 范 : 库 全 就 化 向 来 别 量 买 ( 量 源 选 塞 云 单 管 标 太 进 端 主 语 注 重 知 题 义 : : L 识 / , A 笔 L 库 结 关 I 记 M ( 论 键 量 ( 数 前 词 回 级 贵 据 置 管 答 ( 且 出 / 标 可 万 乱 去 t 题 溯 级 ) 容 a 标 源 ) 易 g 签 S 回 s Q 来 ) L 难 , i ) 再 t 谈 e 检 - 索 v e c 足 够

总结

个人知识库的核心认知:

  1. 笔记是原料,规范是前提:RAG 的输入质量决定输出质量
  2. 本地优先:数据在自己手里,能力可扩展
  3. 混合检索 + 来源:语义找得到,回答靠得住
  4. 别过度设计:万级笔记 SQLite-vec + 本地 embedding 就够,别上分布式

知识库不是"记了多少",是"能找回多少"。 有了语义检索 + AI 问答,十年笔记第一次真正属于你。