当前位置: 首页 > news >正文

Spring AI ectorStore

Spring AI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析:

一、VectorStore的基本概念

  1. 定义:VectorStore特别适用于处理那些经过嵌入模型转化后的数据。在VectorStore中,查询与传统关系数据库不同,它执行的是相似性搜索,而非精确匹配。当给定向量作为查询时,它会返回与查询向量“相似”的向量。
  2. 应用场景:VectorStore主要用于将数据与AI模型集成。它存储并支持对这些向量的相似性搜索,为AI模型提供丰富的上下文信息,从而实现更精确、更智能的回复。这种技术被称为检索增强生成(Retrieval Augmented Generation,RAG)。

二、VectorStore的核心接口

Spring AI框架通过VectorStore接口为向量数据库交互提供了抽象化的API。VectorStore接口定义了以下核心操作:

  1. 添加文档:void add(List documents),将文档添加到向量数据库中。
  2. 删除文档:Optional delete(List idList),从向量数据库中删除指定ID的文档。
  3. 相似性搜索
    • List similaritySearch(String query),根据查询字符串进行相似性搜索,返回相似的文档列表。
    • List similaritySearch(SearchRequest request),根据SearchRequest对象进行更复杂的相似性搜索。其中,SearchRequest对象允许开发者微调相似性搜索的参数,如指定要返回的相似文档的最大数量(topK)、相似度阈值(threshold)以及基于元数据的过滤表达式(filterExpression)。

三、VectorStore的使用流程

  1. 数据准备:在将文档存储到向量数据库之前,需要先将文档内容转换为向量嵌入。Spring AI框架支持多种嵌入模型,如Word2Vec、GLoVE、BERT以及OpenAI的text-embedding-ada-002等。开发者可以根据自己的需求选择合适的嵌入模型。
  2. 文档嵌入:利用Spring AI框架提供的EmbeddingClient将文档转换为向量嵌入。
  3. 存储到VectorStore:将转换后的向量嵌入存储到VectorStore中。
  4. 相似性搜索:当用户发起查询时,Spring AI框架会自动将查询字符串转换为向量,并在VectorStore中执行相似性搜索,返回与查询向量最相似的文档列表。
  5. AI模型处理:将这些相似的文档作为用户问题的上下文信息,与用户的查询一起发送到AI模型中进行处理,从而实现更精确、更智能的回复。

四、Spring AI与VectorStore的集成案例

以基于Spring AI框架的聊天机器人项目为例,该项目需要实现根据用户提供的文档数据进行回复的功能。由于对话有最大Token的限制,无法直接将所有的数据发给AI模型进行处理。因此,决定采用数据向量化的方式,将文档数据存储到VectorStore中,并在用户发起对话之前从VectorStore中检索一组相似的文档作为上下文信息。具体实现步骤如下:

  1. 引入依赖:在项目的pom.xml文件中引入Spring AI框架以及向量数据库相关的依赖。
  2. 配置VectorStore:在application.properties或application.yml文件中配置VectorStore的连接信息以及嵌入模型等参数。
  3. 创建文档嵌入服务:利用Spring AI框架提供的EmbeddingClient将文档转换为向量嵌入,并存储到VectorStore中。
  4. 实现相似性搜索:在用户发起对话之前,从VectorStore中检索一组相似的文档作为上下文信息。
  5. 整合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是一种用于存储和检索高维向量数据的数据库或存储解决方案&#xff0c;它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析&#xff1a; 一、VectorStore的基本概念 定义&#xff1a;VectorStore特别适用于处理那些经过嵌入…...

zig 安装,Hello World 示例

1. 安装 Zig 首先&#xff0c;你需要在你的计算机上安装 Zig 编译器。你可以从 Zig 官方网站 下载适合你操作系统的版本。 安装完成后&#xff0c;你可以在终端中运行以下命令来检查 Zig 是否安装成功&#xff1a; zig version如果一切正常&#xff0c;它会显示 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 设置中&#xff1a; INSTALLED_APPS [...corsheaders,... ]3.添加中间件 MIDDLEWARE [...cor…...

【蓝桥杯选拔赛真题60】C++寻宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

目录 C++寻宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 五、运行结果 六、考点分析 七、推荐资料 C++寻宝石 第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 有N(1<N<100)个盒子排成一排,每个盒子都放…...

Git 从入门到精通

一、环境配置 下载地址&#xff1a;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认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…...

Java虚拟机(Java Virtual Machine,JVM)

一、Java 虚拟机 Java 虚拟机&#xff08;Java Virtual Machine, JVM&#xff09;是运行 Java 字节码的虚拟机。它是Java平台的核心组件之一&#xff0c;使得Java程序具有 一次编写&#xff0c;到处运行&#xff08;Write Once, Run Anywhere&#xff09; 的特性。 JVM 有针对…...

[免费]微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序(高校就业)招聘系统(Springboot后端Vue管理端)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序(高校就业)招聘系统(Springboot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…...

TCP Analysis Flags 之 TCP Retransmission

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…...

#Phi-4:微软 14B 参数开源模型,性能匹敌 OpenAI GPT-4o-mini,现已登陆 Ollama

Phi-4&#xff1a;微软 14B 参数开源模型&#xff0c;性能匹敌 OpenAI GPT-4o-mini&#xff0c;现已登陆 Ollama 一、Phi-4 模型概述 &#xff08;一&#xff09;模型参数与规模 Phi-4 是微软推出的一款小型语言模型&#xff0c;拥有 140 亿参数。虽然参数量相对较小&#xf…...

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 注解中的一个注解&#xff0c;用于定义 API 文档中的联系信息。通过 Contact 注解&#xff0c;你可以指定 API 维护者的联系方式&#xff0c;例如电子邮件、URL 或名称等。 源代码 package io.swagger.v3.oas.annotations.info;import …...

如何监听Vuex数据的变化?

使用watch方法监听Vuex state的变化&#xff1a; // 在 Vue 组件中 this.$store.watch((state) > state.someState,(newValue, oldValue) > {console.log(someState changed from, oldValue, to, newValue);} );使用subscribe方法监听mutation的变化&#xff1a; // 在…...

Redis 优化秒杀(异步秒杀)

目录 为什么需要异步秒杀 异步优化的核心逻辑是什么&#xff1f; 阻塞队列的特点是什么&#xff1f; Lua脚本在这里的作用是什么&#xff1f; 异步调用创建订单的具体逻辑是什么&#xff1f; 为什么要用代理对象proxy调用createVoucherOrder方法&#xff1f; 对于代码的详细…...

前端中常用的单位度量(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&#xff08;十三&#xff09; 目录 前言 一、现状分析 二、解决思路 1.应用场景网络结构图 2.数据发送流程 3.数据接收流程 4.用到的模块 1.CAN网络速率及时间片分配 2.CAN网络消息ID组成 3.设备节点定义 4.数据格式说明…...

从零开始:使用VSCode搭建Python数据科学开发环境

引言 在数据科学领域&#xff0c;一个高效、稳定的开发环境是成功的关键。本文将详细介绍如何使用Visual Studio Code搭建一个完整的Python数据科学开发环境。通过本指南&#xff0c;您将学会&#xff1a; 安装和配置VSCode&#xff0c;包括基本设置和快捷键配置设置Python开…...

C#语言的字符串处理

C#语言的字符串处理 引言 在现代编程中&#xff0c;字符串处理是一项重要的技能&#xff0c;几乎在所有编程语言中都有应用。C#语言作为一种强类型的、面向对象的编程语言&#xff0c;提供了丰富的字符串处理功能。这使得开发人员能够方便地进行文本操作&#xff0c;比如字符…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...