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.pswp.cn/pingmian/81062.shtml

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

相关文章

【问题排查】easyexcel日志打印Empty row!

问题原因 日志打印​​I/O 操作开销​&#xff08;如 Log4j 的 FileAppender&#xff09;会阻塞业务线程&#xff0c;直到日志写入完成&#xff0c;导致接口响应变慢 问题描述 在线上环境&#xff0c;客户反馈导入一个不到1MB的excel文件&#xff0c;耗时将近5分钟。 问题排…

代码随想录第51天|岛屿数量(深搜)、岛屿数量(广搜)、岛屿的最大面积

1.岛屿数量&#xff08;深搜&#xff09; ---》模板题 版本一写法&#xff1a;下一个节点是否能合法已经判断完了&#xff0c;传进dfs函数的就是合法节点。 #include <iostream> #include <vector> using namespace std;int dir[4][2] {0, 1, 1, 0, -1, 0, 0, -…

Made with Unity | 从影视到游戏:《鱿鱼游戏》IP 的边界拓展

优质IP的跨媒体开发潜力不可限量。以现象级剧集《鱿鱼游戏》为例&#xff0c;Netflix旗下游戏工作室Boss Fight在第二季开播前夕推出的手游《Squid Game: Unleashed》&#xff0c;一经发布便横扫全球107个国家和地区的App Store免费游戏榜首。 这款多人派对大逃杀游戏完美还原…

allure 报告更改标题和语言为中文

在网上看到好多谈到更改allure 的标题设置都很麻烦&#xff0c;去更改JSON文件 其实可以有更简单的办法&#xff0c;就是在生成报表时增加参数 使用allure --help 查看&#xff1a; --lang, --report-language 设置报告的语言&#xff0c;默认是应用 The report language. …

HGDB索引膨胀的检查与处理思路

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.8 文档用途 本文档主要介绍HGDB索引膨胀的定义、产生的原因、如何检查以及遇到索引膨胀如何处理&#xff08;包括预防和解决&#xff09; 详细信息 …

【Python CGI编程】

Python CGI&#xff08;通用网关接口&#xff09;编程是早期Web开发中实现动态网页的技术方案。以下是系统化指南&#xff0c;包含核心概念、实现步骤及安全实践&#xff1a; 一、CGI 基础概念 1. 工作原理 浏览器请求 → Web服务器&#xff08;如Apache&#xff09; → 执行…

数据库故障排查指南:从入门到精通

1. 常见数据库故障类型 1.1 连接故障 数据库连接超时连接池耗尽网络连接中断认证失败1.2 性能故障 查询执行缓慢内存使用过高CPU使用率异常磁盘I/O瓶颈1.3 数据故障 数据不一致数据丢失数据损坏事务失败2. 故障排查流程 2.1 初步诊断 -- 检查数据库状态SHOW STATUS;SHOW PRO…

conda创建环境常用命令(个人用)

创建环境 conda create --name your_project_name创建环境 ---- 指定环境python版本 conda create --name your_project_name python3.x环境列表 conda env list激活环境 conda activate your_project_name退出环境 conda deactivate环境列表 #使用conda命令 conda list …

PCL 绘制二次曲面

文章目录 一、简介二、实现代码三、实现效果一、简介 这里基于二次曲面的公式: z = a 0 + a 1 x + a 2 y + a

一文讲透面向对象编程OOP特点及应用场景

面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;是一种以对象为核心、通过类组织代码的编程范式。它通过模拟现实世界的实体和交互来构建软件系统&#xff0c;是现代软件开发中最广泛使用的范式之一。以下是 OOP 的全面解析&#xff1a; 一、OOP 的四大…

linux,我启动一个springboot项目, 用java -jar xxx.jar ,但是没多久这个java进程就会自动关掉

当使用 java -jar xxx.jar & 启动 Spring Boot 项目后进程自动关闭时&#xff0c;可能由多种原因导致。以下是常见排查步骤和解决方案&#xff1a; 一、查看日志定位原因 进程异常关闭通常会在控制台或日志中留下线索&#xff0c;建议先获取完整日志&#xff1a; 1. 查看…

【独家精简】win11(24h2)清爽加速版

自作该版本的初心&#xff1a;随着电脑性能的不断提升&#xff0c;我们需要的更多的是没有广告&#xff0c;没有推荐&#xff0c;没有收集隐私的windows清爽版纯净系统 目前只会去制作windows系统专业版 1、去除Windows系统自带的广告新闻和推荐以及小组间和聊天功能。 2、精简…

大二java第一面小厂(挂)

第一场&#xff1a; mybatis怎么防止数据转义。 Hutool用的那些你常用的方法。 springboot的常用注解。 redis的多级缓存。 websocket怎么实现的多人协作编辑功能。 怎么实现的分库分表。 mysql里面的各种操作&#xff0c;比如说分表怎么分&#xff0c;分页查询怎么用。 mybat…

OceanBase 的系统变量、配置项和用户变量有何差异

在继续阅读本文之前&#xff0c;大家不妨先思考一下&#xff0c;数据库中“系统变量”、“用户变量”以及“配置项”这三者之间有何不同。如果感到有些模糊&#xff0c;那么本文将是您理清这些概念的好帮手。 很多用户在使用OceanBase数据库中的“配置项”和“系统变量”&#…

HTML-3.3 表格布局(学校官网简易布局实例)

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…

如何在Edge浏览器里-安装梦精灵AI提示词管理工具

方案一&#xff08;应用中心安装-推荐&#xff09;&#xff1a; 梦精灵 跨平台AI提示词管理工具 - Microsoft Edge AddonsMake Microsoft Edge your own with extensions that help you personalize the browser and be more productive.https://microsoftedge.microsoft.com…

GpuGeek 网络加速:破解 AI 开发中的 “最后一公里” 瓶颈

摘要&#xff1a; 网络延迟在AI开发中常被忽视&#xff0c;却严重影响效率。GpuGeek通过技术创新&#xff0c;提供学术资源访问和跨国数据交互的加速服务&#xff0c;助力开发者突破瓶颈。 目录 一、引言&#xff1a;当算力不再稀缺&#xff0c;网络瓶颈如何破局&#xff1f; …

校园社区小程序源码解析

基于ThinkPHP、FastAdmin和UniApp开发的校园社区小程序源码&#xff0c;旨在为校园内的学生和教职员工提供一个便捷的在线交流和服务平台。 该小程序前端采用UniApp进行开发&#xff0c;具有良好的跨平台兼容性&#xff0c;可以轻松发布到iOS和Android平台。同时&#xff0c;后…

【Elasticsearch】flattened`类型在查询嵌套数组时可能返回不准确结果的情况

好的&#xff01;为了更清楚地说明flattened类型在查询嵌套数组时可能返回不准确结果的情况&#xff0c;我们可以通过一个具体的例子来展示。这个例子将展示如何在文档中没有完全匹配的嵌套对象时&#xff0c;flattened类型仍然可能返回该文档。 示例文档结构 假设你有以下文…

【目标检测】RT-DETR

DETRs Beat YOLOs on Real-time Object Detection DETR在实时目标检测任务中超越YOLO CVPR 2024 代码地址 论文地址 0.论文摘要 YOLO系列因其在速度与精度间的均衡权衡&#xff0c;已成为实时目标检测领域最受欢迎的框架。然而我们观察到&#xff0c;非极大值抑制&#xf…