为什么我要做一个自己的知识库
起因
我的笔记散在四个地方:Obsidian 里一部分、几个 AI 工具的会话记录里一部分、浏览器书签里一部分、
还有一部分在「等我有空再整理」的文件夹里。
结果是:收藏越多,越找不到。
真正让我下决心的是一个很具体的问题——我想找半年前写过的一段
「Cloudflare Workers 怎么复用连接」的笔记,翻了三个 App 都没找到。
那一刻我意识到,我缺的不是存储,是检索和结构。
我想要的到底是什么
我把需求写成了四条,后来整个系统都是围绕这四条长出来的:
- 一个地方:所有笔记最终汇到一个仓库,不管原来在哪;
- 搜得到:关键词能搜,语义也能搜;
- 看得见关系:这篇笔记和哪些文档有关,为什么有关;
- 判得准:我的知识库有没有违反自己定的规范(缺元数据、断链、过期、含密钥)。
第 4 条听起来最玄,其实是最后落地时最有用的一条——见下面。
为什么不用现成的
我试过几个方向:
- 云笔记 + 全平台同步:同步没问题,但检索只有关键词,没有关系;
- 现成的 RAG 工具:能问答,但索引是黑盒,我改不了它的分片策略;
- 笔记软件自带的图谱:好看,但只是”双链的可视化”,不是可计算的图。
共同的问题是:它们不让我碰索引。
而知识库的价值恰恰在索引层——分片怎么切、实体怎么抽、规则怎么判。
所以我决定自己写一个,只在索引层花功夫,其他都尽量简单。
最后的形态
- 存储:Markdown 仓库(GitHub 私有仓),跨设备靠 git 同步;
- 索引:GitHub Actions 里跑,产出切片、向量、三元组、判定结果;
- 查询:Cloudflare Worker + D1 + Vectorize,全部落在免费额度内;
- 入口:一个网页门户 + 一个桌面客户端 + 一套 MCP 工具。
关键取舍是:不绑卡。所以没有用 R2,索引产物直接写 Workers KV,
原文由 Worker 通过 GitHub API 直读。
第 4 条需求意外地有用
我原本以为”规范判定”是个锦上添花的功能,直到它第一次跑出结果:
warn 标题重复 knowledge/memory/dsh/profiles/desktop/cordis.yml |
756 这个数字很刺眼,但它是对的:那批文档是机器导入的会话记录,本来就没有入链。
规则的价值不是”发现问题”,而是”让问题可度量”。有了度量,才知道先修什么。
下一步
语义检索和关系图谱已经能用了,但我还想加两件:
- 中文分词后再进全文索引(现在
unicode61会把整句中文当成一个 token); - 增量索引(现在每次全量重建都吃一次嵌入额度)。
这两件事都不难,难的是别把系统搞复杂。这个博客大概会记录它们。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Yin 的小站!


