前言
本文总体介绍llamaindex框架,包括:llmaindex的功能,组成,说明等。
LlamaIndex 是一个开源的LLM应用开发框架,基于大模型(包括代理(Agent)和工作流(Workflow))构建上下文增强的生成式 AI 应用程序。
LlamaIndex的组成
下图是我根据LlamaIndex提供的功能组件,抽象出来后,形成的LlamaIndex总体功能结构图,方便对llamaindex的功能和组成有一个总体的把控。
第一层:模型层
最下面的一层是模型,上层的很多应用都是基于模型基础层的大模型来构建的,索引这里我把它画在第一层。该层包括三类模型:
-
大模型,包括开源大模型和闭源大模型,比如:OpenAI,llama3.2,qwen等
-
嵌入模型:用于将高维数据(如文本、图像或其他类型的数据)转换为低维的向量表示(embeddings)。这些向量可以捕捉数据的语义或特征信息,使其在数学空间中更易于操作和计算。
-
多模态模型:是一种能够处理和关联来自多种不同类型数据(模态)的机器学习模型。常见的模态包括文本、图像、音频、视频、传感器数据等。这些模型通过学习不同模态之间的关系和相互作用,为复杂任务提供更全面的解决方案。
第二层:数据接入和索引
第二层,包括三个方面的功能,包括数据加载,提示词管理,和索引构建。基于这一层提供的功能,才能实现的存储和索引构建功能。
-
数据加载(Loading)
LlamaIndex 中数据获取的关键是加载和转换。加载文档后,您可以通过转换和输出节点(Nodes)来处理它们。在LlamaIndex中提供数百种从外部数据源加载数据的函数库,可以从任何数据源来获取数据。同时LlamaParse提供PDF的解析功能。
-
提示词管理(Prompt)
LlamaIndex 使用一组开箱即用的默认提示模板。 另外,这里还有一些专门针对 gpt-3.5-turbo 等聊天模型编写和使用的提示。 用户还可以提供自己的提示模板来进一步定制框架的行为。自定义的最佳方法是从上面的链接复制默认提示,并将其用作任何修改的基础。
-
索引构建(Indexing)
索引是一种数据结构,允许我们快速检索用户查询的相关上下文。对于 LlamaIndex 来说,它是检索增强生成 (RAG) 用例的核心基础。 在高层,索引是根据文档构建的。它们用于构建查询引擎和聊天引擎,这样就可以基于你的数据进行问答和聊天。
在底层,索引将数据存储在 Node 对象(代表原始文档的块)中,并公开支持额外配置和自动化的检索器( Retriever) 接口。 迄今为止最常见的索引是 VectorStoreIndex;
第三层:存储和查询
有了接入的数据和索引,就可以把数据以及索引保存到对应的数据库或文件中,并且可以为上层提供数据查询的功能。
-
存储(Storing)
LlamaIndex 提供了一个用于摄取、索引和查询外部数据的高级接口。
在底层,LlamaIndex 还支持可交换存储组件,允许您自定义:
(1)文档存储:存储摄取的文档(即 Node 对象)的地方
(2)索引存储:存储索引元数据的地方
(3)向量存储:存储嵌入向量的地方
(4)属性图存储:存储知识图的地方(即 PropertyGraphIndex)
(5)聊天存储:存储和组织聊天消息(包括历史消息)的地方 文档/索引存储依赖于通用的键值存储抽象,这也在下面详细介绍。
LlamaIndex 支持将数据持久保存到 fsspec 支持的任何存储后端。我们已确认支持以下存储后端:
(1)Local filesystem
(2)AWS S3
(3)Cloudflare R2
-
查询(Quering)
查询是 LLM 申请中最重要的部分。要了解有关获取可部署的最终产品的更多信息,请查看查询引擎、聊天引擎。
(1)查询引擎是一个通用接口,允许您对数据提出问题。 查询引擎接受自然语言查询,并返回丰富的响应。它通常(但并非总是)通过检索器构建在一个或多个索引上。您可以组合多个查询引擎来实现更高级的功能。
(2)聊天引擎是一个高级界面,用于与您的数据进行对话(多次来回而不是单个问题和答案)。想想 ChatGPT,但会增强您的知识库。 从概念上讲,它是查询引擎的有状态类比。通过跟踪对话历史记录,它可以根据过去的上下文回答问题。
第四层:智能体(Agent)和工作流(Workflow)
基于索引,查询以及大模型的功能,可以提供智能体的相关对象和接口,这样上次应用可以基于这些基础的接口来进行构建。
-
智能体(Agent)
数据Agent是 LlamaIndex 中由 LLM 支持的知识工作者,可以通过“读取”和“写入”功能智能地对数据执行各种任务。他们有能力做到以下几点: 对不同类型的数据(非结构化、半结构化和结构化)执行自动搜索和检索。 以结构化方式调用任何外部服务 API,并处理响应并存储它以供以后使用。
从这个意义上说,Agent超越了我们的查询引擎,因为它们不仅可以从静态数据源“读取”,还可以动态地从各种不同的工具中获取和修改数据。 构建数据Agent需要以下核心组件:
(1)推理循环
(2)工具抽象 数据Agent通过一组 API 或工具进行初始化以进行交互;
代理可以调用这些API来返回信息或修改状态。给定输入任务,数据Agent使用推理循环来决定使用哪些工具、按什么顺序以及调用每个工具的参数。
-
工作流(Workflow)
LlamaIndex 中的工作流是一个事件驱动的抽象,用于将多个事件链接在一起。工作流由步骤(step)组成,每个步骤负责处理某些事件类型并发出新事件。
LlamaIndex 中的工作流程通过使用 @step 装饰器装饰函数来工作。这用于推断每个工作流的输入和输出类型以进行验证,并确保每个步骤仅在已接受的事件准备就绪时运行。
您可以创建一个工作流程来执行任何操作!构建Agent、RAG 流、提取流或您想要的任何其他内容。 工作流程也会自动检测,因此您可以使用 Arize Pheonix 等工具来观察每个步骤。 (注意:可观测性适用于利用较新仪器系统的集成。用法可能会有所不同。)
通用组件:模型评价,观察,配置和部署
-
评价(Evaluating)
评估和基准测试是法学硕士发展中的关键概念。为了提高 LLM 应用程序(RAG、代理)的性能,您必须有一种方法来衡量它。 LlamaIndex 提供了衡量生成结果质量的关键模块。我们还提供衡量检索质量的关键模块。 响应评估:响应是否与检索到的上下文匹配?它也与查询匹配吗?它与参考答案或指南相符吗? 检索评估:检索到的来源与查询相关吗? 本节介绍 LlamaIndex 中的评估组件如何工作。
-
观察(Observability)
LlamaIndex 提供一键式可观察性,允许您在生产环境中构建原则性的 LLM 应用程序。 基于数据(RAG 系统、代理)原则性开发 LLM 应用程序的关键要求是能够观察、调试和评估您的系统 - 无论是作为整体还是每个组件。 此功能允许您将 LlamaIndex 库与我们合作伙伴提供的强大可观察性/评估工具无缝集成。配置变量一次,您就可以执行以下操作:
(1)查看LLM/提示输入/输出
(2)确保任何组件(LLM、嵌入)的输出均按预期运行
(3)查看索引和查询的调用跟踪 每个提供商都有相同点和不同点。
-
配置(Configuring)
设置是 LlamaIndex 工作流程/应用程序中索引和查询阶段使用的一组常用资源。 您可以使用它来设置全局配置。本地配置(转换、LLM、嵌入模型)可以直接传递到使用它们的接口中。 设置是一个简单的单例对象,存在于您的应用程序中。当未提供特定组件时,Settings 对象将用于将其作为全局默认值提供。
-
部署(deploy)
Llama Deploy(以前称为 llama-agents)是一个异步优先框架,用于基于 llama_index 的工作流程来部署、扩展和生产代理多服务系统。借助 Llama Deploy,您可以在 llama_index 中构建任意数量的工作流程,然后将它们作为服务运行,可以通过用户界面或系统的其他服务部分通过 HTTP API 进行访问。
Llama Deploy 的目标是轻松地将您在笔记本中构建的内容转换为在云上运行的内容,并对原始代码进行最少的更改(可能为零)。为了使这一转变变得愉快,将代理作为服务运行的内在复杂性由一个名为 API Server 的组件进行管理,该组件是 Llama Deploy 中唯一面向用户的组件。您可以通过两种方式与 API Server 交互:
(1)从 shell 使用 llamactl CLI。
(2)通过 Python 应用程序或脚本中的 LLama Deploy SDK。
SDK 和 CLI 均随 Llama Deploy Python 包一起分发,因此包含电池。
LLamaIndex中的基本概念
上下文增强(Context-Augmented)
大模型在人类和数据之间提供自然语言界面。大模型接受了大量公开可用数据的预先训练,但他们没有接受您的数据的训练。您的数据可能是私有的或特定于您要解决的问题。它位于 API 后面、SQL 数据库中,或者隐藏在 PDF 和幻灯片中。
上下文增强使大模型可以使用您的数据来解决目前的问题。 LlamaIndex 提供了构建任何上下文增强用例(从原型到生产)的工具。我们的工具允许您获取、解析、索引和处理数据,并快速实施将数据访问与 LLM 提示相结合的复杂查询工作流程。
上下文增强最流行的例子是检索增强生成(RAG),它在推理时将上下文与 LLM 结合起来。
Agent
代理是由大模型支持的知识助手,使用工具来执行研究、数据提取等任务。代理的范围从简单的问答到能够感知、决策和采取行动以完成任务。 LlamaIndex 提供了一个用于构建代理的框架,包括使用 RAG 管道作为完成任务的众多工具之一的能力。
Workflow
工作流是多步骤过程,结合一个或多个代理、数据连接器和其他工具来完成一项任务。它们是事件驱动的软件,允许您结合 RAG 数据源和多个代理来创建复杂的应用程序,该应用程序可以执行具有反射、纠错和高级 LLM 应用程序的其他特征的各种任务。然后,您可以将这些代理工作流程部署为生产微服务。
Context-Augmented LLM 应用程序的框架
LlamaIndex对如何使用 LLM 没有任何限制。您可以把大模型用作:auto-complete、chatbots、agent等。LlamaIndex让使用它们的实现变得更容易。LlamaIndex提供以下工具:
-
数据连接器(Data connectors):从其源获取现有数据并进行格式化处理。这些可以是 API、PDF、SQL 等等。
-
数据索引(Data indexes):以中间表示形式构建数据,这些中间表示形式对于大模型来说既简单又高效。
-
引擎(Engines ):提供对数据的自然语言访问。例如:
-
查询引擎是强大的问答接口(例如 RAG 流)。
-
聊天引擎是用于与数据进行多消息、“来回”交互的对话界面。
-
-
Agents:代理是由大模型支持的知识工作者,并通过工具进行增强,从简单的辅助功能到 API 集成等等。
-
可观察性/评估(Observability/Evaluation):集成使您能够在良性循环中严格实验、评估和监控您的应用程序。
-
工作流(Workflows ):程允许您将上述所有内容组合到一个事件驱动的系统中,该系统比其他基于图形的方法更加灵活。
LlamaIndex使用场景
LlamaIndex 为初学者、高级用户以及介于两者之间的每个人提供工具。高级 API 允许初学者使用 LlamaIndex 通过 5 行代码获取和查询他们的数据。 对于更复杂的应用程序,我们的较低级别 API 允许高级用户自定义和扩展任何模块(数据连接器、索引、检索器、查询引擎和重新排名模块)以满足他们的需求。