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