Spring AI ectorStore
Spring AI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析:
一、VectorStore的基本概念
- 定义:VectorStore特别适用于处理那些经过嵌入模型转化后的数据。在VectorStore中,查询与传统关系数据库不同,它执行的是相似性搜索,而非精确匹配。当给定向量作为查询时,它会返回与查询向量“相似”的向量。
- 应用场景:VectorStore主要用于将数据与AI模型集成。它存储并支持对这些向量的相似性搜索,为AI模型提供丰富的上下文信息,从而实现更精确、更智能的回复。这种技术被称为检索增强生成(Retrieval Augmented Generation,RAG)。
二、VectorStore的核心接口
Spring AI框架通过VectorStore接口为向量数据库交互提供了抽象化的API。VectorStore接口定义了以下核心操作:
- 添加文档:void add(List documents),将文档添加到向量数据库中。
- 删除文档:Optional delete(List idList),从向量数据库中删除指定ID的文档。
- 相似性搜索:
- List similaritySearch(String query),根据查询字符串进行相似性搜索,返回相似的文档列表。
- List similaritySearch(SearchRequest request),根据SearchRequest对象进行更复杂的相似性搜索。其中,SearchRequest对象允许开发者微调相似性搜索的参数,如指定要返回的相似文档的最大数量(topK)、相似度阈值(threshold)以及基于元数据的过滤表达式(filterExpression)。
三、VectorStore的使用流程
- 数据准备:在将文档存储到向量数据库之前,需要先将文档内容转换为向量嵌入。Spring AI框架支持多种嵌入模型,如Word2Vec、GLoVE、BERT以及OpenAI的text-embedding-ada-002等。开发者可以根据自己的需求选择合适的嵌入模型。
- 文档嵌入:利用Spring AI框架提供的EmbeddingClient将文档转换为向量嵌入。
- 存储到VectorStore:将转换后的向量嵌入存储到VectorStore中。
- 相似性搜索:当用户发起查询时,Spring AI框架会自动将查询字符串转换为向量,并在VectorStore中执行相似性搜索,返回与查询向量最相似的文档列表。
- AI模型处理:将这些相似的文档作为用户问题的上下文信息,与用户的查询一起发送到AI模型中进行处理,从而实现更精确、更智能的回复。
四、Spring AI与VectorStore的集成案例
以基于Spring AI框架的聊天机器人项目为例,该项目需要实现根据用户提供的文档数据进行回复的功能。由于对话有最大Token的限制,无法直接将所有的数据发给AI模型进行处理。因此,决定采用数据向量化的方式,将文档数据存储到VectorStore中,并在用户发起对话之前从VectorStore中检索一组相似的文档作为上下文信息。具体实现步骤如下:
- 引入依赖:在项目的pom.xml文件中引入Spring AI框架以及向量数据库相关的依赖。
- 配置VectorStore:在application.properties或application.yml文件中配置VectorStore的连接信息以及嵌入模型等参数。
- 创建文档嵌入服务:利用Spring AI框架提供的EmbeddingClient将文档转换为向量嵌入,并存储到VectorStore中。
- 实现相似性搜索:在用户发起对话之前,从VectorStore中检索一组相似的文档作为上下文信息。
- 整合AI模型:将检索到的上下文信息与用户的查询一起发送到AI模型中进行处理,并返回处理结果给用户。
五、VectorStore&ES8
1、添加依赖
首先,在Spring Boot项目的构建文件中(如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: druidelasticsearch:uris: http://127.0.0.1:9200/ #请改成自己的路径ai:ollama:base-url: http://localhost:11434embedding:model: llama3.2vectorstore:elasticsearch:initialize-schema: true #请不要修改此配置index-name: zixiai #这是 zixiai 默认的索引,请不要修改或删除dimensions: 2048 #不要修改这个配置,与具体大模型本身的维度参数有关系similarity: cosinebatching-strategy: TOKEN_COUNT
3、业务代码
@Overridepublic 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为开发者提供了高效、灵活的向量数据存储与检索解决方案。通过集成VectorStore,开发者可以轻松实现AI应用中的相似性搜索功能,从而提升应用的智能化水平和用户体验。
相关文章:
Spring AI ectorStore
Spring AI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析: 一、VectorStore的基本概念 定义:VectorStore特别适用于处理那些经过嵌入…...
zig 安装,Hello World 示例
1. 安装 Zig 首先,你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后,你可以在终端中运行以下命令来检查 Zig 是否安装成功: zig version如果一切正常,它会显示 Zig 的版本信…...
龙蜥Linux系统部署docker21.1.3版本
龙蜥系统配置docker环境 更新yum源 更新软件源中的包。 yum update安装底层工具 yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云仓库 # 添加阿里云的docker镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/c…...
django解决跨域问题
# 1.安装django-cors-headers 库 pip install django-cors-headers -i https://pypi.tuna.tsinghua.edu.cn/simple2.添加到应用程序中 添加 corsheaders 到你的 INSTALLED_APPS 设置中: INSTALLED_APPS [...corsheaders,... ]3.添加中间件 MIDDLEWARE [...cor…...
【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
目录 C++寻宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 五、运行结果 六、考点分析 七、推荐资料 C++寻宝石 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 有N(1<N<100)个盒子排成一排,每个盒子都放…...
Git 从入门到精通
一、环境配置 下载地址:https://git-scm.com/downloads/ 二、用户配置 找到git bash git --version 查看当前版本 git config --global user.name szhipeng625 设置用户名 git config --global user.email szhipeng625gmail.com 设置邮箱 git config --global …...
vue3使用vue3-video-play播放m3u8视频
1.安装vue3-video-play npm install vue3-video-play --save2.在组件中使用 import vue3-video-play/dist/style.css; import VideoPlay from vue3-video-play;// 视频配置项 const options reactive({src: https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8, //视频源mute…...
使用API有效率地管理Dynadot域名,为文件夹中的域名统一设置电子邮件转发
关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...
Java虚拟机(Java Virtual Machine,JVM)
一、Java 虚拟机 Java 虚拟机(Java Virtual Machine, JVM)是运行 Java 字节码的虚拟机。它是Java平台的核心组件之一,使得Java程序具有 一次编写,到处运行(Write Once, Run Anywhere) 的特性。 JVM 有针对…...
[免费]微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序(高校就业)招聘系统(Springboot后端Vue管理端),分享下哈。 项目视频演示 【免费】微信小程序(高校就业)招聘系统(Springboot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…...
TCP Analysis Flags 之 TCP Retransmission
前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…...
#Phi-4:微软 14B 参数开源模型,性能匹敌 OpenAI GPT-4o-mini,现已登陆 Ollama
Phi-4:微软 14B 参数开源模型,性能匹敌 OpenAI GPT-4o-mini,现已登陆 Ollama 一、Phi-4 模型概述 (一)模型参数与规模 Phi-4 是微软推出的一款小型语言模型,拥有 140 亿参数。虽然参数量相对较小…...
JSON头文件调用
除了传统的读写操作,现在流行的json文件读取保存,还是非常方便的. 头文件放在源代码中,在调用处添加引用路径 #include “…/ConsoleApplication1/include/json.hpp” using json nlohmann::json; 数据结构例子: // 声明Person类 class Person { public: std::string name; i…...
Swagger学习⑭——@Contact注解
介绍 Contact 是 Swagger/OpenAPI 3.0 注解中的一个注解,用于定义 API 文档中的联系信息。通过 Contact 注解,你可以指定 API 维护者的联系方式,例如电子邮件、URL 或名称等。 源代码 package io.swagger.v3.oas.annotations.info;import …...
如何监听Vuex数据的变化?
使用watch方法监听Vuex state的变化: // 在 Vue 组件中 this.$store.watch((state) > state.someState,(newValue, oldValue) > {console.log(someState changed from, oldValue, to, newValue);} );使用subscribe方法监听mutation的变化: // 在…...
Redis 优化秒杀(异步秒杀)
目录 为什么需要异步秒杀 异步优化的核心逻辑是什么? 阻塞队列的特点是什么? Lua脚本在这里的作用是什么? 异步调用创建订单的具体逻辑是什么? 为什么要用代理对象proxy调用createVoucherOrder方法? 对于代码的详细…...
前端中常用的单位度量(px,rpx,rem,em,vw,vh)+图片自适应
文章目录 前端中常用的单位度量vw/vh 的场景应用px/rem/em 之间的转换关系项目中的rem 应用根元素 font-size 设置为16px 的应用惯例自适应之图片应用1. 使用 max-width 和 max-height2. 使用 object-fit 属性3. 使用 background-image 模拟图片展示 前端中常用的单位度量 px&…...
STM32之一种双通路CAN总线消息备份冗余处理方法(十三)
STM32F407 系列文章 - Dual-CANBus-ProMethod(十三) 目录 前言 一、现状分析 二、解决思路 1.应用场景网络结构图 2.数据发送流程 3.数据接收流程 4.用到的模块 1.CAN网络速率及时间片分配 2.CAN网络消息ID组成 3.设备节点定义 4.数据格式说明…...
从零开始:使用VSCode搭建Python数据科学开发环境
引言 在数据科学领域,一个高效、稳定的开发环境是成功的关键。本文将详细介绍如何使用Visual Studio Code搭建一个完整的Python数据科学开发环境。通过本指南,您将学会: 安装和配置VSCode,包括基本设置和快捷键配置设置Python开…...
C#语言的字符串处理
C#语言的字符串处理 引言 在现代编程中,字符串处理是一项重要的技能,几乎在所有编程语言中都有应用。C#语言作为一种强类型的、面向对象的编程语言,提供了丰富的字符串处理功能。这使得开发人员能够方便地进行文本操作,比如字符…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
