RAG(检索增强生成,Retrieval Augmented Generation)是一种利用大模型能力搭建知识库的技术应用。当需要依靠不包含在大模型训练集中的数据时,可通过该技术实现。
RAG 的应用可抽象为以下 5 个过程:
离线数据处理的目的是构建知识库这本“活字典”,知识会按照某种格式及排列方式存储在其中等待使用。在线检索则是利用知识库和大模型进行查询的过程。以构建智能问答客服为例,可了解 RAG 所有流程中的 What 与 Why。
相关资源:
因为利用大模型的能力搭建知识库本身就是一个RAG技术的应用。所以在进行本地知识库的搭建实操之前,我们需要先对RAG有一个大概的了解。以下内容会有些干,我会尽量用通俗易懂的描述进行讲解。我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案[heading2]文本加载器(Document Loaders)[content]文本加载器就是将用户提供的文本加载到内存中,便于进行后续的处理
我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案[heading4]使用知识库[content]海外官方文档:https://www.coze.com/docs/zh_cn/knowledge.html国内官方文档:https://www.coze.cn/docs/guides/use_knowledge
旁白:一路千辛万苦,终于要真正了解RAG的全貌了,好激动前面的开胃菜已经完毕,这里我们进入正餐,先上一张图注:这张图引用自:https://mp.weixin.qq.com/s/37tKVQbxenVVBAeMZ334aQ公众号:AI花果山一位RAG大佬,正在编写一系列教程《RAG高效应用指南》这张图将会是我们本章的知识地图,看到这么多的概念,不要慌,我们先整体理解下RAG。自顶向下,RAG的流程分为离线数据处理和在线检索两个过程。我们前面讲到,知识库是RAG的“活字典”,可以让AI随时进行查阅。而离线数据处理的目的就是为了构建出这本“活字典”。经过离线数据后,知识则会按照某种格式以及排列方式存储在知识库中,等待被使用。而在线检索则是我们使用利用知识库+大模型进行查询的过程。在学习一门新知识的时候,是什么与为什么同等重要是什么让你知其然为什么让你知其所以然接下来我们就以RAG最经典的应用场景《构建智能问答客服》来了解RAG所有流程中的What与Why