构建 LLM 应用程序时经常遇到的高级概念的快速指南
使用案例
数据支持的 LLM 应用程序有无数的用例,但大致可以分为四类:
结构化数据提取 Pydantic 提取器允许您指定要从数据中提取的精确数据结构,并使用 LLM 以类型安全的方式填充缺失的部分。这对于从 PDF、网站等非结构化来源中提取结构化数据非常有用,并且是自动化工作流程的关键。
查询引擎:查询引擎是一种端到端流程,可让您针对数据提出问题。它接收自然语言查询,并返回响应,以及检索并传递给 LLM 的参考上下文。
聊天引擎:聊天引擎是一种与您的数据进行对话的端到端流程(多次来回对话而不是单个问答)。
代理:代理是一个由 LLM 驱动的自动决策者,它通过一组工具与世界互动。代理可以采取任意数量的步骤来完成给定的任务,动态地决定最佳行动方案,而不是遵循预先确定的步骤。这使其具有额外的灵活性来处理更复杂的任务。
检索增强生成 (RAG)
提示
如果您还没有,请在阅读本文之前安装 LlamaIndex并完成入门教程。这将有助于您在经验中巩固这些步骤。
LLM
是在大量数据上进行训练的,但它们并不是在您的数据上进行训练的。检索增强生成 (RAG
) 通过将您的数据添加到 LLM
已经可以访问的数据中来解决此问题。您将在本文档中经常看到对 RAG
的引用。查询引擎、聊天引擎和代理经常使用 RAG
来完成其任务。
在 RAG
中,您的数据会被加载并准备用于查询或“索引”。用户查询将根据索引进行,索引会将您的数据过滤到最相关的上下文。然后,此上下文和您的查询将连同提示一起发送到 LLM
,LLM
会提供答复。
即使您正在构建的是聊天机器人或代理,您也需要了解将数据传入应用程序的 RAG
技术。
RAG 内的阶段
RAG
中有五个关键阶段,它们将成为您构建的大多数大型应用程序的一部分。它们是:
-
加载:这指的是将数据从其所在位置(无论是文本文件、PDF、其他网站、数据库还是 API)加载到您的工作流程中。LlamaHub提供了数百种连接器可供选择。
-
索引:这意味着创建一个允许查询数据的数据结构。对于 LLM,这几乎总是意味着创建vector embeddings数据含义的数值表示,以及许多其他元数据策略,以便于准确找到上下文相关的数据。
-
存储:一旦您的数据被索引,您几乎总是希望存储您的索引以及其他元数据,以避免重新索引它。
-
查询:对于任何给定的索引策略,您可以通过多种方式利用 LLM 和 LlamaIndex 数据结构进行查询,包括子查询、多步骤查询和混合策略。
-
评估:任何流程中的关键步骤是检查它相对于其他策略的有效性,或检查您进行更改时的效果。评估提供了客观的衡量标准,可以衡量您对查询的响应有多准确、多忠实、多快速。
RAG 中的重要概念
您还会遇到一些涉及每个阶段内的步骤的术语。
加载阶段
-
节点和文档:ADocument是任何数据源的容器 - 例如,PDF、API 输出或从数据库检索数据。ANode是 LlamaIndex 中数据的原子单位,代表源的“块”Document。节点具有将它们与所在文档和其他节点相关联的元数据。
-
连接器:数据连接器(通常称为Reader)将来自不同数据源和数据格式的数据导入Documents和Nodes。
索引阶段
-
索引:一旦您提取了数据,LlamaIndex 将帮助您将数据索引为易于检索的结构。这通常涉及生成存储vector embeddings在称为 的专用数据库中的数据vector store。索引还可以存储有关数据的各种元数据。
-
嵌入:LLM 生成称为 的数据的数值表示embeddings。在筛选数据以查找相关性时,LlamaIndex 会将查询转换为嵌入,并且您的向量存储将找到与查询的嵌入在数值上相似的数据。
查询阶段
-
检索器:检索器定义在给定查询时如何有效地从索引中检索相关上下文。检索策略是检索数据的相关性和检索效率的关键。
-
路由器:路由器确定使用哪个检索器从知识库中检索相关上下文。更具体地说,该类RouterRetriever 负责选择一个或多个候选检索器来执行查询。它们使用选择器根据每个候选的元数据和查询选择最佳选项。
-
节点后处理器:节点后处理器接收一组检索到的节点并对其应用转换、过滤或重新排序逻辑。
-
响应合成器:响应合成器使用用户查询和一组给定的检索到的文本块从 LLM 生成响应。