检索增强生成(RAG)将外部信息检索集成到大型语言模型(LLM)生成响应的过程中。它在LLM预训练知识库之外的数据库中搜索信息,显著提高了生成响应的准确性和相关性。
自从ChatGPT问世以来,语言模型在互联网上爆发式增长,这是理所当然的。它们可以写文章、编写完整的程序,甚至制作表情包(尽管我们仍在决定这是否是件好事)。
但尽管这些聊天机器人变得如此出色,它们在需要外部知识和事实信息的任务中仍然存在局限性。是的,它可以极其详细地描述蜜蜂的摇摆舞。但如果它们能够从我们提供的任何数据中生成洞察力,而不仅仅是原始训练数据,那么它们的价值将大大增加。由于从头开始重新训练这些大型语言模型需要数百万美元和数月时间,我们需要更好的方法让现有的LLM访问我们的自定义数据。
虽然你可以更有创意地使用你的提示,但这只是一个短期解决方案。LLM在响应中只能考虑有限的文本量,这被称为上下文窗口。有些模型,如GPT-3,可以查看大约12页文本(即4,096个上下文标记)。这对于大多数知识库来说还不够好。

上图展示了一个基本的RAG系统如何工作。在将问题转发给LLM之前,我们有一个层,它在我们的知识库中搜索“相关知识”以回答用户查询。具体来说,在这个案例中,是上个月的消费数据。我们的LLM现在可以生成关于我们预算的相关且无幻觉的响应。
随着数据增长,您将需要高效的方法来识别对LLM有限内存最相关的信息。这时您就需要一种适当的方式来存储和检索您查询所需的特定数据,而无需LLM记住它。
向量数据库将信息存储为向量嵌入。这种格式支持高效的相似性搜索,以检索与您的查询相关的数据。例如,Qdrant专门设计用于在处理数十亿向量的场景中也能快速执行。
本文将重点介绍RAG系统和架构。如果您对了解更多关于向量搜索感兴趣,我们推荐以下文章:什么是向量数据库?和什么是向量嵌入?。
RAG 架构
RAG架构的核心包括检索器和生成器。让我们从理解每个组件的功能开始。
检索器
当你向检索器提问时,它会使用相似性搜索来扫描一个庞大的向量嵌入知识库。然后,它会提取最相关的向量来帮助回答该查询。它可以使用几种不同的技术来判断什么是相关的
RAG检索器中索引的工作原理
索引过程以一种易于搜索的方式将数据组织到您的向量数据库中。这使得RAG能够在响应查询时访问相关信息。

如上图所示,过程如下
- 从一个加载器开始,它收集包含您的数据的文档。这些文档可以是文章、书籍、网页或社交媒体帖子等任何内容。
- 接下来,一个分割器将文档分成更小的块,通常是句子或段落。
- 这是因为RAG模型处理较小的文本片段时效果更好。在图中,这些是文档片段。
- 然后,每个文本块都会被送入一个嵌入机器。该机器使用复杂的算法将文本转换为向量嵌入。
所有生成的向量嵌入都存储在索引信息的知识库中。这支持在需要时高效检索相似的信息片段。
查询向量化
一旦您将知识库向量化,您就可以对用户查询执行相同的操作。当模型看到新查询时,它会使用相同的预处理和嵌入技术。这确保了查询向量与索引中的文档向量兼容。

相关文档检索
当系统需要找到最相关的文档或段落来回答查询时,它会利用向量相似性技术。向量相似性是机器学习和自然语言处理(NLP)中的一个基本概念,它量化了向量之间的相似度,这些向量是数据点的数学表示。
系统可以根据用于表示数据的向量类型,采用不同的向量相似性策略
稀疏向量表示
稀疏向量的特点是维度高,且大部分元素为零。
经典方法是关键词搜索,它扫描文档以查找查询中的确切词语或短语。搜索通过计算词语出现次数并对常见词语进行反向加权来创建文档的稀疏向量表示。带有罕见词语的查询会获得优先权。

