LlamaIndex 第九篇 Indexing索引

news2025/5/18 2:16:41

索引概述

数据加载完成后,您将获得一个文档对象(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 TextNode

node1 = TextNode(text="<text_chunk>", id_="<node_id>")
node2 = TextNode(text="<text_chunk>", id_="<node_id>")
nodes = [node1, node2]
index = VectorStoreIndex(nodes)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2378151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 C# 中将 DataGridView 数据导出为 CSV

在此代码示例中&#xff0c;我们将学习如何使用 C# 代码将 DataGridView 数据导出到 CSV 文件并将其保存在文件夹中。 在这个程序中&#xff0c;首先&#xff0c;我们必须连接到数据库并从中获取数据。然后&#xff0c;我们将在数据网格视图中显示该数据&#xff0c;…

MySQL中表的增删改查(CRUD)

一.在表中增加数据&#xff08;Create&#xff09; INSERT [INTO] TB_NAME [(COLUMN1,COLUMN2,...)] VALUES (value_list1),(value_list2),...;into可以省略可仅选择部分列选择插入&#xff0c;column即选择的列&#xff0c; 如图例可以选择仅在valuelist中插入age和id如果不指…

项目思维vs产品思维

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们来聊一下项目思维和产品思维的区别。 项目是实施关键&#xff0c;力求每一步都精准到位&#xff1b;产品则是战略导向&#xff0c;确保所选之路正确无误。若缺乏优异成果&#xff0c;即便按时完成&#xff0c;也只…

游戏引擎学习第285天:“Traversables 的事务性占用”

回顾并为当天的工作做准备 我们有一个关于玩家移动的概念&#xff0c;玩家可以在点之间移动&#xff0c;而且当这些点移动时&#xff0c;玩家会随之移动。现在这个部分基本上已经在工作了。我们本来想实现的一个功能是&#xff1a;当玩家移动到某个点时&#xff0c;这个点能“…

文件上传Ⅲ

#文件-解析方案-执行权限&解码还原 1、执行权限 文件上传后存储目录不给执行权限&#xff08;即它并不限制你上传文件的类型&#xff0c;但不会让相应存有后门代码的PHP文件执行&#xff0c;但是PNG图片是可以访问的&#xff09; 2、解码还原 数据做存储&#xff0c;解…

基于深度学习的工业OCR数字识别系统架构解析

一、项目场景 春晖数字识别视觉检测系统专注于工业自动化生产监控、设备运行数据记录等关键领域。系统通过高精度OCR算法&#xff0c;能够实时识别设备上显示的关键数据&#xff08;如温度、压力、计数等&#xff09;&#xff0c;并定时存储至Excel文件中。这些数据对于生产过…

go-中间件的使用

中间件介绍 Gin框架允许开发者在处理请求的过程中加入用户自己的钩子(Hook)函数这个钩子函数就是中间件&#xff0c;中间件适合处理一些公共的业务逻辑比如登录认证&#xff0c;权限校验&#xff0c;数据分页&#xff0c;记录日志&#xff0c;耗时统计 1.定义全局中间件 pac…

学习以任务为中心的潜动作,随地采取行动

25年5月来自香港大学、OpenDriveLab 和智元机器人的论文“Learning to Act Anywhere with Task-centric Latent Actions”。 通用机器人应该在各种环境中高效运行。然而&#xff0c;大多数现有方法严重依赖于扩展动作标注数据来增强其能力。因此&#xff0c;它们通常局限于单一…

15.springboot-控制器处理参数传递

22.springMVC Spring MVC 是非常著名的 Web 应用框架&#xff0c;现在的大多数 Web 项目都采用 Spring MVC。它与 Spring 有着紧 密的关系。是 Spring 框架中的模块&#xff0c;专注 Web 应用&#xff0c;能够使用 Spring 提供的强大功能&#xff0c;IoC , Aop 等等。 Spring…

半成品的开源双系统VLA模型,OpenHelix-发表于2025.5.6

半成品的开源双系统VLA模型&#xff0c;OpenHelix https://openhelix-robot.github.io/ 0. 摘要 随着OpenVLA的开源&#xff0c;VLA如何部署到真实的机器人上获得了越来越多的关注&#xff0c;各界人士也都开始尝试解决OpenVLA的效率问题&#xff0c;双系统方案是其中一个非…

网站推荐(第四期)

好久没有推荐过网站了&#xff0c;重拾推荐一波&#xff0c;最近发现这几个确实不错。 某火箭共享账号 官网&#xff1a;https://id.bocchi.vip/ 苹果用户专用&#xff0c;都是买了某火箭的账号&#xff0c;懂得都懂。 这玩意竟然还是个开源项目&#xff0c;项目地址&#x…

2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛)解题报告 | 珂学家

