链接: LlamaIndex v0.10.17
LlamaIndex 是一个基于 LLM 的应用程序的数据框架,它受益于上下文增强。这种LLM系统被称为RAG系统,代表“检索-增强生成”。LlamaIndex 提供了必要的抽象,以便更轻松地摄取、构建和访问私有或特定于域的数据,以便将这些数据安全可靠地注入 LLM,以实现更准确的文本生成。
LLM 在人类和数据之间提供了一个自然语言接口。广泛可用的模型是在大量公开数据(如维基百科、邮件列表、教科书、源代码等)上预先训练的。然而,虽然 LLM 是在大量数据上训练的,但它们并没有在你的数据上训练,这些数据可能是私有的,也可能是特定于你试图解决的问题。它位于 API 后面、SQL 数据库中,或被困在 PDF 和幻灯片中。
您可以选择使用您的数据微调 LLM,但是:LLM是昂贵的。由于培训成本高昂,很难用最新信息更新 LLM。缺乏可观测性。当你问一个LLM一个问题时,LLM是如何得出答案的并不明显。
无需微调,而是可以使用称为检索增强生成 (RAG) 的上下文增强模式来获取与特定数据相关的更准确的文本生成。RAG 涉及以下高级步骤:首先从数据源中检索信息,将其作为上下文添加到您的问题中,然后要求 LLM 根据丰富的提示回答。
通过这样做,RAG 克服了微调方法的所有三个弱点:不涉及培训,所以很便宜。只有在您提出要求时才会获取数据,因此数据始终是最新的。LlamaIndex 可以向您显示检索到的文档,因此更值得信赖。
首先,LlamaIndex 对您使用 LLM 的方式没有限制。您仍然可以将 LLM 用作自动完成、聊天机器人、半自主代理等(请参阅左侧的用例)。它只会使 LLM 与您更相关。LlamaIndex 提供以下工具来帮助您快速建立生产就绪的 RAG 系统:
数据连接器从其本机源和格式引入现有数据。这些可以是 API、PDF、SQL 等等。
数据索引以中间表示形式构建数据,这些表示形式对 LLM 来说既简单又高效。
引擎提供对数据的自然语言访问。例如:查询引擎是用于知识增强输出的强大检索接口。聊天引擎是用于与数据进行多消息“来回”交互的对话界面。
数据代理是由 LLM 驱动的知识工作者,通过工具进行增强,从简单的帮助程序函数到 API 集成等。
应用程序集成将 LlamaIndex 重新绑定到生态系统的其余部分。这可能是 LangChain、Flask、Docker、ChatGPT 或......别的东西!
开始
要安装库,请执行以下操作:
pip install llama-index
我们建议您从如何阅读这些文档开始,这些文档将根据您的经验水平为您指明正确的位置。
推特:https://twitter.com/llama_index
不和谐 https://discord.gg/dGcwcsnxhU
LlamaHub:https://llamahub.ai |大型(且还在不断增长)的自定义数据连接器集合
LlamaLab:GitHub - run-llama/llama-lab |建立在LlamaIndex之上的雄心勃勃的项目
安装设置过程略。
LLM 是在大量数据上训练的,但它们不是在您的数据上训练的。检索增强生成 (RAG) 通过将数据添加到 LLM 已经有权访问的数据中来解决这个问题。在本文档中,您将经常看到对 RAG 的引用。在 RAG 中,您的数据被加载并准备用于查询或“索引”。用户查询作用于索引,索引将数据筛选到最相关的上下文。然后,此上下文和您的查询会随着提示一起转到 LLM,LLM 会提供响应。即使您正在构建的是聊天机器人或代理,您也希望了解将数据导入应用程序的 RAG 技术。
RAG 中有五个关键阶段,而这些阶段又将成为您构建的任何大型应用程序的一部分。这些是:
加载:这是指将数据从其所在位置(无论是文本文件、PDF、其他网站、数据库还是 API)获取到管道中。LlamaHub 提供数百种连接器供您选择。
索引:这意味着创建一个允许查询数据的数据结构。对于 LLM 来说,这几乎总是意味着创建数据含义的数字表示,以及许多其他元数据策略,以便轻松准确地找到上下文相关的数据。vector embeddings
存储:数据编制索引后,您几乎总是希望存储索引以及其他元数据,以避免重新编制索引。
查询:对于任何给定的索引策略,您可以通过多种方式利用 LLM 和 LlamaIndex 数据结构进行查询,包括子查询、多步查询和混合策略。
评估:任何管道中的关键步骤是检查它相对于其他策略的有效性,或者何时进行更改。评估提供了客观的衡量标准,以衡量您对查询的响应的准确性、忠实度和速度。
您还会遇到一些术语,这些术语指的是每个阶段中的步骤。
节点和文档:A Document
是围绕任何数据源的容器 - 例如,PDF、API 输出或从数据库检索数据。A Node
是 LlamaIndex 中数据的原子单位,表示源的“块Document
”。节点具有元数据,可将它们与它们所在的文档以及其他节点相关联。
连接器: 数据连接器(通常称为 Reader
)将来自不同数据源和数据格式的数据引入到 Documents
和 Nodes
中。
索引: 摄取数据后,LlamaIndex 将帮助您将数据索引到易于检索的结构中。这通常涉及生成矢量嵌入,这些嵌入存储在称为矢量存储的专用数据库中。索引还可以存储有关数据的各种元数据。
嵌入: LLM生成称为embeddings
的数据的数字表示。在筛选数据的相关性时,LlamaIndex 会将查询转换为嵌入,并且向量存储将查找与查询嵌入在数值上相似的数据。
猎犬: 检索器定义在给定查询时如何有效地从索引中检索相关上下文。检索策略是检索数据的相关性和效率的关键。
路由器: 路由器确定将使用哪个检索器从知识库中检索相关上下文。更具体地说,该RouterRetriever
类负责选择一个或多个候选检索器来执行查询。他们使用选择器根据每个候选人的元数据和查询来选择最佳选项。
节点后处理器: 节点后处理器接收一组检索到的节点,并对其应用转换、过滤或重新排序逻辑。
响应合成器: 响应合成器使用用户查询和一组给定的检索文本块从 LLM 生成响应。
数据支持的 LLM 应用程序有无穷无尽的用例,但它们可以大致分为三类:
查询引擎: 查询引擎是一个端到端管道,可用于对数据提出问题。它接受自然语言查询,并返回响应,以及检索并传递给 LLM 的引用上下文。
聊天引擎: 聊天引擎是用于与数据进行对话的端到端管道(多个来回而不是单个问答)。
代理商: 智能体是由 LLM 提供支持的自动化决策者,它通过一组工具与世界互动。座席可以采取任意数量的步骤来完成给定的任务,动态地决定最佳行动方案,而不是遵循预先确定的步骤。这使其具有更大的灵活性,可以处理更复杂的任务。
自定义任务需求:自定义教程 - LlamaIndex v0.10.17