欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring AI ectorStore的使用流程

 更新時(shí)間:2025年03月19日 14:11:27   作者:王小工  
SpringAI中的VectorStore是一種用于存儲(chǔ)和檢索高維向量數(shù)據(jù)的數(shù)據(jù)庫(kù)或存儲(chǔ)解決方案,它在AI應(yīng)用中發(fā)揮著至關(guān)重要的作用,本文給大家介紹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 對(duì)象拷貝是為對(duì)象賦值的一種方式,簡(jiǎn)單來(lái)說(shuō)就是創(chuàng)建一個(gè)和原對(duì)象相同的對(duì)象,新創(chuàng)建的對(duì)象是原對(duì)象的一個(gè)副本。面試官賊拉喜歡在面試的時(shí)候問(wèn)一問(wèn)你淺拷貝和深拷貝的原理
    2021-08-08
  • Java static方法用法實(shí)戰(zhàn)案例總結(jié)

    Java static方法用法實(shí)戰(zhàn)案例總結(jié)

    這篇文章主要介紹了Java static方法用法,結(jié)合具體案例形式總結(jié)分析了java static方法功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java基礎(chǔ)學(xué)習(xí)之運(yùn)算符相關(guān)知識(shí)總結(jié)

    Java基礎(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-05
  • Java實(shí)現(xiàn)動(dòng)物換位游戲完整?過(guò)程詳解

    Java實(shí)現(xiàn)動(dòng)物換位游戲完整?過(guò)程詳解

    大家好,今天嘗試用Java編程設(shè)計(jì)一個(gè)GUI界面的動(dòng)物換位游戲,游戲的結(jié)果是讓左右兩組的動(dòng)物交換位置,以下是具體設(shè)計(jì)過(guò)程,供大家參考
    2022-07-07
  • MyBatis詳解如何實(shí)現(xiàn)Dao層接口

    MyBatis詳解如何實(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-04
  • Springboot實(shí)現(xiàn)WebMvcConfigurer接口定制mvc配置詳解

    Springboot實(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-09
  • SpringBoot3整合WebSocket詳細(xì)指南

    SpringBoot3整合WebSocket詳細(xì)指南

    SpringBoot 3 整合 WebSocket 提供了一種高效的實(shí)時(shí)通信解決方案,通過(guò)本文的配置和示例,可以快速實(shí)現(xiàn),感興趣的哦朋友跟隨小編一起看看吧
    2024-12-12
  • Spring Cache原理解析

    Spring Cache原理解析

    Spring Cache是一個(gè)框架,它提供了基于注解的緩存功能,使得開發(fā)者可以很方便地將緩存集成到他們的應(yīng)用程序中,這篇文章主要介紹了Spring Cache原理解析,需要的朋友可以參考下
    2024-05-05
  • 在springboot中添加mvc功能的正確姿勢(shì)講解

    在springboot中添加mvc功能的正確姿勢(shì)講解

    這篇文章主要介紹了在springboot中添加mvc功能的正確姿勢(shì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 簡(jiǎn)單談?wù)刯ava自定義注解

    簡(jiǎn)單談?wù)刯ava自定義注解

    下面小編就為大家?guī)?lái)一篇簡(jiǎn)單談?wù)刯ava自定義注解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07

最新評(píng)論