引出RAG
RAG中文名叫检索生成技术,它是怎样一个技术呢?
市面上有很多通用大模型
它们神通广大、无所不知,有着惊人的能力。但是事情总有我们不如意的时候,这些通用大模型可能会在某些垂直领域回答还是不尽人意,无法满足我们的业务需求。怎么办?
我们可以微调大模型,去更新它的网络参数。但面对闭源模型,你没办法了。还能怎么办?RAG技术就可以解决这样的困境,在不改变大模型本身能力的同时,能提升它回答的表现!这是一种神奇的方法,一种外挂知识库的方法。
RAG到底是怎么做到的?简单点说就是从直接prompt到给大模型做阅读理解,将用户的提问去知识库里匹配相关的信息,然后组合在一起再prompt给大模型。实践验证这种方法很好,大大提升了相关领域的回答表现。
我们来看RAG技术加持下,大模型问答的运行机制是怎样的
RAG技术加持的大模型的运行机制
以上就是大模型问答实质的运行机制。接下来,我以开发者的视角来讲解这张图
前面我们已经知道RAG实际是怎么提升回答表现的。作为开发者呢,我们首先得去搭建知识库,整个开发的过程我们都是再Langchain框架下的,在该框架下让我们的开发更容易。
我们收集了大量的文件材料,它们有word、有excel、pdf、markdown等等等等。我们首先做的就是对这些文件材料去除格式,这里我们就要用到去除文本结构器,就是个工具,不必焦虑在哪里找它们,Langchain为你们提供了。去除了文件的格式我们得到了纯字符串的文本信息。
这一个字符串可能10万个字符,我们要对它切割,用Langchain提供的文本分割器来实现。我们得到了文本片段集合,然后对这一个个片段进行编码成一个个向量,这种形式的信息方便进行相关度比较。于是我们构建起了向量数据库,也可以叫做知识库,里面都是知识嘛。
这都是开发阶段做的工作。在实际用户提出一个提问/prompt后是怎样个运行机制呢?
首先用户的提问也要进行编码成向量,为了可以与向量数据库的信息检索匹配嘛。然后从向量数据库里检索出了相关的向量信息。直接将向量输入到大模型?我们做不了。那是要解码吗?也不是,实际上无论是prompt向量还是知识库里的向量,在编码的时候都是建立了与自然语言文本一一对应的关系的。我们直接凭借着这个对应关系,找到对应的自然语言文本拼接在一起就行了。然后就是喂给大模型,图中展示的是Internlm大模型。最后我们就得到了回答了。以上就是理论上RAG下的大模型问答的运行机制。
————————
以上就是我本篇想讲的所有内容了,如果这篇文章对你有价值的话,还请点个赞,你的支持对我非常重要!
我是阿航,一位胆大包天、梦想成为大牛的学生~
我们下篇文章接着聊