spring-ai 1.0.0 學習(十四)——向量數據庫

向量數據庫是AI系統中常用的工具,主要用來存儲文檔片段及進行語義相似度查找

與傳統數據庫不同,它執行的是相似度查找而不是精確匹配

最小化樣例

首先在application.properties中,根據所用Embedding模型,添加一個嵌入式模型型號的配置

spring.ai.zhipuai.embedding.options.model=embedding-3

然后需要聲明一個VectorStore的bean,需要傳入的EmbeddingModel(ZhiPuAiEmbeddingModel)在自動化配置包中已經聲明過了(參見ZhiPuAiEmbeddingAutoConfiguration)

@Configuration
public class Config {@Beanpublic VectorStore vectorStore(EmbeddingModel embeddingModel) {return SimpleVectorStore.builder(embeddingModel).build();}
}

之后就可以裝配使用了,樣例中使用add方法添加了一個Document,然后使用similaritySearch進行語義相近搜索,并返回結果文本

    @AutowiredVectorStore vectorStore;void save(){//目前僅提供JsonReader和TextReaderDocument document = new Document("kitty is a cat");vectorStore.add(List.of(document));}@GetMapping("/ai/vector")String generation(String userInput){save();return this.vectorStore.similaritySearch(userInput).get(0).getText();}

在實際生產中,一般分為兩步使用:

數據預處理:將信息資料(比如一些規章制度或其他領域的文件,包括docx、pdf等格式)加載到VectorStore中

處理用戶查詢:搜索與用戶問題語義相近的片段,之后一起傳遞給大模型,由大模型綜合搜索結果進行回答

進階知識

了解了如何使用,我們來看一下其內部原理和相關接口及實現類,以及如何進行技術選型?

作用原理

VectorStore中內置一個嵌入式大模型,數據預處理階段加載到向量數據庫中的每個文檔片段,會由EmbeddingModel加工為一個浮點數數組(即多維向量)

在處理用戶查詢時,EmbeddingModel同樣先將用戶查詢的文本加工為一個多維向量,然后向量數據庫將其與庫內每個多維向量進行匹配,得到相似度數值,相似度越接近0越不相關,越接近1越相關。

相關接口及實現

接口

VectorStore

BatchingStrategy
方法

void add(List<Document> docs);

List<Document> similaritySearch(SearchRequest request);

List<List<Document>> batch(List<Document docs);
實現類

AbstractObservationVectorStore

SimpleVectorStore

TokenCountBatchingStrategy

VectorStore接口:向量數據庫接口,主要方法即add和similaritySearch,分別對應數據預處理和相似性查找

AbstractObservationVectorStore:VectorStore的抽象實現類,內部包含EmbeddingModel和BatchingStrategy,分別用來將Document向量化和切分Document,同時負責可觀測性Observation相關的處理

SimpleVectorStore:一個簡單的向量數據庫實現,不建議用在生產,適合用來進行教學,內部實現了一個EmbeddingMath,用來計算兩個向量的相似度

Document:相似性查找的結果對象,文檔或文檔片段,內部包含id、文檔文本、得分等屬性

SearchRequest:相似性查找請求對象,內部包含請求文本query,結果最大條數topK,最低相似度閾值similarityThreshold,篩選表達式filterExpression等

BatchingStrategy接口:文檔切分策略接口,提供batch方法,將長文本切分為一系列的小文本

TokenCountBatchingStrategy:按token個數對Document進行切分

其他框架的相關功能

spring-ai的VectorStore實際已經涉及了RAG(檢索增強生成)的各個方面,例如文檔切分、向量化、存儲、相似性查找等功能

在這些環節,有許多可以提高最終效果的優化方案

例如langchain的切分策略,除了按token個數進行切分,還可以按字符切分,比如按【換行符,句號,分號,逗號】的順序對文檔切分,這樣能更好的保持語義完整性。

而spring-ai由于起步較晚,此類擴展相對還比較少。

相關優化方案會在后續RAG篇進階知識中進行詳細的說明。

向量數據庫選型

spring-ai支持的向量數據庫:

可以參考VectorStoreProvider枚舉類,目前該枚舉類已經有21種向量數據庫

選型時需要考慮的因素:

是否開源:這是相對來說首先需要考慮的一個方面,因為它決定了很多其他因素,開源一般都伴隨著這些屬性——免費、社區活躍、可以進行定制化改造、維護難度相對較高、需要有自己的研發人員,而閉源則一般伴隨著這些屬性——收費、易用、由廠家提供維護等。

數據規模:其次需要考慮的就是數據規模,因為它也決定了許多其他因素,如果數據量較大,向量維度較高,則需要考慮向量數據庫是否支持大規模或超大規模,是否支持分布式,是否支持索引,搜索性能如何等。

其他因素:如是否國產、云上還是云下、是否需要結合其他檢索如全文搜索、與現有系統的兼容性、易用性等

學習時可以直接使用spring-ai自帶的SimpleVectorStore或者FAISS、Chroma

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84988.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 的Banner的介紹和設置

Spring Banner 是指在 Spring Boot 應用啟動時,控制臺上顯示的那一段 ASCII 藝術字(通常是 Spring 的 logo),以及一些應用信息。 Banner 是 Spring Boot 提供的一個小但有趣的功能,可以讓應用程序啟動時更具個性也顯得更高級。 默認 Banner Spring Boot 內置了一個默認…

魅族“換血”出牌:手機基本盤站不穩,想靠AI和汽車“改命”

撰稿|何威 來源|貝多財經 被吉利收購后&#xff0c;魅族逐漸轉向在AI領域躬身耕作。 自2024年2月以“All in AI”正式宣告轉型、喊出不再推出傳統智能手機的豪言開始&#xff0c;這家曾以設計見長的手機廠商&#xff0c;將下半場押注在AI終端、AR眼鏡與智能座艙系統上&#…

力扣熱題100之將有序數組轉換為二叉搜索樹

題目 給你一個整數數組 nums &#xff0c;其中元素已經按 升序 排列&#xff0c;請你將其轉換為一棵 平衡 二叉搜索樹。 代碼 使用遞歸的方法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # s…

mac隱藏文件現身快捷鍵

在 macOS 系統中&#xff0c;?顯示/隱藏隱藏文件? 有兩種常用方法&#xff0c;以下是詳細說明&#xff1a; ? 方法一&#xff1a;使用快捷鍵&#xff08;最簡單&#xff09; 打開 ?訪達&#xff08;Finder&#xff09;?。 進入任意文件夾&#xff08;如桌面或文檔&#x…

IAR Workspace 中 Debug 與 Release 配置的深度解析

IAR Workspace 中 Debug 與 Release 配置的深度解析 一、配置的本質區別 1. 核心目標對比 特性Debug 配置Release 配置優化目標調試友好性性能/尺寸優化代碼優化無或低優化 (-O0/-O1)高級優化 (-O2/-O3/-Oz)調試信息包含完整符號信息無或最小化符號斷言檢查啟用通常禁用輸出…

Ubuntu下安裝python3

一、下載python3源碼 以要安裝的是python3.13.5為例&#xff0c;在 Index of /ftp/python/3.13.5/ 下載Python-3.13.5.tgz&#xff1a; 將壓縮包上傳到Ubuntu系統中&#xff0c;解壓&#xff1a; tar -zxvf Python-3.13.5.tgz 二、安裝 進入解壓后的源碼目錄&#xff1a; c…

計算機基礎和Java編程的練習題

1. 計算機的核心硬件是什么&#xff1f;各自有什么用&#xff1f; 中央處理器&#xff08;CPU&#xff09;&#xff1a;負責執行程序中的指令&#xff0c;進行算術和邏輯運算&#xff0c;是計算機的“大腦”。 內存&#xff08;RAM&#xff09;&#xff1a;臨時存儲CPU正在處…

橋頭守望者

趙阿姨在324國道邊的便利店守了八年柜臺&#xff0c;她的記賬本里藏著特殊的日歷——那些標著KLN字母的運輸單據總在固定日期出現&#xff0c;精確得像是節氣。"比氣象臺還準"&#xff0c;她指著玻璃窗上凝結的水珠說。去年寒潮來襲時&#xff0c;她親眼看見送貨員小…

C語言函數的參數傳遞和C++函數的參數傳遞

文章目錄 C語言值傳遞地址傳遞 C引用傳遞 C語言 值傳遞 這種方式使用變量、數組元素作為函數參數&#xff0c;實際是將實參的值復制到形參相應的存儲單元中&#xff0c;即形參和實參分別占用不同的存儲單元&#xff0c;這種傳遞方式稱為“參數的值傳遞”。在調用結束后&#…

設計模式-三大工廠

工廠模式有三種&#xff0c;分別是簡單工廠模式、工廠方法模式、抽象工廠模式。三種模式從前到后越來越抽象&#xff0c;也更具有一般性。 設計模式 優點 缺點 簡單工廠 1.實現了對責任的分割&#xff0c;它提供了專門的工廠類用于創建對象。 1.違背了開閉原則。 2.使用了…

在 AI 工具海洋中掌舵:Cherry Studio 如何成為你的統一指揮中心

01 被 AI 工具包圍的知識工作者現狀 在這個 AI 爆發的時代&#xff0c;知識工作者的工具庫正經歷前所未有的擴容。以我為例&#xff0c;按平臺類型梳理日常使用的 AI 工具&#xff0c;已然形成三層矩陣&#xff1a; 「云端智能助手」&#xff1a;Kimi、豆包、ChatGPT、Gemini…

Java 線程池技術深度解析與代碼實戰

為什么線程池總在深夜崩潰&#xff1f; 昨天我這項目又經歷了一次爆破——路由推送服務突然崩潰&#xff0c;排查發現線程池隊列堆積了幾萬任務直接把內存撐爆。早上起來看見人都麻了&#xff0c;線程池用不好&#xff0c;分分鐘變系統炸彈。今天我們就來系統梳理線程池的實戰…

Gradio可視化構建聊天機器人

Gradio是一個Python庫&#xff0c;專門用于快速構建和部署機器學習模型的Web界面。它的名字來源于"Gradient"&#xff08;梯度&#xff09;&#xff0c;最初是為了讓機器學習開發者能夠快速展示他們的模型而設計的。 1. Gradio是什么&#xff1f; 核心概念 快速原…

selenium如何識別條形驗證碼,自動輸入驗證碼

在自動化測試或網頁爬取中&#xff0c;識別驗證碼是常見的難點。Selenium 本身不具備直接識別驗證碼的能力&#xff0c;但可以通過結合第三方工具、OCR 技術或人工介入等方式解決。以下是多種可行方案的詳細實現思路及代碼示例&#xff1a; 一、方案一&#xff1a;使用第三方驗…

SAP將指定EXCEL工作SHEET的數據上傳到內表

SAP將指定EXCEL工作SHEET的數據上傳到內表 本文描述了一個SAP ABAP類方法upload_excel_2internaltab&#xff0c;用于將Excel文件數據上傳到內部表。主要功能包括&#xff1a; 驗證Excel行列范圍有效性&#xff0c;若起始值大于結束值則拋出異常檢查文件是否存在&#xff0c;支…

Spring Boot(九十三):Springboot 整合cfx實現webservice接口

1 服務端 最近項目改造,有一些老項目接口協議是webservice soap1.1,這就需要我們提供webservice服務接口。在Spring Boot中整合CFX(CXF框架)以實現Web服務客戶端與服務端的功能,可以分為幾個步驟。下面我將詳細介紹如何在Spring Boot中設置一個Web服務端點,使用Apache CX…

Triton server的部署、構建、backend插件機制整體介紹

目錄 0 引言 1 什么是Trition inference server 2 Trition inference server部署 2.1 下載server 2.2 下載模型 2.3 實驗 3 triton inference server的構建 3.1 build時候需要哪些repo 3.2 構建過程做了什么 3.3 構建體驗 4 閱讀readme整體了解下backend機制 4.1 什…

Paimon在各大公司生產實踐和優化總結

這是一篇匯總和個人學習文章&#xff0c;主要目的是總結一下Paimon在各大公司的落地做一個學習筆記。 本文的主要內容是關于Paimon在各大公司包括Vivo、Shopee、阿里、抖音等公司的落地實踐&#xff0c;文末有文章來源地址&#xff0c;內容大概分為幾個部分&#xff1a; 1.引…

簡析自動駕駛產業鏈及其核心技術體系

一、自動駕駛產業鏈 自動駕駛產業鏈可以細分為感知層、決策層、執行層以及通信層等多個環節。上游部分主要包括提供環境感知所需的各種傳感器&#xff08;如激光雷達、毫米波雷達、攝像頭等&#xff09;、高精度地圖服務、定位系統以及其他相關硬件設備&#xff1b;中游涵蓋了…

第一節 布局與盒模型-Flex與Grid布局對比

一、核心特性對比?? 1. ??布局維度?? ??Flex 布局??&#xff1a; ??一維布局??&#xff1a;僅支持單方向&#xff08;水平或垂直&#xff09;的排列&#xff0c;通過 flex-direction 控制主軸方向&#xff08;row 或 column&#xff09;。??適用場景??&…