未分类

笔记系统 AI 化:一次检索重构的记录

我记笔记的历史很长,从纸质笔记本到各种笔记软件,再到现在的纯文本文件加版本管理。记了这么多年,最大的问题不是记不下来,而是找不回来。

这篇文章记录我给笔记系统做的一次 AI 化改造,核心是检索。

问题:记了一堆,找不到

笔记积累到几千条之后,靠目录和标签已经撑不住了。标签的问题在于它是先验的,你得在记的时候就知道这条笔记将来会怎么被找到,但未来怎么找,当时根本想不到。目录同理,一条笔记往往属于多个主题,放在哪都不对。

我当时的检索方式是全文搜索。能搜到,但体验很粗糙:搜关键词,返回一堆包含这个词的笔记,相关度排序基本靠猜。经常搜出来的东西不是我要的,或者关键词差一个字就搜不到。

思路转变:从匹配到语义

后来接触了向量检索,思路一下子打开了:如果我把每一条笔记变成一段向量,让”意思相近”的笔记在向量空间里距离相近,那么检索就不需要精确匹配关键词了。我可以用一句话描述我想找的东西,然后找出语义上最接近的笔记。

这个转变的本质是:从”字符匹配”升级到”语义匹配”。关键词匹配要求你知道文档里写了什么词,语义匹配只要求你知道你想找什么。

实现里的几个坑

方向对了,实现起来还是有不少坑:

坑一:切块粒度。 一条笔记太长,直接嵌入效果会很差,因为语义被稀释了。太短又丢失上下文。我最后用的策略是按语义单元切块,保持块之间的上下文关联,检索时返回相关块和它的上下文。

坑二:混合检索。 纯向量检索有个毛病:对专有名词和精确术语不敏感。比如你搜一个函数名,语义检索往往不如关键词搜索准。最后的方案是向量检索和关键词检索并行,结果融合排序。这个”混合”的思路,几乎适用于所有检索系统。

坑三:增量更新。 笔记是持续在写的,向量库需要跟着更新。全量重建太慢,增量更新又要处理删除和修改的情况。这块我花的时间比想象中多,但做完了之后,整个系统才真正”活”起来。

改造之后

现在我的笔记检索方式变成了:直接说我想找什么,系统返回相关内容,我顺着结果往下翻。偶尔还能发现一些”我当时记过但早忘了”的东西,这种找回的感觉,是改造前完全没有的。

这次改造让我对”个人知识库”这件事有了更具体的理解:存储只是地基,检索才是使用体验的全部。一个能把你十年前记的东西在需要时捞出来的系统,和一堆只进不出的文件,是两种完全不同的东西。

笔记系统 AI 化:一次检索重构的记录已关闭评论