RAG(检索增强生成)是一种将信息检索组件和文本生成模型相结合的技术,主要用于完成更复杂和知识密集型的任务。以下是关于 RAG 的详细介绍:
因为利用大模型的能力搭建知识库本身就是一个RAG技术的应用。所以在进行本地知识库的搭建实操之前,我们需要先对RAG有一个大概的了解。以下内容会有些干,我会尽量用通俗易懂的描述进行讲解。我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片
通用语言模型通过微调就可以完成几类常见任务,比如分析情绪和识别命名实体。这些任务不需要额外的背景知识就可以完成。要完成更复杂和知识密集型的任务,可以基于语言模型构建一个系统,访问外部知识源来做到。这样的实现与事实更加一性,生成的答案更可靠,还有助于缓解“幻觉”问题。Meta AI的研究人员引入了一种叫做[检索增强生成(Retrieval Augmented Generation,RAG)(opens in a new tab)](https://ai.facebook.com/blog/retrieval-augmented-generation-streamlining-the-creation-of-intelligent-natural-language-processing-models/)的方法来完成这类知识密集型的任务。RAG把一个信息检索组件和文本生成模型结合在一起。RAG可以微调,其内部知识的修改方式很高效,不需要对整个模型进行重新训练。RAG会接受输入并检索出一组相关/支撑的文档,并给出文档的来源(例如维基百科)。这些文档作为上下文和输入的原始提示词组合,送给文本生成器得到最终的输出。这样RAG更加适应事实会随时间变化的情况。这非常有用,因为LLM的参数化知识是静态的。RAG让语言模型不用重新训练就能够获取最新的信息,基于检索生成产生可靠的输出。
RAG是一种结合了检索和生成的技术,它可以让大模型在生成文本时利用额外的数据源,从而提高生成的质量和准确性。RAG的基本流程如下:首先,给定一个用户的输入,例如一个问题或一个话题,RAG会从一个数据源中检索出与之相关的文本片段,例如网页、文档或数据库记录。这些文本片段称为上下文(context)。然后,RAG会将用户的输入和检索到的上下文拼接成一个完整的输入,传递给一个大模型,例如GPT。这个输入通常会包含一些提示(prompt),指导模型如何生成期望的输出,例如一个答案或一个摘要。最后,RAG会从大模型的输出中提取或格式化所需的信息,返回给用户。