RAG 简介
大型语言模型在庞大的数据集上进行训练,但它们并未基于您的数据进行训练。检索增强生成(RAG)通过将您的数据添加到大型语言模型已有访问权限的数据中来解决这个问题。您将在本文档中频繁看到关于RAG的提及。查询引擎、聊天引擎和智能体经常使用RAG来完成它们的任务。
在RAG中,您的数据会被加载并准备用于查询或"建立索引"。用户查询作用于索引,将您的数据筛选至最相关的上下文。该上下文和您的查询随后与提示词一同传递给LLM,由LLM生成响应。
即使你正在构建的是一个聊天机器人或智能体,你也会需要了解用于将数据导入应用的RAG技术。

RAG包含五个关键阶段,这些阶段将构成您构建的大多数大型应用程序的一部分。这些阶段包括:
-
加载: 这指的是将您的数据从其存储位置(无论是文本文件、PDF、其他网站、数据库还是API)导入到您的工作流程中。LlamaHub 提供了数百种连接器供您选择。
-
索引构建:这意味着创建一种允许查询数据的数据结构。对于大型语言模型而言,这几乎总是意味着创建
vector embeddings——即数据含义的数值化表示,以及众多其他元数据策略,以便轻松准确地找到上下文相关的数据。 -
存储: 一旦您的数据被索引,您几乎总是希望存储索引以及其他元数据,以避免重新索引。
-
查询: 对于任何给定的索引策略,您可以通过多种方式利用LLMs和LlamaIndex数据结构进行查询,包括子查询、多步查询和混合策略。
-
评估: 在任何流程中,关键的一步是检查相对于其他策略或当您进行更改时,其效果如何。评估提供了对查询响应的准确性、忠实度和速度的客观衡量。

您还会遇到一些术语,它们指的是这些阶段中每个阶段内的步骤。
节点与文档:一个Document是围绕任何数据源的容器——例如,一个PDF文件、API输出或从数据库检索的数据。一个Node是LlamaIndex中的数据原子单元,代表源Document的一个“块”。节点具有元数据,将其与所属文档及其他节点关联起来。
连接器:
数据连接器(通常称为 Reader)将来自不同数据源和数据格式的数据提取到 Documents 和 Nodes 中。
索引:
一旦您摄取了数据,LlamaIndex将帮助您将数据索引成易于检索的结构。这通常涉及生成vector embeddings,这些内容存储在名为vector store的专用数据库中。索引还可以存储关于您数据的各种元数据。
嵌入向量: 大型语言模型生成称为embeddings的数据数值表示。在对数据进行相关性过滤时,LlamaIndex会将查询转换为嵌入向量,而您的向量存储库将查找与查询嵌入向量数值相似的数据。
检索器: 检索器定义了在给定查询时如何高效地从索引中检索相关上下文。您的检索策略对于检索数据的相关性及其执行效率至关重要。
路由器:
路由器决定将使用哪个检索器从知识库中检索相关上下文。更具体地说,RouterRetriever 类负责选择一个或多个候选检索器来执行查询。它们使用选择器根据每个候选者的元数据和查询来选择最佳选项。
节点后处理器: 节点后处理器接收一组检索到的节点,并对它们应用转换、过滤或重新排序逻辑。
响应合成器: 响应合成器通过使用用户查询和一组给定的检索文本块,从大型语言模型生成响应。