RAG(Retrieval Augmented Generation,检索增强生成)是一种结合信息检索和文本生成能力的技术,主要用于处理需要广泛知识的任务,如问答系统,能够提供详细而准确的回答。
其基本流程包括以下几个步骤:
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):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案[heading2]文本加载器(Document Loaders)[content]文本加载器就是将用户提供的文本加载到内存中,便于进行后续的处理
其中,她是陈美嘉,这里是人设中的设定。吵架的经过是知识库中的内容。在我提问了之后,大模型去知识库里找到了相关内容,然后回复了我。这就是一个简单的正确回复的demo示例。然而,我们会发现,有时候她的回答会十分不准确。图二明显回答的牛头不对马嘴。图三是知识库截图,其中是有“一菲为美嘉找了一份助教工作”的内容的。但是回答这个问题时,AI并没有根据正确的知识库内容回答。这,就是基于知识库问答中的一个非常常见的错误场景。在其他情况下,甚至有可能出现报价错误、胡编乱造等等。这在严肃场景中,是不能接受的出错。现在应该能够直观的理解,为什么需要让大模型根据知识库回答的更加准确、更符合我们的要求。在AI领域中,优化AI更准确回答问题的过程,有一个更加专业的术语,叫做RAG。接下来,咱们进入正题,一步一步探索,如何优化回答。二、基础概念如果我们要优化幻觉问题和提高准确性,就务必要了解清楚从“问题输入”--“得到回复”,这个过程中,究竟发生了什么。然后针对每一个环节,逐个调优,以达到效果最佳化。因此,我们先深入其中了解问答全貌。[heading3]1、RAG介绍[content]RAG(Retrieval-Augmented Generation),即检索增强生成,是一种结合信息检索和文本生成能力的技术,它由两部分组成:一个“检索器”和一个“生成器”。检索器从外部知识中快速找到与问题相关的信息,生成器则利用这些信息来制作精确和连贯的答案。这种结合使得RAG非常适合处理需要广泛知识的任务,如问答系统,能够提供详细而准确的回答。
原创AI小智AI小智2023-12-11 08:10发表于湖北AI大模型能够处理广泛主题的文本生成,但模型知识只能基于它们训练时使用的公开数据。如果你想构建能够利用私有数据或实时数据进行推理的AI应用,你需要用特定的信息来增强模型的知识。将相关信息检索并插入到模型的输入中,即检索增强生成(Retrieval Augmented Generation,RAG)。在本文中,我们将介绍如何使用LangChain开发一个简单的RAG问答应用。我们将依次介绍典型的问答架构,讨论相关的LangChain组件,并展示如何跟踪和理解我们的应用。[heading3]RAG的基本概念[content]RAG是一种结合了检索和生成的技术,它可以让大模型在生成文本时利用额外的数据源,从而提高生成的质量和准确性。RAG的基本流程如下:首先,给定一个用户的输入,例如一个问题或一个话题,RAG会从一个数据源中检索出与之相关的文本片段,例如网页、文档或数据库记录。这些文本片段称为上下文(context)。然后,RAG会将用户的输入和检索到的上下文拼接成一个完整的输入,传递给一个大模型,例如GPT。这个输入通常会包含一些提示(prompt),指导模型如何生成期望的输出,例如一个答案或一个摘要。最后,RAG会从大模型的输出中提取或格式化所需的信息,返回给用户。