LlaMaindex 是一个开源数据编排框架,可用于构建大型语言模型 (LLM) 应用程序。LlamaIndex 提供 Python 和 TypeScript 两种版本,它会利用各种工具和功能的组合,而这些工具和功能可简化生成式 AI 用例(通过检索增强 (RAG) 管道)的上下文增强流程。
LlamaIndex 允许用户通过数据整合和上下文增强来整理他们的私人或自定义数据。
上下文增强是指将数据提供给 LLM 上下文窗口,以便在本质上使用私有或外部数据来增强 LLM。
广泛使用的开源 LLM 是根据大量公共数据预先训练的。这些大规模 LLM 有助于解决众多现实问题。然而,它们需要大量的时间和资源以针对特定用例进行训练。此外,模型的内部数据仅在预训练期间处于最新状态。根据具体模型,模型需借助上下文增强才能反映对当前事件的实时了解。
眼下,基础模型已变得愈发流行,因为它们属于灵活且可重复使用的 AI 模型,且几乎可应用于任意领域或任务。IBM Granite 系列一类的基础模型是在整理后的数据基础上进行训练的;但是,无论模型是在大型数据集基础上进行训练还是属于预训练的基础模型,它们都可能需在特定于领域的数据的外部来源基础上进行训练。此过程会由一个系统框架来提供支持,而该系统框架可将 LLM 连接到私有数据,以便根据应用程序的用例或总体目标对其进行定制。应用程序堆栈中便于将 LLM 连接到自定义数据源的部分是 LlamaIndex 一类的数据框架。
数据来自多种来源且具有多种格式;框架则负责采集、转换和组织这些数据,以供 LLM 使用。数据通常是孤立且非结构化的。为了获取和组织这些数据,LlamaIndex 等数据框架必须通过通常被称为“采集管道”的流程来运行这些数据。
采集完这些数据并将其转换为 LLM 可使用的格式后,下一步便是将此信息转换为用于构建索引的数据结构。相关的常见过程是将非结构化数据转换为矢量嵌入。此流程在自然语言处理 (NLP) 领域被称为“创建嵌入”,但在数据术语中则被称为“创建索引”。1创建索引是必要的步骤,因为它有助于 LLM 按矢量索引查询和检索采集的数据。可根据所选查询策略为这些数据创建索引。
数据整合可通过将私人数据整合到 LLM 的上下文窗口或“知识库”中,来促进了上下文增强。IBM 的 Granite 3B 及 8B 模型的上下文窗口长度最近已扩展至 128,000 个令牌。2更大的上下文窗口可让模型在其工作内存中保留更多文本,从而增强其在长时间对话、冗长对话和代码库中跟踪关键细节的能力。此功能有助于 LLM 聊天机器人在短期内和更长时间内做出一致的响应。
然而,即使扩展了上下文窗口,微调后的模型也可能会在训练和推理方面产生巨大成本。使用特定或私有数据对模型进行微调需借助数据转换和系统,以便促进面向 LLM 提示功能的有效数据检索方法。RAG 方法被视为促进长上下文语言建模的理想选择。3
RAG 是最知名且最常用的上下文增强方法之一。RAG 有助于 LLM 充分利用专门的知识库,从而提高 LLM 为问题提供更精确答案的能力。4典型的检索增强流程可分为三个步骤:
LlamaIndex 等数据框架可通过为 RAG 模式中的每一步提供全面的 API 调用,来简化数据摄取与检索流程。此流程由查询引擎的概念提供支持,而该引擎允许用户对其数据进行提问。借助外部数据查询并利用上下文知识来提示 LLM,可创建特定于领域的 LLM 应用程序。
数据摄取或“加载”是将外部数据源连接到 LLM 的第一步。LlaMaindex 将“数据摄取”称为“加载这些数据以供应用程序使用”。大多数私有或自定义数据可采用应用程序编程接口 (API)、PDF、图像、结构化查询语言数据库 (SQL) 等格式进行区分。Llama Index 可加载 160 多种不同的数据格式,其中包括结构化、半结构化与非结构化数据集。
数据连接器(也称为数据“加载器”)会从其本地源获取和采集数据。收集到的数据会转化为数据与元数据的集合。这些集合在 LlamaIndex 中被称为“文档”。数据连接器(或 LlamaIndex 中的“读取器”)会采集和加载各种数据格式。LlamaIndex 提供集成式读取器,它可将每个目录中的所有文件转换为文档,包括 Markdown 文件、PDF、Word 文档、PowerPoint 演示文稿、图像、音频文件和视频。6为处理内置功能中未包含的其他数据格式,可通过开源数据加载器的注册表 LlamaHub 获取数据连接器。此工作流中的该步骤会构建一个知识库,以形成针对这些数据的索引,以便 LLM 查询和使用这些数据。
一旦采集完这些数据,数据框架便需将这些数据转换并组织为可供 LLM 检索的结构。数据索引可将数据组织为 LLM 可使用的表示形式。LlamaIndex 提供若干索引类型来补充应用程序的查询策略,其中包括:矢量存储索引、摘要索引和知识图谱索引。
加载完这些数据并为其创建索引后,便可存储这些数据。LlamaIndex 支持众多具有不同架构、复杂性和成本的矢量存储。默认情况下,LlamaIndex 仅会将所有索引后的数据存储在内存中。
矢量存储索引通常会用于遵循 RAG 模式的 LLM 应用程序,因为它擅长处理自然语言查询。自然语言查询的检索精度取决于语义搜索,或是基于含义的搜索而不是关键字匹配。7通过将输入数据转换为矢量嵌入,可启用语义搜索。矢量嵌入是 LLM 可处理的数据的语义的数字表示形式。不同矢量嵌入之间的数学关系允许 LLM 根据查询词的含义来检索数据,以获得包含更多上下文信息的响应。
“VectorStoreIndex”会获取数据集合或“文档”对象并将其拆分为“节点”,而节点是代表源数据的某个“块”(“文档”)的数据原子单位。将数据集合拆分为块后,便会创建每个块的矢量嵌入。此时,整合后数据的格式便可供 LLM 进行查询。您可以存储这些矢量索引,以免重新索引。存储数据的最简方法是将其持久保存到磁盘,但 LlamaIndex 可与多个矢量数据库和嵌入模型相集成。8
要搜索嵌入,用户查询首先会被转换为矢量嵌入。接着,会使用一个数学流程并根据所有嵌入与该查询的语义相似性对所有嵌入进行排名。
矢量存储索引使用 top-k 语义检索,将最相似的嵌入作为相应的文本块进行返回。LlamaIndex 旨在促进大型索引的创建和管理,以实现高效的信息检索。
此工作流的最后一步是实现查询引擎来处理对 LLM 的提示调用。查询由三个不同的阶段组成:检索、后处理和响应合成。检索是指从矢量索引中获取并返回最相关的文档。后处理是指通过重新排序、转换或过滤来选择性地重新调整检索到的嵌入块或“节点”。响应合成是指将最相关的数据和提示组合在一起并发送到 LLM 以返回响应。
数据代理属于 LLM 驱动型 AI 代理,它们能对数据执行一系列任务,包括读取与写入功能。10LlamaIndex 数据代理是由 LLM 提供支持的知识工具,它们可执行以下操作:
AI 代理可通过一组 API 和工具与其外部环境进行交互。LlamaIndex 支持 OpenAI Function 代理(基于 OpenAI Function API 而构建)和 ReAct 代理。数据代理的核心组件为“推理循环”或代理的推理范式和作为工具本身的“工具抽象”。
工具抽象概括了代理如何访问和使用工具。LlamaIndex 提供工具和 ToolSpecs,后者是一个 Python 类,它代表代理可与之交互的完整 API 规范。基础工具抽象定义了一个通用接口,而该接口可接受一系列参数并返回一个可捕获任意响应的通用工具输出容器。LlamaIndex 提供涉及现有数据查询引擎的工具抽象,以及可供工具规范类使用的函数的对应抽象。
工具规范支持用户定义完整的服务,而不是用于处理特定任务的单个工具。例如,Gmail 工具规范允许代理读取和起草电子邮件。11相关的大致定义示例如下:
class GmailToolSpec(BaseToolSpec):每个函数均会使用 `FunctionTool` 抽象转换为一个工具。
LlamaIndex 会利用 LlamaHub 的 Tool Repository(工具存储库),其中包含 15 种以上的工具规范以供代理与之交互。该列表包括旨在增强和丰富代理执行不同操作的能力。该存储库中包含的部分规范如下:
LlamaIndex 提供可增强现有工具能力的实用工具,其中包括:
LlamaIndex 已扩展其功能,从而引入使用 LLM 驱动型 AI 代理以充当知识工作者。LlamaIndex AI 代理遵循 ReAct(推理与行动)行为模式。ReAct 代理遵循推理范式,而该范式可指示代理进行计划和推理,同时以迭代方式改进响应。此类 AI 代理可理解为一种思维链提示功能。代理可使用工具与其他 LLM 相集成。例如,LlamaHub 数据连接器与代理工具集合。
LlamaIndex 在其文档中提供了若干用例示例,并附有教程链接。13
了解 IBM® Granite™,我们的开放式、性能出色和值得信赖的 AI 模型系列,专门为企业量身定制,并经过优化,可以帮助您扩展 AI 应用程序。深入了解语言、代码、时间序列和防护措施选项。
了解如何为您的用例选择最合适的 AI 基础模型。
深入阅读 IBM 开发人员文章、博客和教程,加深您对 LLM 的了解。
了解如何使用最新的 AI 技术和基础架构,不断推动团队提高模型性能并超越竞争对手。
深入了解企业级基础模型的价值, 利用这种模型可信、高性能且经济高效的特点, 为所有行业服务。
了解如何将生成式 AI、机器学习和基础模型整合到您的业务运营中,以提高绩效。
了解我们对 2,000 家组织进行的关于他们的 AI 计划的调研,以发现哪些方法有效、哪些方法无效,以及如何才能取得领先。
1. Elena Lowery,“使用 watsonx.ai 和 LlamaIndex 构建 RAG 应用程序”,2024 年 5 月 28 日,https://community.ibm.com/community/user/watsonx/blogs/elena-lowery/2024/05/28/use-watsonxai-with-llamaindex-to-build-rag-applica。
2. Matt Stallone 等人,“Scaling Granite Code Models to 128K Context”,arXiv.org,2024 年 7 月 18 日,https://arxiv.org/abs/2407.13739。
3. Matt Stallone 等人,“Scaling Granite Code Models to 128K Context”。
4. Kim Martineau,“什么是检索增强生成 (RAG)?”,IBM Research,2024 年 5 月 1 日,https://research.ibm.com/blog/retrieval-augmented-generation-RAG。
5. “High-Level Concepts”,LlamaIndex,https://docs.llamaindex.ai/en/stable/getting_started/concepts/。
6.“Loading Data (Ingestion)”,LlamaIndex,https://docs.llamaindex.ai/en/stable/understanding/loading/loading/。
7. Elena Lowery,“Use Watsonx.Ai with LlamaIndex to Build Rag Applications”。
8. Elena Lowery,“Use Watsonx.Ai with LlamaIndex to Build Rag Applications”。
9.“Query Engine”,LlamaIndex,https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/。
10. Jerry Liu,“Data Agents”,Medium,2023 年 7 月 13 日,https://medium.com/llamaindex-blog/data-agents-eed797d7972f。
11.“Google”,LlamaIndex,https://docs.llamaindex.ai/en/stable/api_reference/tools/google/。
12.“Using LLMs”,LlamaIndex,https://docs.llamaindex.ai/en/latest/module_guides/models/llms/。
13.“Use Cases”,LlamaIndex,https://docs.llamaindex.ai/en/latest/use_cases/。
14.“Question-Answering (RAG)”,LlamaIndex,https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/。
15.“Agents”,LlamaIndex,https://docs.llamaindex.ai/en/stable/use_cases/agents/。