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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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领…