白话大模型——第三回 所谓的知识库,到底是在做什么?

你只要使用过大模型应用,或者Agent(智能体)类应用,相信一定听说过知识库。这类应用几乎是和大模型同时间出现,它还有另外一个名称RAG(Retrieval Augmented Generation,检索增强生成)

它的用法通常是先让你在应用中建立一个知识库,接着让你把自己的文件上传到知识库中,最后在和大模型聊天时选中某个知识库,这时大模型就像读过你上传的文件,和你一起讨论文件中的内容。

这篇文章,我将带你一起来解剖知识库,看看它的身体里面到底在做些什么?

为了能够理解我接下来所说的内容,推荐你先回看白话大模型的前两回,以做到无缝衔接。

白话大模型——第二回 使用大模型最重要的事,没有之一

白话大模型——第一回 大模型就是一个见多识广的普通人

知识库所做的事情其实很简单,就是从一堆大模型没有学习过的内容中,找出与你提问相关的内容告诉大模型,以便它能更好的回答你的问题。

听着这段话,你有没有觉得很耳熟。没错,因为第二回中的案例,让大模型帮你总结一篇文章,以及联网搜索都是在干这个事。
让大模型帮你总结一篇文章时,因为它没有看到过被总结的文章,所以你需要将文章内容一并加入提示词中告诉大模型。
在第一回中你已经知道,发给大模型的提示词(大模型的上下文)长度是有限制的。当你让它总结一篇比较短的文章时,可以直接将整篇文章丢给它看。如果你需要它回答几本书中的内容,就没办法把所有书都加入提示词中。
这时候应该怎么办?
想象一下,假如你并没有看过《三国演义》,这时候有人问你,关羽是被谁杀害的,你会怎么办?
你是不是会找来一本《三国演义》,或者也可以看我的白话三国(全120回),然后在里面一回合一回合的去找关羽被杀的段落。
类似的,你是不是可以像总结文章一样,将每一回的白话三国内容都加入提示词,让大模型从中找出关羽是被谁杀害的?

当你问到第七十七回时,大模型就会帮你找出关羽是被谁杀害的信息,回答你的问题。
(请注意,这里只是借用《三国演义》来举例,假装大模型没有看过三国。实际上大模型在训练过程中已经看过《三国演义》,可以直接回答关羽是被谁杀害的问题)
使用这种方法,确实可以让大模型回答他没学过的问题,但是这种方法实在太慢了,你需要反复不断的通过提示词将每一篇三国都拿给大模型看。
为了解决这个问题,就有了知识库。
它可以帮你管理许多大模型没有学过的知识,在你提问时快速的搜索出与你问题相关的内容,最后把这些内容加入提示词中,发送给大模型回答你的问题。
整个知识库的使用可以简单的分为四个步骤,接下来我们就一步一步来看看它具体怎么做。
第一步,获取大模型没有学过的知识
所谓的大模型没有学过的知识,就是你在使用知识库时上传的各种文档。
通常程序会将你上传的文档切分成一段一段的文字。
切分时,每段文字的大小以及如何切分,有着各种各样的方式。
例如,如果你把每段文字的字数设置的太大,有可能搜索时就会得到很多与你问题无关的信息。字数太小,又可能会丢失与你问题相关的信息。
除了直接对你的文档进行切分,你还可以利用大模型,根据你的文档内容,生成更多与它相关的段落内容。
第二步,存储切分好的段落内容
将内容切分好以后,需要将它们转换为适合第三步搜索的格式存储起来。目前常见的有两种搜索方式,通过关键词进行全文检索,以及通过嵌入向量进行语义搜索。
了对切分好的内容进行全文检索程序会先把切分好的文本转变为关键词,并记录每个关键词在文档(或文本段落)中的位置,再生成关键词→文档/位置的倒排记录,然后将该记录保存起来
想象在一个巨大的图书馆里,每本书的每一页上都贴着写有关键词的便利贴,然后把所有的便利贴按照关键词分类,集中放在一个大标签柜里。当你想找包含“能源”这个词的所有段落时,只需打开标签柜,查找“能源”标签,就能迅速看到它在哪些书、哪些页上出现。
为了对切分好的内容进行语义搜索,程序会将文档内容转变为嵌入向量,保存在向量数据库中。
至于嵌入向量是什么,你可以想象在一个非常巨大的房间中,站立着许许多多的人。每个人就代表了一段切分好的内容,而嵌入向量就是这个人在房间中站立的位置。
以上两步就是你在知识库系统中,上传自己的文档后,程序所做的事。接下来,你就可以选择知识库,对知识库中涉及的内容进行提问。
第三步,从所有的存储内容中搜索出与你问题相关的段落
程序在接收到你的提问后,首先要做的就是从你选择的知识库中,搜索出与你问题最相关的段落内容。
最简单的做法就是直接对你的问题进行全文搜索和语义搜索。
使用全文搜索时,程序会将你的问题转变为关键词,然后将问题关键词去与第二步保存的切分内容关键词做比较,看看哪些段落包含最多匹配的关键词,并按照匹配度(如词频、文档频率等指标)排序。
使用语义搜索时,程序同样会将你的问题转变为嵌入向量,然后计算问题嵌入向量与切分内容嵌入向量之间的距离,你可以想象成在比较房间中两个人之间的距离。距离越接近的内容,也就是与问题越相关。
最后将这两步搜索到的内容都放入下一步中使用。
使用上面这种最简单的做法,搜索到的内容不一定是和你问题最相关的内容,为了能够找到更多更相关的内容,你还可以额外做一些操作。
例如,你可以让模型将你的问题扩展成很多相关问题,然后对它们都进行搜索,以便得到更多相关信息。
另外,如果搜索到的内容太多,有可能其中很多是与问题无关的噪音,所以在把所有内容拿给大模型之前,还可以对它们做一次过滤。
目前最常用的过滤方法,是用一个专门训练过的排序模型来对所有内容打分,然后只使用得分排名靠前的那部分内容。
第四步,将搜索得到的内容加入提示词,让大模型回答你的问题
最后这步,就是文章最开始你所做的事情。第三步自动搜索到的内容,就是最开始你自己从文章中搜索得到的内容。将它们与问题一起组成提示词,交由大模型使用。
以上就是知识库所做的事,看完后你有没有觉得好像它并没有多神秘。
之所以会需要知识库,主要还是为了解决大模型无法回答它没有学过的内容这个问题。使用知识库后,之前需要你手动做的事情,交给了知识库来快速完成。
不过知识库也有它的问题,就是无法保证百分百的搜索到与你问题最相关的信息。

敲黑板划重点:

  1. 1. 知识库是用来帮助大模型,快速获取它没有学过的信息
  2. 2. 知识库操作分三步:
  3.     第一步,获取大模型没有学过的知识
  4.     二步,存储切分好的段落内容
  5.     第三步,从所有的存储内容中搜索出与你问题相关的段落
  6.     第四步,将搜索得到的内容加入提示词,让大模型回答你的问题


 

 

如果觉得内容不错,欢迎你点一下「在看」,或是将文章分享给其他有需要的人^^


相关好文推荐:

特朗普签署AI行动计划,AI全球赛跑加速,中国准备好了吗?

白话大模型——第二回 使用大模型最重要的事,没有之一

白话大模型——第一回 大模型就是一个见多识广的普通人

如何为你的群聊增加一个AI助手?

Scratch AI扩展工具使用说明(更新)

白话三国(全120回)

白话西游(全100回)

0条留言

留言