TF-IDF(词频-逆文档频率)和BM25是两种经典的关联算法。它们简单且计算高效。然而,它们在处理同义词方面可能存在困难,并且并非总能捕捉到语义相似性。
如果您有兴趣深入了解,请参阅我们关于稀疏向量的文章。
密集向量嵌入
这种方法使用像BERT这样的大型语言模型将查询和段落编码成密集向量嵌入。这些模型是紧凑的数值表示,能够捕捉语义含义。像Qdrant这样的向量数据库存储这些嵌入,允许基于语义相似性而不是仅仅依靠关键词进行检索,并使用余弦相似性等距离度量。
这使得检索器能够基于语义理解而非仅仅关键词进行匹配。因此,如果我询问“导致体味的化合物”,它能够检索到关于“产生体味的分子”的相关信息,即使没有使用完全相同的词语。我们在什么是向量嵌入一文中对此有更详细的解释。
混合搜索
然而,无论是关键词搜索还是向量搜索,都并非总是完美的。关键词搜索可能会遗漏以不同方式表达的相关信息,而向量搜索有时可能在特异性方面遇到困难或忽略重要的统计词模式。混合方法旨在结合不同技术的优势。

一些常见的混合方法包括
- 使用关键词搜索获取初始候选文档集。接下来,使用语义向量表示对文档进行重新排序/重新评分。
- 从语义向量开始,找到通常与主题相关的文档。接下来,根据关键词匹配或其他元数据过滤/重新排序文档。
- 在组合评分模型中同时考虑语义向量的接近度和统计关键词模式/权重。
- 分多个阶段采用不同技术。一个例子:从初始关键词检索开始,接着进行语义重新排序,然后使用更复杂的模型进行最终重新排序。
当您以互补的方式结合不同搜索方法的强大功能时,您可以提供更高质量、更全面的结果。如果您想了解更多信息,请查看我们关于混合搜索的文章。
生成器
检索到最相关的段落后,现在是生成器通过综合信息并以自然语言表达来生成最终答案的工作。
LLM通常是一个像GPT、BART或T5这样的模型,它在海量数据集上进行训练,以理解和生成类人文本。它现在不仅将查询(或问题)作为输入,还将检索器识别为可能包含答案的相关文档或段落作为输入,以生成其响应。

检索器和生成器并非独立运作。下图展示了检索器的输出如何供给生成器,从而产生最终的生成响应。

RAG正在哪些领域使用?
由于RAG模型能够提供更具知识性和上下文的响应,我们发现它们如今被应用于许多领域,尤其是那些需要事实准确性和知识深度的领域。
实际应用
问答系统:这可能是RAG模型最突出的用例。它们为先进的问答系统提供支持,这些系统能够从大型知识库中检索相关信息,然后生成流畅的答案。
语言生成:RAG使得能够从多个来源进行更具事实性和语境化的文本生成,用于语境化文本摘要
数据到文本生成:通过检索相关的结构化数据,RAG模型可以从数据库生成产品/商业智能报告,或描述数据可视化图表中的洞察。
多媒体理解:RAG不仅限于文本——它可以检索图像、视频和音频等多模态信息,以增强理解。通过检索相关的文本上下文来回答关于图像/视频的问题。
使用Langchain、Groq和OpenAI创建您的第一个RAG聊天机器人
您准备好从零开始创建自己的RAG聊天机器人了吗?我们有一个视频将从头开始解释一切。Daniel Romero将指导您
- 设置你的聊天机器人
- 预处理和组织聊天机器人使用的数据
- 应用向量相似性搜索算法
- 提高效率和响应质量
在构建您的RAG聊天机器人之后,您将能够评估其性能,并将其与仅由大型语言模型(LLM)驱动的聊天机器人进行比较。
接下来是什么?
有一个RAG项目想实现吗?加入我们的Discord社区,我们总是在那里分享技巧并回答关于向量搜索和检索的问题。
了解如何正确评估您的RAG响应:评估检索增强生成——一个评估框架。
