当前位置: 首页 > news >正文

LlamaIndex 第九篇 Indexing索引

索引概述

数据加载完成后,您将获得一个文档对象(Document)列表(或节点(Node)列表)。接下来需要为这些对象构建索引(Index),以便开始执行查询。

索引(Index) 是一种数据结构,能够让我们快速检索与用户查询相关的上下文。在 LlamaIndex 中,它是实现检索增强生成(RAG, Retrieval-Augmented Generation)应用的核心基础。

从高层次来看,索引 由 文档(Documents) 构建而成,并用于创建 查询引擎(Query Engines) 和 聊天引擎(Chat Engines),从而支持基于数据的问答和对话功能。

在底层实现中,索引将数据存储在 节点(Node) 对象中(每个节点代表原始文档的一个片段),并通过 检索器(Retriever) 接口提供额外的配置和自动化支持。

在LlamaIndex的术语中,Index(索引)是一种由Document(文档)对象构成的数据结构,旨在让大语言模型(LLM)能够进行查询。

什么是嵌入?

向量嵌入(vector embeddings) 是大语言模型(LLM)应用运行的核心机制。

向量嵌入(vector embedding,通常简称为embedding)是对文本语义或含义的数值化表征。即使实际文字差异很大,含义相似的两段文本其向量嵌入在数学上也会高度相似。

这种数学关系实现了语义搜索——用户只需提供查询词,LlamaIndex 就能找到与查询词含义相关的文本(而非简单的关键词匹配)。这正是检索增强生成(Retrieval-Augmented Generation)技术的核心原理,也是大语言模型(LLMs)的基础运作机制。

嵌入模型(embeddings)存在多种类型,它们在效率、效果和计算成本上各有差异。默认情况下,LlamaIndex 采用的是 OpenAI 的默认嵌入模型 text-embedding-ada-002。若您使用不同的大语言模型(LLM),通常也需要搭配不同的嵌入模型。

索引的分类

本指南通过图示说明每种索引的工作原理。

术语解释:

  • 节点(Node):对应文档中的一段文本块。LlamaIndex 接收文档对象(Document),并在内部将其解析/分块为多个节点对象(Node)。

  • 响应合成(Response Synthesis):我们的模块,负责根据检索到的节点合成响应。您可以了解如何指定不同的响应模式。

摘要索引

摘要索引 Summary Index (原列表索引)的核心机制是将所有节点(Node)按顺序链式存储,形成一个线性结构。

向量存储索引

向量存储索引(Vector Store Index)会将每个节点(Node)及其对应的嵌入向量(embedding)存储到向量数据库(Vector Store)中。

树状索引

树状索引(Tree Index)会从一组节点(这些节点在树中成为叶节点)构建出层次化树形结构。

关键字表索引

关键字表索引(Keyword Table Index)通过建立关键词到节点的映射关系实现高效检索。该索引会提取每个节点的文本内容生成关键词列表,并在查询时通过关键词匹配快速定位相关节点。

属性图索引

属性图索引(Property Graph Index)的工作原理是首先构建包含标记节点和关系的知识图谱。该图谱的构建过程具有高度可定制性:既可以让大语言模型(LLM)自由提取内容,也可以按照严格模式进行提取,甚至支持用户自定义提取模块的实现。

VectorStoreIndex

向量存储索引(VectorStoreIndex)是目前最常用的索引类型。该索引会先将您的文档(Documents)分割成多个节点(Nodes),然后为每个节点的文本内容生成向量嵌入(vector embeddings),最终使大语言模型(LLM)能够对这些数据进行查询。

向量存储(Vector Stores) 是检索增强生成(RAG)的核心组件,因此几乎在所有基于 LlamaIndex 开发的应用中——无论是直接还是间接使用——都会涉及它。

向量存储(Vector Stores)接收一组节点(Node)对象,并基于这些节点构建索引。

工作原理

向量存储索引(Vector Store Index)通过调用大语言模型(LLM)的API接口,将您的所有文本转化为向量嵌入(embeddings)——这就是所谓"文本向量化"(embeds your text)的实质过程。