前言 题解 2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组&#xff08;国赛&#xff09;&#xff0c;陈越姐姐出题。 国赛比省赛&#xff0c;难度增强了不少&#xff0c;题目就剩下4个题了。 涉及堆栈&#xff0c;hash表&#xff0c;优先队列等高阶数据结构的使用&#x…

git工具使用详细教程-------命令行和TortoiseGit图形化

下载 git下载地址&#xff1a;https://git-scm.com/downloads TortoiseGit&#xff08;图形化工具&#xff09;下载地址&#xff1a;https://tortoisegit.org/download/ 认识git结构 工作区&#xff1a;存放代码的地方 暂存区&#xff1a;临时存储&#xff0c;将工作区的代码…

Mysql新增

插入一个记录需要的时间由下列因素组成&#xff0c;其中的数字表示大约比例&#xff1a; 连接&#xff1a;(3)发送查询给服务器&#xff1a;(2)分析查询&#xff1a;(2)插入记录&#xff1a;&#xff08;1x记录大小&#xff09;插入索引&#xff1a;&#xff08;1x索引&#x…

AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(上)

开篇 我们之前花了将近10个篇章讲Dify的一些基础应用,包括在讲Dify之前我们讲到了几十个AI Agent的开发例子,我不知道大家发觉了没有,在AI Agent开发过程中我们经常会伴随着这样的一些问题: 需要经常改猫娘;需要经常改调用LLM的参数,甚至在一个流程中有3个节点,每个节点…

【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历

PlatformIO 是开源的物联网开发生态系统。提供跨平台的代码构建器、集成开发环境&#xff08;IDE&#xff09;&#xff0c;兼容 Arduino&#xff0c;ESP8266和mbed等。 开源库地址&#xff1a;https://github.com/platformio 在 VScode 中配置 PlatformIO 插件&#xff0c;记录…

MySQL 事务(一)

文章目录 CURD不加控制&#xff0c;会有什么问题CURD满足什么属性&#xff0c;能解决上述问题&#xff1f;什么是事务为什么要有事务事务的版本支持了解事务的提交方式 事务常见操作方式研究并发场景事务的正常操作事务的非正常情况的案例结论事务操作的注意事项 CURD不加控制&…

【全解析】EN 18031标准下的 AUM 身份认证机制[下篇]

在上篇文章中&#xff0c;我们详细介绍了EN 18031标准中AUM身份认证机制的AUM - 1、AUM - 2和AUM - 3条款。今天&#xff0c;我们将继续深入探讨AUM - 4到AUM - 6的相关内容&#xff0c;进一步了解该标准如何保障无线电设备的身份认证安全。 一、AUM - 4&#xff1a;更改认证器…

彻底解决sublime text4无法打开install package界面安装插件问题

1. 说明 最新版的 sublime text4&#xff0c;不管是通过软件自带的命令安装的 package control 插件&#xff0c;还是从官网下载的 package control 插件&#xff0c;之后通过 CommandShiftP 打开面板&#xff0c;输入 Package Control&#xff0c;可能找不到 Package Control…

用户现场不支持路由映射,如何快速将安防监控EasyCVR视频汇聚平台映射到公网?

一、方案背景​ 随着数字化安防与智能交通管理发展&#xff0c;视频监控远程管理需求激增。EasyCVR作为专业视频融合平台&#xff0c;具备多协议接入等核心功能&#xff0c;是智能监控的重要工具。但实际部署中&#xff0c;当EasyCVR处于内网且路由器无法进行端口映射时&#…