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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81062.shtml
英文地址,請注明出處:http://en.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…