SpringAI系列---【SpringA集成OllamaI如何先調用向量庫,再把查到的結果一起傳給大模型?】

SpringAI如何先調用向量庫,再把查到的結果一起傳給大模型?

1.引入pom

<dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-ollama</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-vector-store</artifactId></dependency><!--向量模型接入chatClient時引入--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-advisors-vector-store</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0</version><type>pom</type><scope>import</scope><!-- import 是一個特殊的作用域,它只能與 <type>pom</type> 結合使用,并且只能在 <dependencyManagement> 部分中使用。當使用 <scope>import</scope> 時,它會導入指定 POM 的 <dependencyManagement> 部分的所有依賴聲明到當前項目中,實現依賴版本的集中管理。 --></dependency></dependencies></dependencyManagement>

2.配置yml

spring:ai:ollama:base-url: http://localhost:11434embedding:options:model: nomic-embed-textchat:options:model: qwen3:8btemperature: 0.7
logging:level:#查看Rag查到的內容以及給大模型傳遞的內容org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor: debug

3.Vector的使用測試類

package com.ai.fast.vectorStore;import org.junit.jupiter.api.Test;
import org.springframework.ai.document.Document;
import org.springframework.ai.ollama.OllamaEmbeddingModel;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;import java.util.List;@SpringBootTest
public class VectorStoreTest {/*** 向量數據庫* 1.SimpleVectorStore:適用于簡單的向量數據庫場景,例如:本地向量數據庫、學習使用。* 2.MilvusVectorStore:比較流行的向量數據庫,支持分布式、高可用、海量數據存儲。* 3.ElasticsearchVectorStore: 如果項目中有es可以考慮使用。*/@TestConfigurationstatic class TestConfig {@Beanpublic VectorStore vectorStore(OllamaEmbeddingModel embeddingModel) {return SimpleVectorStore.builder(embeddingModel).build();}}@Testpublic void testEmbedding(@Autowired OllamaEmbeddingModel embeddingModel) {float[] embedding = embeddingModel.embed("hello world");System.out.println("默認維度為:"+embedding.length);}@Testpublic void testVectorStore(@Autowired VectorStore vectorStore) {Document document1 = Document.builder().text("""預訂航班:- 通過我們的網站或移動應用程序預訂。- 預訂時需要全額付款。- 確保個人信息(姓名、ID等)的準確性,因為更正可能會產生25的費用。""").build();Document document2 = Document.builder().text("""取消預訂:- 最晚在航班起飛前48小時取消。- 取消費用:經濟艙75美元,豪華經濟艙50美元,商務艙25美元。- 退款將在7個工作日內處理。""").build();//存儲向量(內部會自動向量化)vectorStore.add(List.of(document1, document2));//簡單查詢
//        List<Document> similaritySearch = vectorStore.similaritySearch("退票");
//        for (Document search : similaritySearch) {
//            System.out.println(search.getText());
//            System.out.println(search.getScore());
//        }//高級查詢SearchRequest searchRequest = SearchRequest.builder().query("退票").topK(5).similarityThreshold(0.5).build();List<Document> documents = vectorStore.similaritySearch(searchRequest);for (Document document : documents) {System.out.println(document.getText());System.out.println(document.getScore());}}
}

4.Vector接入ChatClient測試類

package com.ai.fast.vectorStore;import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.client.advisor.vectorstore.QuestionAnswerAdvisor;
import org.springframework.ai.document.Document;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.ai.ollama.OllamaEmbeddingModel;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;import java.util.List;@SpringBootTest
public class PlusChatClient {@BeforeEachpublic void init(@Autowired VectorStore vectorStore) {Document document1 = Document.builder().text("""預訂航班:- 通過我們的網站或移動應用程序預訂。- 預訂時需要全額付款。- 確保個人信息(姓名、ID等)的準確性,因為更正可能會產生25的費用。""").build();Document document2 = Document.builder().text("""取消預訂:- 最晚在航班起飛前48小時取消。- 取消費用:經濟艙75美元,豪華經濟艙50美元,商務艙25美元。- 退款將在7個工作日內處理。""").build();//存儲向量(內部會自動向量化)vectorStore.add(List.of(document1, document2));}@TestConfigurationstatic class TestConfig {@Beanpublic VectorStore vectorStore(OllamaEmbeddingModel embeddingModel) {return SimpleVectorStore.builder(embeddingModel).build();}}/*** RAG:SpringAI先調用存儲向量,再調用模型進行問答** @param vectorStore* @param chatModel*/@Testpublic void testRag(@Autowired VectorStore vectorStore,@Autowired OllamaChatModel chatModel) {ChatClient chatClient = ChatClient.builder(chatModel).build();String content = chatClient.prompt().system("你是一個智能助手").user("退票多少錢").advisors(SimpleLoggerAdvisor.builder().build(),QuestionAnswerAdvisor.builder(vectorStore).searchRequest(SearchRequest.builder().query("退票多少錢").topK(5).similarityThreshold(0.5).build()).build()).call().content();System.out.println(content);}
}

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

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

相關文章

告別“測試滯后”:AI實時測試工具在敏捷開發中的落地經驗

告別“測試滯后”&#xff1a;AI實時測試工具在敏捷開發中的落地經驗 在敏捷開發的“快速迭代”節奏中&#xff0c;測試環節常常成為“拖后腿”的短板。某互聯網公司的敏捷團隊曾陷入這樣的循環&#xff1a;2周迭代周期中&#xff0c;開發用10天完成功能&#xff0c;留給測試的…

K8S-Pod資源對象

一、K8S架構與組件1、K8S架構k8s 總體架構采用了經典的 maste/slave 架構模式&#xff0c;分 master 節點和 worker 節點&#xff0c;節點可以是虛擬機也可以是物理機。K8S組件 master 節點組件Kube-apiserver 用于暴露 Kubernetes API&#xff0c;任何資源請求或調用操作都是通…

PyTorch API 5

文章目錄torch.compiler延伸閱讀torch.fft快速傅里葉變換輔助函數torch.func什么是可組合的函數變換&#xff1f;為什么需要可組合的函數變換&#xff1f;延伸閱讀torch.futurestorch.fx概述編寫轉換函數圖結構快速入門圖操作直接操作計算圖使用 replace_pattern() 進行子圖重寫…

基于決策樹模型的汽車價格預測分析

一、整體流程概覽這份代碼實現了一個完整的機器學習預測流程&#xff0c;核心目標是通過汽車的各項特征預測其價格。整體流程分為 6 個主要步驟&#xff1a;模擬生成汽車數據集&#xff08;含價格標簽&#xff09;數據預處理&#xff08;清洗、編碼、特征選擇&#xff09;探索性…

0基礎安卓逆向原理與實踐:第2章:編程基礎與工具鏈

第2章:編程基礎與工具鏈 2.1 Java編程基礎 2.1.1 Java語言特性 Java是安卓應用開發的主要語言,具有以下核心特性: mindmaproot((Java特性))面向對象封裝繼承多態抽象平臺無關字節碼JVM一次編譯到處運行內存管理自動垃圾回收堆棧管理引用類型安全性字節碼驗證安全管理器訪…

深入理解JVM內存結構:從字節碼執行到垃圾回收的全景解析

&#x1f9e0; 深入理解JVM內存結構&#xff1a;從字節碼執行到垃圾回收的全景解析 #JVM內存模型 #Java性能優化 #垃圾回收機制 #并發編程一、JVM內存結構全景圖二、線程共享區域詳解 2.1 堆&#xff08;Heap&#xff09;—— 對象生存的宇宙 存儲內容&#xff1a; 所有new創建…

用 C++ 構建高性能測試框架:從原型到生產實戰指南

用 C 構建高性能測試框架&#xff1a;從原型到生產實戰指南 ?C 測試框架的關鍵價值?&#xff1a;當你的測試需要每秒處理百萬級交易&#xff0c;微秒級延遲要求已成為常態時&#xff0c;Python GC 的暫停便是不可接受的奢侈。 本文將深入探討如何用 C 構建兼具靈活性和高性能…

【C語言16天強化訓練】從基礎入門到進階:Day 4

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題、洛谷刷題、C/C基礎知識知識強化補充、C/C干貨分享&學習過程記錄 &#x1f349;學習方向&#xff1a;C/C方向 ??人…

C語言:字符函數與字符串函數(1)

在編程的過程中&#xff0c;我們經常會遇到需要處理字符和字符串的情況&#xff0c;為了方便操作字符和字符串&#xff0c;C語言標準庫中提供了一系列庫函數&#xff0c;接下來我們就學習一下這些函數。 目錄 1. 字符分類函數 2. 字母轉換函數 3. strlen函數的使用和模擬實現…

數據結構與算法系列(大白話模式)小學生起點(一)

出身&#xff0c;并不重要 &#xff01;&#xff01;&#xff01;&#xff01;只要有恒心&#xff0c;有毅力&#xff0c;肯于付出與學習&#xff0c;皆會取得相應的成就&#xff01;天道酬勤&#xff0c;天行健&#xff0c;君子當自強不息&#xff01;道可道&#xff0c;非常道…

計算機視覺第一課opencv(二)保姆級教學

目錄 簡介 一、邊界填充 1.函數說明 2.案例分析 二、圖像運算 1.號運算 2.cv2.add()函數 3.圖像加權運算 三、閾值處理 四、圖像平滑處理 1.椒鹽噪聲 2.均值濾波&#xff08;Mean Filtering&#xff09; 3.方框濾波 4. 高斯濾波&#xff08;Gaussian Filtering&am…

DINOv3

一、摘要 https://arxiv.org/pdf/2508.10104 自監督學習有望消除對人工數據標注的需求&#xff0c;使模型能夠輕松擴展到大規模數據集和更大規模的架構。由于不針對特定任務或領域進行定制&#xff0c;這種訓練范式具有從各種來源學習視覺表示的潛力&#xff0c;能夠使用單一…

??pytest+yaml+allure接口自動化測試框架

高薪必備&#xff01;18K接口自動化測試框架落地全流程&#xff5c;零基礎到實戰通關前言# 自動化測試&#xff0c;是目前測試行業一項比較普遍的測試技術了&#xff0c;之前的以UI自動化測試為主&#xff0c;現在的以接口自動化測試為主&#xff0c;無論技術更迭&#xff0c;…

LeetCode每日一題,2025-8-20

統計全為1的正方形子矩陣 這題是正方形&#xff0c;比較簡單 暴力就是二維前綴和。 或者用dp&#xff0c;dp[i][j]表示以i&#xff0c;j為右下角的最大正方形的邊長&#xff0c;它由(i-1,j),(i,j-1),(i-1,j-1)三者共同決定&#xff0c;通過找規律可知&#xff0c;由三個的最小值…

在Excel啟動時直接打開多個Excel文件

如果我們這段時間每天都要打開幾個相同的Excel文件開展工作&#xff0c;可以把這幾個文件放到一個文件夾&#xff08;如果原來就在不同的文件夾&#xff0c;就把快捷方式放到同一個文件夾&#xff09;&#xff0c;然后在Excel選項中設置啟動時打開這個文件夾中的文件即可。注&a…

對象存儲 COS 端到端質量系列 —— 終端網絡診斷工具

背景 在COS終端SDK的眾多功能中&#xff0c;文件上傳功能的使用頗為頻繁。鑒于此&#xff0c;提升文件上傳的成功率便顯得至關重要。眾多導致上傳失敗的因素里&#xff0c;由網絡問題引發的故障無疑是其中影響上傳成功率的關鍵因素之一&#xff0c;同時也是最難以把控的要素。…

Flask高效數據庫操作指南

Flask-SQLAlchemy 數據庫操作關于Flask數據庫Flask中沒有指定使用的數據庫&#xff0c;可以自由選擇不管你是使用關系型數據庫&#xff0c;還是非關系型數據庫都可以&#xff0c;不像django提供了orm 數據庫抽象層&#xff0c;可以直接采用對象的方式操作數據庫。但是為了開發效…

Camera相機人臉識別系列專題分析之十九:MTK ISP6S平臺FDNode原生代碼

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: 目錄 一、問題背景 二、MTK ISP6S平臺FDNodeImp.cpp 2.1:原生代碼

S32K3 的圖形化配置和EB配置mcal差異

32K3系列的圖形化配置工具&#xff08;如S32 Design Studio, S32DS&#xff09;與EB配置工具&#xff08;基于EB tresos Studio&#xff09;在配置MCAL&#xff08;Microcontroller Abstraction Layer&#xff09;時存在關鍵差異&#xff0c;主要體現在工具環境、配置流程、代碼…

Meta 再次重組人工智能部門

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…