LlamaIndex中的索引构建:数据查询的基础
在加载数据后,你现在拥有了一个Document对象(或Node对象)的列表。现在是时候在这些对象上构建一个索引,以便你可以开始查询它们了。
什么是索引?
在LlamaIndex的术语中,索引是一种由Document对象组成的数据结构,旨在通过LLM进行查询。你的索引设计应与你的查询策略相辅相成。
LlamaIndex提供了几种不同的索引类型。我们在这里将介绍两种最常见的类型。
向量存储索引(Vector Store Index)
向量存储索引是你最常遇到的索引类型。向量存储索引将你的文档分割成节点,然后为每个节点的文本创建向量嵌入,准备由LLM查询。
什么是嵌入?
向量嵌入是LLM应用功能的核心。
向量嵌入,通常简称为嵌入,是文本语义或意义的数值表示。两个意义相似的文本将具有数学上相似的嵌入,即使实际文本非常不同。
这种数学关系使得语义搜索成为可能,用户提供查询词,LlamaIndex可以定位与查询词意义相关的文本,而不仅仅是简单的关键词匹配。这是检索增强生成(RAG)工作方式的一部分,也是LLMs一般功能的一部分。
有许多类型的嵌入,它们在效率、有效性和计算成本上各不相同。默认情况下,LlamaIndex使用text-embedding-ada-002,这是OpenAI使用的默认嵌入。如果你使用不同的LLMs,你通常会希望使用不同的嵌入。
向量存储索引嵌入你的文档
向量存储索引使用LLM的API将你所有的文本转换为嵌入;这就是我们所说的“嵌入你的文本”。如果你有很多文本,生成嵌入可能需要很长时间,因为它涉及许多往返API调用。
当你想要搜索你的嵌入时,你的查询本身被转换为向量嵌入,然后向量存储索引执行一个数学操作,按语义相似性对所有嵌入进行排序。
前K检索(Top K Retrieval)
一旦排序完成,向量存储索引返回最相似的嵌入作为相应的文本块。它返回的嵌入数量称为k,因此控制返回多少嵌入的参数称为top_k。这种类型的搜索通常因此被称为“前k语义检索”。
前k检索是查询向量索引的最简单形式;当你阅读查询部分时,你将了解更复杂和微妙的策略。
使用向量存储索引
要使用向量存储索引,将在加载阶段创建的文档列表传递给它:
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(documents)
提示
from_documents还接受一个可选参数show_progress。将其设置为True以在索引构建期间显示进度条。
你也可以选择直接在节点对象列表上构建索引:
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex(nodes)
在索引你的文本后,它现在在技术上已经准备好进行查询了!然而,嵌入所有文本可能既耗时又昂贵(如果你使用的是托管LLM)。为了节省时间和金钱,你首先需要存储你的嵌入。
摘要索引(Summary Index)
摘要索引是一种更简单的索引形式,最适合于生成文档中文本摘要的查询,正如名称所示。它只是存储所有的文档,并将它们全部返回给你的查询引擎。
通过LlamaIndex,我们不仅提供了一个强大的工具集,还构建了一个充满活力的社区,致力于推动LLMs在各种应用中的潜力。无论你是初学者还是经验丰富的开发者,LlamaIndex都为你提供了探索和实现上下文增强LLM应用的途径。加入我们,一起解锁LLMs的无限可能!
LlamaIndex索引构建
3405

被折叠的 条评论
为什么被折叠?