当执行向量搜索时,您的查询语句会首先被转化为向量嵌入,随后向量存储索引(VectorStoreIndex)会通过数学运算,根据所有嵌入向量与查询语句的语义相似度进行排序检索。

当排序完成后,向量存储索引(VectorStoreIndex)会返回相似度最高的向量嵌入及其对应的原始文本片段。系统返回的嵌入数量由参数 k 决定,因此该控制参数被命名为 top_k。这种检索方式由此得名 "top-k 语义检索"。

Top-K 检索是向量索引查询中最基础的形式。当您阅读后续的[查询]章节时,将会接触到更复杂、更精细的检索策略。

创建索引

使用 from_documents 方法创建索引

使用向量存储(Vector Store)最简单的方式就是加载一组文档,并通过 from_documents 方法直接构建索引:

from llama_index import VectorStoreIndex, SimpleDirectoryReader# 1. 加载文档(例如读取本地"data/"目录下的所有文件)
documents = SimpleDirectoryReader("data/").load_data()# 2. 一键构建向量索引(自动完成文本分块、向量化和存储)
index = VectorStoreIndex.from_documents(documents)

from_documents 方法还支持一个可选参数 show_progress。将其设为 True,即可在索引构建过程中显示进度条。

# 示例:启用构建进度条  
index = VectorStoreIndex.from_documents(documents=documents, show_progress=True  # ← 显示实时进度
)

当您使用 from_documents方法时,您的文档会被分割成多个文本块,并解析为Node对象——这是一种对文本字符串的轻量级抽象结构,能够持续追踪元数据和关联关系。

默认情况下,VectorStoreIndex会将所有数据存储在内存中,VectorStoreIndex 会以每批 2048 个节点的规模生成并插入向量。如果您的内存资源有限(或内存充裕),可以通过传入 insert_batch_size=2048 参数并指定您期望的批次大小来调整这一设置。

通过Nodes节点创建索引

如需完全掌控索引构建过程,您可以直接手动创建并配置节点Nodes,然后将其传入索引构造函数:

from llama_index.core.schema import TextNodenode1 = TextNode(text="<text_chunk>", id_="<node_id>")
node2 = TextNode(text="<text_chunk>", id_="<node_id>")
nodes = [node1, node2]
index = VectorStoreIndex(nodes)

http://www.xdnf.cn/news/488899.html

相关文章:

  • C# RSA加密
  • No module named‘serial‘解决办法
  • 计算机视觉----感兴趣区域(ROI)、非极大值抑制
  • 日语简单记录
  • 物联网设备远程管理:基于代理IP的安全固件更新通道方案
  • 共有四个站进行码分多址CDMA通信。四个站的码片序列为......
  • 地磁传感器RM3100简单介绍
  • Socket echo server
  • APIfox参数化配置
  • 移动硬盘不显示容量?三步找回你的重要数据
  • BUFDS_GTE2,IBUFDS,BUFG缓冲的区别
  • 深度学习反向传播:从数学推导到实战解析
  • `ParameterizedType` 和 `TypeVariable` 的区别
  • C#实现访问远程硬盘(附源码)
  • 代码随想录 算法训练 Day3:链表1
  • X_T 转 STP 技术全解:从格式剖析到软件实操与迪威模型网在线转换指南
  • 数据标注的黄金标准:如何为机器学习构建可靠标签?
  • **练习案例2:点和圆的关系**设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。
  • ML307R 的 USB Vendor ID (VID):0x2ECC ML307R 的 USB Product ID (PID):0x3012
  • 驱动芯片走线、过孔指导,大电流、散热过孔
  • Emacs 折腾日记(二十四)——帮助信息的一些优化
  • 【python实用小脚本-64】Python如何用图像比对解决办公效率难题?(附方案)
  • H3C华三配置AC自动上线AP
  • MySQL 第四讲---基础篇 数据类型
  • 【Linux网络】网络套接字编程
  • 泰迪杯特等奖案例深度解析:基于多级二值化与CNN回归的车牌识别系统设计
  • Mac上安装运行SynthTIGER
  • Spring AI 的功能介绍、集成使用和详细示例说明
  • 频域中的反射-信号完整性分析
  • 基于three.js 全景图片或视频开源库Photo Sphere Viewer