跳转到内容

索引

数据加载完成后,您现在拥有一个文档对象列表(或节点列表)。是时候基于这些对象构建一个Index,以便开始对它们进行查询。

在LlamaIndex术语中,Index是由Document对象组成的数据结构,旨在支持LLM进行查询。您的索引设计旨在与您的查询策略互补。

LlamaIndex 提供了几种不同的索引类型。我们将在此介绍两种最常见的类型。

一个 VectorStoreIndex 是您最常遇到的索引类型。向量存储索引会获取您的文档并将其分割成多个节点。然后为每个节点的文本创建 vector embeddings,准备供大型语言模型查询。

Vector embeddingsVector embeddings 是LLM应用程序运作的核心。

一个 vector embedding,通常简称为嵌入,是文本语义或含义的数值化表示。即使实际文本差异很大,具有相似含义的两段文本在数学上也会具有相似的嵌入。

这种数学关系实现了语义搜索,用户提供查询词时,LlamaIndex能够定位与查询词含义相关的文本,而非简单的关键词匹配。这是检索增强生成技术运作的重要基础,也是大语言模型的通用工作原理。

存在多种类型的嵌入向量,它们在效率、效果和计算成本方面各不相同。默认情况下LlamaIndex使用text-embedding-ada-002,这是OpenAI默认使用的嵌入模型。如果您使用不同的LLM,通常需要采用不同的嵌入方式。

Vector Store Index 使用来自您大语言模型的 API 将所有文本转换为嵌入向量;这就是当我们说它“嵌入您的文本”时的含义。如果您有大量文本,生成嵌入向量可能需要很长时间,因为它涉及多次往返 API 调用。

当您想要搜索嵌入向量时,您的查询本身会被转换为向量嵌入,然后由VectorStoreIndex执行数学运算,根据所有嵌入向量与您查询的语义相似度进行排序。

排名完成后,VectorStoreIndex 将返回最相似的嵌入及其对应的文本块。返回的嵌入数量被称为 k,因此控制返回嵌入数量的参数被称为 top_k。因此,这种搜索类型通常被称为“top-k 语义检索”。

Top-k检索是查询向量索引的最简单形式;当您阅读查询章节时,将了解到更复杂和更精细的策略。

要使用向量存储索引,请将您在加载阶段创建的文档列表传递给它:

from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(documents)

你也可以选择直接在一组节点对象列表上构建索引:

from llama_index.core import VectorStoreIndex
index = VectorStoreIndex(nodes)

在您的文本被索引后,从技术上讲它已经准备好进行查询了!然而,对所有文本进行嵌入处理可能非常耗时,并且如果您使用的是托管式LLM,成本也可能很高。为了节省时间和金钱,您需要先存储您的嵌入

摘要索引是一种更简单的索引形式,最适合用于生成文档文本摘要的查询场景,正如其名称所示。它仅存储所有文档,并将全部文档返回给您的查询引擎。

如果你的数据是一组相互关联的概念(在计算机科学术语中,称为“图”),那么你可能会对我们的知识图谱索引感兴趣。