Spring AI ectorStore的使用流程
Spring AI中的VectorStore是一種用于存儲和檢索高維向量數(shù)據(jù)的數(shù)據(jù)庫或存儲解決方案,它在AI應(yīng)用中扮演著至關(guān)重要的角色。以下是對Spring AI VectorStore的詳細解析:
一、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ù)被稱為檢索增強生成(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ù)查詢字符串進行相似性搜索,返回相似的文檔列表。
- List similaritySearch(SearchRequest request),根據(jù)SearchRequest對象進行更復(fù)雜的相似性搜索。其中,SearchRequest對象允許開發(fā)者微調(diào)相似性搜索的參數(shù),如指定要返回的相似文檔的最大數(shù)量(topK)、相似度閾值(threshold)以及基于元數(shù)據(jù)的過濾表達式(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模型中進行處理,從而實現(xiàn)更精確、更智能的回復(fù)。
四、Spring AI與VectorStore的集成案例
以基于Spring AI框架的聊天機器人項目為例,該項目需要實現(xiàn)根據(jù)用戶提供的文檔數(shù)據(jù)進行回復(fù)的功能。由于對話有最大Token的限制,無法直接將所有的數(shù)據(jù)發(fā)給AI模型進行處理。因此,決定采用數(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模型中進行處理,并返回處理結(jié)果給用戶。
五、VectorStore&ES8
1、添加依賴
首先,在Spring Boot項目的構(gòu)建文件中(如pom.xml對于Maven項目,或build.gradle對于Gradle項目)添加Elasticsearch客戶端的依賴。由于Spring AI框架可能不直接支持Elasticsearch作為VectorStore,需要使用Elasticsearch的Java客戶端庫來與Elasticsearch進行交互。
<!-- 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的連接信息,包括集群地址、端口和可能的認證信息。
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 默認的索引,請不要修改或刪除
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();
}詳細樣例代碼:樣例
綜上所述,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-09
Java基礎(chǔ)學(xué)習(xí)之運算符相關(guān)知識總結(jié)
今天帶大家復(fù)習(xí)Java基礎(chǔ)知識,文中對Java運算符相關(guān)知識作了詳細總結(jié),對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Springboot實現(xiàn)WebMvcConfigurer接口定制mvc配置詳解
這篇文章主要介紹了Springboot實現(xiàn)WebMvcConfigurer接口定制mvc配置詳解,spring?boot拋棄了傳統(tǒng)xml配置文件,通過配置類(標(biāo)注@Configuration的類,@Configuration配置類相當(dāng)于一個xml配置文件)以JavaBean形式進行相關(guān)配置,需要的朋友可以參考下2023-09-09

