跳过内容

RAG 简介

提示

如果您还没有,请在阅读本文之前安装 LlamaIndex并完成入门教程。这将有助于您根据自己的经验理解这些步骤。

大语言模型(LLM)是在海量数据上训练的,但它们并未在的数据上训练。检索增强生成(RAG)通过将您的数据添加到 LLM 已有访问权限的数据中来解决此问题。您将在本文档中频繁看到对 RAG 的引用。查询引擎、聊天引擎和代理通常使用 RAG 来完成它们的任务。

在 RAG 中,您的数据被加载并准备好用于查询或“索引”。用户查询作用于索引,索引将您的数据过滤到最相关的上下文。然后,此上下文和您的查询会与提示一起发送给 LLM,LLM 会提供响应。

即使您构建的是聊天机器人或代理,您也会希望了解将数据导入应用程序的 RAG 技术。

RAG 中的阶段#

RAG 中有五个关键阶段,它们将是您构建的大多数大型应用程序的一部分。这些阶段是:

  • 加载:指将您的数据从其所在地——无论是文本文件、PDF、另一个网站、数据库还是 API——获取到您的工作流中。LlamaHub 提供了数百种连接器可供选择。

  • 索引:这意味着创建一个允许查询数据的数据结构。对于 LLM,这几乎总是意味着创建向量嵌入(即数据的含义的数值表示),以及许多其他元数据策略,以便轻松准确地查找与上下文相关的数据。

  • 存储:一旦您的数据被索引,您几乎总是希望存储您的索引以及其他元数据,以避免重复索引。

  • 查询:对于任何给定的索引策略,您都可以通过多种方式利用 LLM 和 LlamaIndex 数据结构进行查询,包括子查询、多步查询和混合策略。

  • 评估:任何流程中的关键一步是检查它相对于其他策略或在您进行更改时的有效性。评估提供了关于您的查询响应有多准确、忠实和快速的客观衡量标准。

RAG 中的重要概念#

还有一些您会遇到的术语,它们指的是每个阶段中的步骤。

加载阶段#

节点和文档Document 是围绕任何数据源的容器——例如,PDF、API 输出或从数据库检索的数据。Node 是 LlamaIndex 中的原子数据单元,代表源 Document 的一个“块”。节点具有元数据,将其与其所属的文档以及其他节点关联起来。

连接器:数据连接器(通常称为 Reader)从不同的数据源和数据格式中提取数据,并将其转换为 DocumentsNodes

索引阶段#

索引:一旦您摄取了数据,LlamaIndex 将帮助您将数据索引到易于检索的结构中。这通常涉及生成存储在称为向量存储的专门数据库中的向量嵌入。索引还可以存储关于您数据的各种元数据。

嵌入:LLM 生成数据的数值表示,称为嵌入。在过滤您的数据以获取相关性时,LlamaIndex 会将查询转换为嵌入,您的向量存储将查找与查询嵌入在数值上相似的数据。

查询阶段#

检索器:检索器定义了在给定查询时如何有效地从索引中检索相关上下文。您的检索策略对于检索到的数据的相关性及其执行效率至关重要。

路由器:路由器决定使用哪个检索器从知识库中检索相关上下文。更具体地说,RouterRetriever 类负责选择一个或多个候选检索器来执行查询。它们使用选择器根据每个候选者的元数据和查询来选择最佳选项。

节点后处理器:节点后处理器接收一组检索到的节点,并对其应用转换、过滤或重新排序逻辑。

响应合成器:响应合成器使用用户查询和一组给定的检索文本块,从 LLM 生成响应。