由于最近在弄Research Studio项目(ResearchStudio项目实战体会),搜索了一些知识库和AI记忆系统方面的资料,但我对这个项目定位很低,力求简单克制,所以很多资料一旦觉得内容复杂或者实施难度大,我就暂时放一边作为知识储备。现在项目已经基本成形,倒是可以集中再看看,回味一下。
这也正是Research Studio项目第一件事情就是把收藏做好。很多内容,并不是只看一次,而是根据需求变化,时间安排,可能要反反复复看很多次。而且每次看关注的东西也不同,第一次可能就是看看标题摘要关键词,留下大概印象。后面可能就就是关注不同的具体的细节。也正因为要看很多次,就会存在本地知识库的需求,存在research(反复搜索)的需求。
基于这样的朴素的基本的需求,我在设计Research Studio的时候,就是想打造一个最简单的知识库,能够支持混合语义搜索就行。只有这个对我来说是迫切的需求,因为有些时候太忙了或者太懒了没及时回顾整理思考,等有空的时候印象都模糊掉了。
言归正传,什么是知识库呢?我之前经常使用obsidian,这个就喜欢说可以构建自己的本地知识库1 2 3,而且都是markdown文件。每一个valut就是一个文件夹,可以按照项目来,相关的文字记录都可以放里面。说实话这种方式通用性很好,内容的组织和查看编辑,都非常直观。但是在AI时代,因为处理的信息会变得很多,如果直接是全文精确搜索,速度会很慢,而且还不容易找到。所以还是得用向量数据库。而我此处想说的知识库,也是基于这种向量数据库的。
向量数据库又是啥呢?就是使用向量作为索引来进行检索的。这个向量索引,是使用一段具有完整语义的语料切片,输入给嵌入模型生成的高维向量。如果两个语料切片的含义比较接近,那么这个高维向量的距离也会比较接近,这样就可以实现所谓的语义检索。举个例子就是你搜索肠道菌群,检索结果会返回给你 包含 E.coli 的内容,这是全文精确字符串匹配不可能实现的效果。当然单纯的语义检索并不能解决所有问题。有些时候你搜索的东西就是很明确的关键词,可能BM25算法更好4,有些时候你搜索的东西比较模糊,可能语义检索比较好。这两类综合运用,就是所谓的混合检索。
但真实的检索过程,就像我们平常做特定主题的文献调研的时候,其实是有相当多的“智能”的,比如先搜一下关键词,快速找到一些比较新的,相关性高的,引用比较高的,比较权威的综述文章,根据标题选择是否收藏。这里就是运用各种过滤器缩小范围,目的不是为了求全求多,而是找到最有价值的一些文献,来帮助自己入门。然后就是针对候选文献,快速看看摘要介绍,看看是不是自己要的,避免因为标题信息误判,这个时候还可以根据摘要介绍的情况进一步筛选甚至进行重要性优先级排序。接下来就是按照优先级快速阅读前面几篇文章,目的是建立对这个方向的一个概括性认知,相当于是建构某种知识树,知道这个领域细分情况。再然后就是结合自己的情况,寻找最有价值的分支进行深入研读。
文献检索是研究生的基础技能,只是现在AI智能体兴起了之后,这个已经变成了可以让AI智能体自主决策的过程了。所以就有了RAG,所谓的检索增强生成5。但实际上,RAG还是有很多缺陷,这也就催生了很多改进的RAG 6 7,试图解决一些多跳查询,基于知识图谱的关系查询等等。我其实觉得这条路还是任重而道远,因为人类检索的过程不是一个简单的搜索,还包含复杂的思考,回味,灵光一现,偶然遇见。单纯基于各类规则(包括AI智能体)的搜索过滤,很可能把排序100的但其实对于人类来说有价值的东西给湮灭掉。因为人脑中存在着难以想象的context都会起到作用,其中就包含一些所谓审美品味,乃至独特的个人经历。所以我在做ResearchStudio的时候,点到为止,搭建了基础的向量数据库,能够提供多种检索方法即可。至于怎么去用,让AI智能体还是交由人类自己使用,这纯粹是一种用户自由。
AI记忆系统,是比知识库更加复杂的东西8 9 10 11。Agent 记忆是一套会持续写入、查询、更新、压缩和失效的数据管理系统,目的就是解决AI智能体落地应用的问题:如何解决失忆问题,并且还可以控制成本。跟RAG不同,AI记忆系统是随着时间可以动态更新的,但是从目前情况来看,AI记忆系统依然存在效果不稳定,成本高等等问题。而从我自己角度来说,我如果是自己使用,我目前倾向于不会使用AI记忆系统,因为有些重要的东西,适合长在自己脑子里,趁着我还有一些脑容量的时候。而不重要的东西,忘了也就忘了吧。