← 返回博客文章

硅基斥候S01

我用两年搭的知识库,最后发现根上就错了

硅基斥候S01

复盘个人知识库建设中的底层问题,讨论知识工程真正该服务什么。

我用两年搭的知识库,最后发现根上就错了
我用两年搭的知识库,最后发现根上就错了

之前参照Karpathy大神的思路,弄了个人的LLM Wiki知识库。

用起来真挺舒服,接入到Agent之后时不时在对话中就会给我惊喜,让我有一种"它竟然还记得这个\竟然能想到这个!"的感觉。

因为是全部本地化,隐私性也好。

几百篇以内,这个方案体验很好。双链接加上全文搜索,完全够用。

但是笔记量一上来,就开始出问题了。

笔记多了之后,LLM Wiki的局限性就来了

最难受的是召回变差了。

一是全文搜索只能匹配关键词,没有语义关联,换个说法就搜不到。

二是维护成本变高了。LLM 自动链的链接不一定都准,热门笔记被链了一堆,冷门笔记根本没人理。图谱看着很密,真正有用的路径全淹在噪声里。(我也不知道有没有用到图谱推理的能力)

LLM Wiki对中文上本身就不够友好

LLM Wiki的双链接这套体系,从设计之初就是面向英文的。

Obsidian 的搜索和链接推荐依赖空格分词。中文没有空格,所以它的搜索和自动补全对中文天然不友好。社区不得不自己写插件来补救(比如专门做简繁体交叉搜索的 obsidian-cjk-cross-search)。

相关的开源项目同样是英文优先,底层依赖 LLM 当然支持中文,但工具本身的分词、索引、链接推荐这些环节,并没有针对中文做任何优化。

它根本就不是为中文设计的。

用Milvus Lite代替obsidian

Milvus Lite 是向量数据库里的 SQLite,就是个本地能存向量的.db文件。不需要装个很占内存的向量服务,不需要 Docker,不需要配端口。笔记在本地,向量库也在本地,整个链路同样不依赖任何外部服务。

搭也不难。你不需要自己写代码,直接告诉 AI Agent 你要什么就行。现在的 Agent(Claude Code、codex、hermes什么的都行)已经能理解自然语言指令,比如下面这段:

帮我用 Milvus Lite 搭一个个人知识库的 RAG 链路。我的笔记是本地的 Markdown 文件,放在 ~/notes/ 目录下。要求:

  1. 读取所有 .md 文件,按段落切块,每个 chunk 500 字
  2. 用 embedding 模型把每个 chunk 变成向量(推荐 BAAI/bge-m3,这里要配API-URL、API-KEY)
  3. 存进 Milvus Lite 本地数据库(./my_knowledge.db)
  4. 实现一个查询函数:输入问题文本,返回最相似的 5 个 chunk

Agent 会帮你生成完整代码,切块、向量化、写入、检索一步到位。跑一遍,链路就通了。

(不过真想在Agent里用起来,还要配合skill,看大家对这个有没有感兴趣的,有的话我这两天整理一下把skill弄出来)

我用两年搭的知识库,最后发现根上就错了配图 1

Embedding 模型配置

embedding 这一步决定了召回质量的上限。模型选错,后面调什么都没用。

自己跑本地。 embedding 模型不吃资源,普通笔记本就能跑。推荐 BAAI/bge-m3,中英文都强,2.2GB。嫌大的话 bge-small-zh-v1.5 只要 93MB,中文为主完全够用。用 sentence-transformers 直接加载就行:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-m3")
embeddings = model.encode(["你的文本"])

好处:完全免费、数据不出本机、不限调用次数。

硅基流动,免费 API。 不想本地跑模型的话,硅基流动是目前最省事的免费方案。bge-m3 等 embedding 模型提供免费 API,注册就能用。更关键的是,它的 rerank 模型也是免费的。RAG 链路里加一层 rerank 对召回质量提升很大。

embedding + rerank 都免费,对个人知识库完全够用。如果你不在意隐私、想零配置上手,这个是最优选。

milvus-skill:别让你的 Agent 写出 bug 代码

让 Agent 写 pymilvus 代码有个很隐蔽的坑:它知道 pymilvus 怎么用,但经常写出「看起来对、跑起来错」的代码。

Zilliz 官方做的 milvus-skill,本质上是给 Agent 的一份精准技能文档。覆盖了 pymilvus 的全部操作:连接方式、schema 设计、collection 管理、向量 CRUD、混合搜索、全文搜索、索引管理。Agent 读了之后就知道什么时候该用什么 API,不会再犯低级错误。(同样还是把github链接给Agent让它自己装就完事了)

如果想要从个人用到团队用

Milvus Lite 能弄本地验证、小规模知识库、原型开发。索引只支持 FLAT(暴力搜索),不支持 partition、RBAC、多租户。

但个人知识库撑死几万条 chunk,FLAT 完全够用。

以后想升级的话,Milvus 有完整路径:

  • Standalone — 单节点 Docker 部署,小团队够用
  • Distributed — K8s 集群水平扩展,亿级向量
  • Zilliz Cloud — 全托管,零运维

关键是你本地用 Lite 写的代码和正式 Milvus 是同一套 pymilvus API。切到服务端只需要改一行连接地址,其他代码不动。

我用两年搭的知识库,最后发现根上就错了配图 2

知识库跑起来之后,Vibe Coding都变快了

这是我没预料到的收益。

做比较大的开发项目时,代码仓库几十个文件几万行代码,Agent 的上下文根本塞不下(严谨点的说法应该是没跑两轮对话就自动压缩上下文了)。

然后我把代码也向量化 — 按函数、类、模块切块,生成 embedding,存进 Milvus Lite。Agent 需要理解某个模块的时候,先向量检索,只把最相关的代码片段拉进上下文。

本质就是拿 RAG 压缩代码上下文,比盲目塞文件精准得多。

如果你想尝试

先用 Milvus Lite + 本地 embedding(或者硅基流动免费 API),把知识库的 RAG 链路跑起来。验证切块策略、embedding 效果、召回质量。

然后装 milvus-skill,让 Agent 操作 Milvus 不出错、随时查知识库。

后面要做成团队服务了,再迁到 Standalone 或 Distributed。代码基本不用改。

从双链接到向量检索,Markdown 笔记还是那些笔记,只是多了一层语义检索。笔记多了之后,也能精准找到想要的东西。而且这套方案从第一天起就是中英文平等的,不用再跟分词、输入法、补全算法死磕。


各位读者老爷对这个感兴趣的话请一定关注留言,后续会发布傻瓜式skill以及mvp的。