Spring AI ectorStore的使用流程
Spring AI中的VectorStore是一種用于存儲和檢索高維向量數(shù)據(jù)的數(shù)據(jù)庫或存儲解決方案,它在AI應(yīng)用中扮演著至關(guān)重要的角色。以下是對Spring AI VectorStore的詳細(xì)解析:
一、VectorStore的基本概念
定義:VectorStore特別適用于處理那些經(jīng)過嵌入模型轉(zhuǎn)化后的數(shù)據(jù)。在VectorStore中,查詢與傳統(tǒng)關(guān)系數(shù)據(jù)庫不同,它執(zhí)行的是相似性搜索,而非精確匹配。當(dāng)給定向量作為查詢時,它會返回與查詢向量“相似”的向量。
應(yīng)用場景:VectorStore主要用于將數(shù)據(jù)與AI模型集成。它存儲并支持對這些向量的相似性搜索,為AI模型提供豐富的上下文信息,從而實現(xiàn)更精確、更智能的回復(fù)。這種技術(shù)被稱為檢索增強(qiáng)生成(Retrieval Augmented Generation,RAG)。
二、VectorStore的核心接口
Spring AI框架通過VectorStore接口為向量數(shù)據(jù)庫交互提供了抽象化的API。VectorStore接口定義了以下核心操作:
- 添加文檔:void add(List documents),將文檔添加到向量數(shù)據(jù)庫中。
- 刪除文檔:Optional delete(List idList),從向量數(shù)據(jù)庫中刪除指定ID的文檔。
- 相似性搜索:
- List similaritySearch(String query),根據(jù)查詢字符串進(jìn)行相似性搜索,返回相似的文檔列表。
- List similaritySearch(SearchRequest request),根據(jù)SearchRequest對象進(jìn)行更復(fù)雜的相似性搜索。其中,SearchRequest對象允許開發(fā)者微調(diào)相似性搜索的參數(shù),如指定要返回的相似文檔的最大數(shù)量(topK)、相似度閾值(threshold)以及基于元數(shù)據(jù)的過濾表達(dá)式(filterExpression)。
三、VectorStore的使用流程
- 數(shù)據(jù)準(zhǔn)備:在將文檔存儲到向量數(shù)據(jù)庫之前,需要先將文檔內(nèi)容轉(zhuǎn)換為向量嵌入。Spring AI框架支持多種嵌入模型,如Word2Vec、GLoVE、BERT以及OpenAI的text-embedding-ada-002等。開發(fā)者可以根據(jù)自己的需求選擇合適的嵌入模型。
- 文檔嵌入:利用Spring AI框架提供的EmbeddingClient將文檔轉(zhuǎn)換為向量嵌入。存儲到VectorStore:將轉(zhuǎn)換后的向量嵌入存儲到VectorStore中。
- 相似性搜索:當(dāng)用戶發(fā)起查詢時,Spring AI框架會自動將查詢字符串轉(zhuǎn)換為向量,并在VectorStore中執(zhí)行相似性搜索,返回與查詢向量最相似的文檔列表。
- AI模型處理:將這些相似的文檔作為用戶問題的上下文信息,與用戶的查詢一起發(fā)送到AI模型中進(jìn)行處理,從而實現(xiàn)更精確、更智能的回復(fù)。
四、Spring AI與VectorStore的集成案例
以基于Spring AI框架的聊天機(jī)器人項目為例,該項目需要實現(xiàn)根據(jù)用戶提供的文檔數(shù)據(jù)進(jìn)行回復(fù)的功能。由于對話有最大Token的限制,無法直接將所有的數(shù)據(jù)發(fā)給AI模型進(jìn)行處理。因此,決定采用數(shù)據(jù)向量化的方式,將文檔數(shù)據(jù)存儲到VectorStore中,并在用戶發(fā)起對話之前從VectorStore中檢索一組相似的文檔作為上下文信息。具體實現(xiàn)步驟如下:
- 引入依賴:在項目的pom.xml文件中引入Spring AI框架以及向量數(shù)據(jù)庫相關(guān)的依賴。
- 配置VectorStore:在application.properties或application.yml文件中配置VectorStore的連接信息以及嵌入模型等參數(shù)。
- 創(chuàng)建文檔嵌入服務(wù):利用Spring AI框架提供的EmbeddingClient將文檔轉(zhuǎn)換為向量嵌入,并存儲到VectorStore中。
- 實現(xiàn)相似性搜索:在用戶發(fā)起對話之前,從VectorStore中檢索一組相似的文檔作為上下文信息。
- 整合AI模型:將檢索到的上下文信息與用戶的查詢一起發(fā)送到AI模型中進(jìn)行處理,并返回處理結(jié)果給用戶。
五、VectorStore&ES8
1、添加依賴
首先,在Spring Boot項目的構(gòu)建文件中(如pom.xml對于Maven項目,或build.gradle對于Gradle項目)添加Elasticsearch客戶端的依賴。由于Spring AI框架可能不直接支持Elasticsearch作為VectorStore,需要使用Elasticsearch的Java客戶端庫來與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/ #請改成自己的路徑 ai: ollama: base-url: http://localhost:11434 embedding: model: llama3.2 vectorstore: elasticsearch: initialize-schema: true #請不要修改此配置 index-name: zixiai #這是 zixiai 默認(rèn)的索引,請不要修改或刪除 dimensions: 2048 #不要修改這個配置,與具體大模型本身的維度參數(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)); // 首先查詢向量庫 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ù)存儲與檢索解決方案。通過集成VectorStore,開發(fā)者可以輕松實現(xiàn)AI應(yīng)用中的相似性搜索功能,從而提升應(yīng)用的智能化水平和用戶體驗。
到此這篇關(guān)于Spring AI ectorStore的文章就介紹到這了,更多相關(guān)Spring AI ectorStore內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java static方法用法實戰(zhàn)案例總結(jié)
這篇文章主要介紹了Java static方法用法,結(jié)合具體案例形式總結(jié)分析了java static方法功能、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-09-09Java基礎(chǔ)學(xué)習(xí)之運(yùn)算符相關(guān)知識總結(jié)
今天帶大家復(fù)習(xí)Java基礎(chǔ)知識,文中對Java運(yùn)算符相關(guān)知識作了詳細(xì)總結(jié),對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05Springboot實現(xiàn)WebMvcConfigurer接口定制mvc配置詳解
這篇文章主要介紹了Springboot實現(xiàn)WebMvcConfigurer接口定制mvc配置詳解,spring?boot拋棄了傳統(tǒng)xml配置文件,通過配置類(標(biāo)注@Configuration的類,@Configuration配置類相當(dāng)于一個xml配置文件)以JavaBean形式進(jìn)行相關(guān)配置,需要的朋友可以參考下2023-09-09SpringBoot3整合WebSocket詳細(xì)指南
SpringBoot 3 整合 WebSocket 提供了一種高效的實時通信解決方案,通過本文的配置和示例,可以快速實現(xiàn),感興趣的哦朋友跟隨小編一起看看吧2024-12-12