Skip to content

高级概念 (RAG)#

这是一个快速指南,介绍在构建LLM应用程序时经常会遇到的高级概念。

提示

如果你还没有,安装LlamaIndex 并完成入门教程后再阅读本文。这将有助于将这些步骤与你的经验联系起来。

检索增强生成 (RAG)#

LLM是在大量数据上进行训练的,但它们并不是在你的数据上进行训练的。检索增强生成(RAG)通过将你的数据添加到LLM已经可以访问的数据中来解决这个问题。在本文档中,你会经常看到有关RAG的引用。

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

即使你正在构建的是一个聊天机器人或代理,你也会想要了解RAG技术,以便将数据引入你的应用程序。

RAG 中的阶段#

在RAG中有五个关键阶段,这些阶段将成为你构建的任何更大应用程序的一部分。这些阶段包括:

  • 加载:这指的是从数据源(无论是文本文件、PDF、另一个网站、数据库或API)获取你的数据并将其放入你的流水线中。LlamaHub 提供了数百个可供选择的连接器。

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

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

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

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

每个步骤中的重要概念#

在每个阶段中,你还会遇到一些术语,这些术语指的是每个阶段内的步骤。

加载阶段#

节点和文档文档是围绕任何数据源的容器 - 例如PDF、API输出,或从数据库中检索的数据。节点是LlamaIndex中的数据的原子单位,代表源文档的“块”。节点具有将它们与所在文档和其他节点相关联的元数据。

连接器:数据连接器(通常称为读取器)将不同数据源和数据格式的数据摄入到文档节点中。

索引阶段#

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

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

查询阶段#

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

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

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

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

将所有内容整合在一起#

数据支持的LLM应用有无数的用例,但它们大致可以分为三类:

查询引擎: 查询引擎是一个端到端的流水线,允许您对数据提出问题。它接受自然语言查询,并返回一个响应,同时检索并传递给LLM的参考上下文。

聊天引擎: 聊天引擎是一个端到端的流水线,用于与您的数据进行对话(而不是单一的问答)。

代理: 代理是由LLM驱动的自动决策者,通过一组工具与世界进行交互。代理可以采取任意数量的步骤来完成给定任务,动态决定最佳行动方案,而不是遵循预先确定的步骤。这使其具有额外的灵活性,可以处理更复杂的任务。

提示