Spring AI ectorStore的使用流程
Spring AI中的VectorStore是一種用于存儲(chǔ)和檢索高維向量數(shù)據(jù)的數(shù)據(jù)庫(kù)或存儲(chǔ)解決方案,它在AI應(yīng)用中扮演著至關(guān)重要的角色。以下是對(duì)Spring AI VectorStore的詳細(xì)解析:
一、VectorStore的基本概念
定義:VectorStore特別適用于處理那些經(jīng)過(guò)嵌入模型轉(zhuǎn)化后的數(shù)據(jù)。在VectorStore中,查詢與傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)不同,它執(zhí)行的是相似性搜索,而非精確匹配。當(dāng)給定向量作為查詢時(shí),它會(huì)返回與查詢向量“相似”的向量。
應(yīng)用場(chǎng)景:VectorStore主要用于將數(shù)據(jù)與AI模型集成。它存儲(chǔ)并支持對(duì)這些向量的相似性搜索,為AI模型提供豐富的上下文信息,從而實(shí)現(xiàn)更精確、更智能的回復(fù)。這種技術(shù)被稱為檢索增強(qiáng)生成(Retrieval Augmented Generation,RAG)。
二、VectorStore的核心接口
Spring AI框架通過(guò)VectorStore接口為向量數(shù)據(jù)庫(kù)交互提供了抽象化的API。VectorStore接口定義了以下核心操作:
- 添加文檔:void add(List documents),將文檔添加到向量數(shù)據(jù)庫(kù)中。
- 刪除文檔:Optional delete(List idList),從向量數(shù)據(jù)庫(kù)中刪除指定ID的文檔。
- 相似性搜索:
- List similaritySearch(String query),根據(jù)查詢字符串進(jìn)行相似性搜索,返回相似的文檔列表。
- List similaritySearch(SearchRequest request),根據(jù)SearchRequest對(duì)象進(jìn)行更復(fù)雜的相似性搜索。其中,SearchRequest對(duì)象允許開發(fā)者微調(diào)相似性搜索的參數(shù),如指定要返回的相似文檔的最大數(shù)量(topK)、相似度閾值(threshold)以及基于元數(shù)據(jù)的過(guò)濾表達(dá)式(filterExpression)。
三、VectorStore的使用流程
- 數(shù)據(jù)準(zhǔn)備:在將文檔存儲(chǔ)到向量數(shù)據(jù)庫(kù)之前,需要先將文檔內(nèi)容轉(zhuǎn)換為向量嵌入。Spring AI框架支持多種嵌入模型,如Word2Vec、GLoVE、BERT以及OpenAI的text-embedding-ada-002等。開發(fā)者可以根據(jù)自己的需求選擇合適的嵌入模型。
- 文檔嵌入:利用Spring AI框架提供的EmbeddingClient將文檔轉(zhuǎn)換為向量嵌入。存儲(chǔ)到VectorStore:將轉(zhuǎn)換后的向量嵌入存儲(chǔ)到VectorStore中。
- 相似性搜索:當(dāng)用戶發(fā)起查詢時(shí),Spring AI框架會(huì)自動(dòng)將查詢字符串轉(zhuǎn)換為向量,并在VectorStore中執(zhí)行相似性搜索,返回與查詢向量最相似的文檔列表。
- AI模型處理:將這些相似的文檔作為用戶問(wèn)題的上下文信息,與用戶的查詢一起發(fā)送到AI模型中進(jìn)行處理,從而實(shí)現(xiàn)更精確、更智能的回復(fù)。
四、Spring AI與VectorStore的集成案例
以基于Spring AI框架的聊天機(jī)器人項(xiàng)目為例,該項(xiàng)目需要實(shí)現(xiàn)根據(jù)用戶提供的文檔數(shù)據(jù)進(jìn)行回復(fù)的功能。由于對(duì)話有最大Token的限制,無(wú)法直接將所有的數(shù)據(jù)發(fā)給AI模型進(jìn)行處理。因此,決定采用數(shù)據(jù)向量化的方式,將文檔數(shù)據(jù)存儲(chǔ)到VectorStore中,并在用戶發(fā)起對(duì)話之前從VectorStore中檢索一組相似的文檔作為上下文信息。具體實(shí)現(xiàn)步驟如下:
- 引入依賴:在項(xiàng)目的pom.xml文件中引入Spring AI框架以及向量數(shù)據(jù)庫(kù)相關(guān)的依賴。
- 配置VectorStore:在application.properties或application.yml文件中配置VectorStore的連接信息以及嵌入模型等參數(shù)。
- 創(chuàng)建文檔嵌入服務(wù):利用Spring AI框架提供的EmbeddingClient將文檔轉(zhuǎn)換為向量嵌入,并存儲(chǔ)到VectorStore中。
- 實(shí)現(xiàn)相似性搜索:在用戶發(fā)起對(duì)話之前,從VectorStore中檢索一組相似的文檔作為上下文信息。
- 整合AI模型:將檢索到的上下文信息與用戶的查詢一起發(fā)送到AI模型中進(jìn)行處理,并返回處理結(jié)果給用戶。
五、VectorStore&ES8
1、添加依賴
首先,在Spring Boot項(xiàng)目的構(gòu)建文件中(如pom.xml對(duì)于Maven項(xiàng)目,或build.gradle對(duì)于Gradle項(xiàng)目)添加Elasticsearch客戶端的依賴。由于Spring AI框架可能不直接支持Elasticsearch作為VectorStore,需要使用Elasticsearch的Java客戶端庫(kù)來(lái)與Elasticsearch進(jìn)行交互。
<!-- Maven 示例 --> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-elasticsearch-store</artifactId> <version>${spring-ai.version}</version> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-elasticsearch-store-spring-boot-starter</artifactId> <version>${spring-ai.version}</version> </dependency>
2、配置Elasticsearch連接
在Spring Boot的配置文件中(如application.properties或application.yml),配置Elasticsearch的連接信息,包括集群地址、端口和可能的認(rèn)證信息。
spring: profiles: active: druid elasticsearch: uris: http://127.0.0.1:9200/ #請(qǐng)改成自己的路徑 ai: ollama: base-url: http://localhost:11434 embedding: model: llama3.2 vectorstore: elasticsearch: initialize-schema: true #請(qǐng)不要修改此配置 index-name: zixiai #這是 zixiai 默認(rèn)的索引,請(qǐng)不要修改或刪除 dimensions: 2048 #不要修改這個(gè)配置,與具體大模型本身的維度參數(shù)有關(guān)系 similarity: cosine batching-strategy: TOKEN_COUNT
3、業(yè)務(wù)代碼
@Override public String embed(String msg, Set<String> fileIds) { log.debug("embedding... {}", msg); Set<String> finalFileIds = (fileIds == null) ? new HashSet<>() : fileIds; List<Document> st = vectorStore.similaritySearch(SearchRequest.builder().query(msg).topK(5).build()); // .similaritySearch(SearchRequest.query(msg).withTopK(5)); // 首先查詢向量庫(kù) String promptContent = null; if (!CollectionUtils.isEmpty(st)) { promptContent = st.stream() .filter(doc -> { if (CollectionUtils.isEmpty(finalFileIds)) { return true; } Object fileIdObject = doc.getMetadata().get("file_id"); String docFileId = fileIdObject != null ? fileIdObject.toString() : null; return finalFileIds.contains(docFileId); }) .map(Document::getText) .filter(StringUtils::hasText) .collect(Collectors.joining(" ")); } // 確保 promptContent 不為空 if (!StringUtils.hasText(promptContent)) { promptContent = "No information found in the database."; } log.debug("Prompt content: {}", promptContent); return chatClient .prompt(promptContent) .user(msg) .call() .content(); }
詳細(xì)樣例代碼:樣例
綜上所述,Spring AI中的
VectorStore為開發(fā)者提供了高效、靈活的向量數(shù)據(jù)存儲(chǔ)與檢索解決方案。通過(guò)集成VectorStore,開發(fā)者可以輕松實(shí)現(xiàn)AI應(yīng)用中的相似性搜索功能,從而提升應(yīng)用的智能化水平和用戶體驗(yàn)。
到此這篇關(guān)于Spring AI ectorStore的文章就介紹到這了,更多相關(guān)Spring AI ectorStore內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java static方法用法實(shí)戰(zhàn)案例總結(jié)
這篇文章主要介紹了Java static方法用法,結(jié)合具體案例形式總結(jié)分析了java static方法功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-09-09Java基礎(chǔ)學(xué)習(xí)之運(yùn)算符相關(guān)知識(shí)總結(jié)
今天帶大家復(fù)習(xí)Java基礎(chǔ)知識(shí),文中對(duì)Java運(yùn)算符相關(guān)知識(shí)作了詳細(xì)總結(jié),對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05Java實(shí)現(xiàn)動(dòng)物換位游戲完整?過(guò)程詳解
大家好,今天嘗試用Java編程設(shè)計(jì)一個(gè)GUI界面的動(dòng)物換位游戲,游戲的結(jié)果是讓左右兩組的動(dòng)物交換位置,以下是具體設(shè)計(jì)過(guò)程,供大家參考2022-07-07MyBatis詳解如何實(shí)現(xiàn)Dao層接口
MyBatis允許只聲明一個(gè)dao接口,而無(wú)需寫dao實(shí)現(xiàn)類的方式實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作。前提是必須保證Mapper文件中的<mapper>標(biāo)簽的namespace屬性值必須要和dao接口的類路徑一致,MyBatis容器會(huì)自動(dòng)通過(guò)動(dòng)態(tài)代理生成接口的實(shí)現(xiàn)類2022-04-04Springboot實(shí)現(xiàn)WebMvcConfigurer接口定制mvc配置詳解
這篇文章主要介紹了Springboot實(shí)現(xiàn)WebMvcConfigurer接口定制mvc配置詳解,spring?boot拋棄了傳統(tǒng)xml配置文件,通過(guò)配置類(標(biāo)注@Configuration的類,@Configuration配置類相當(dāng)于一個(gè)xml配置文件)以JavaBean形式進(jìn)行相關(guān)配置,需要的朋友可以參考下2023-09-09SpringBoot3整合WebSocket詳細(xì)指南
SpringBoot 3 整合 WebSocket 提供了一種高效的實(shí)時(shí)通信解決方案,通過(guò)本文的配置和示例,可以快速實(shí)現(xiàn),感興趣的哦朋友跟隨小編一起看看吧2024-12-12在springboot中添加mvc功能的正確姿勢(shì)講解
這篇文章主要介紹了在springboot中添加mvc功能的正確姿勢(shì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08