向量数据库是AI系统中常用的工具,主要用来存储文档片段及进行语义相似度查找

与传统数据库不同,它执行的是相似度查找而不是精确匹配

最小化样例

首先在application.properties中,根据所用Embedding模型,添加一个嵌入式模型型号的配置

spring.ai.zhipuai.embedding.options.model=embedding-3

然后需要声明一个VectorStore的bean,需要传入的EmbeddingModel(ZhiPuAiEmbeddingModel)在自动化配置包中已经声明过了(参见ZhiPuAiEmbeddingAutoConfiguration)

@Configuration
public class Config {@Beanpublic VectorStore vectorStore(EmbeddingModel embeddingModel) {return SimpleVectorStore.builder(embeddingModel).build();}
}

之后就可以装配使用了,样例中使用add方法添加了一个Document,然后使用similaritySearch进行语义相近搜索,并返回结果文本

    @AutowiredVectorStore vectorStore;void save(){//目前仅提供JsonReader和TextReaderDocument document = new Document("kitty is a cat");vectorStore.add(List.of(document));}@GetMapping("/ai/vector")String generation(String userInput){save();return this.vectorStore.similaritySearch(userInput).get(0).getText();}

在实际生产中,一般分为两步使用:

数据预处理:将信息资料(比如一些规章制度或其他领域的文件,包括docx、pdf等格式)加载到VectorStore中

处理用户查询:搜索与用户问题语义相近的片段,之后一起传递给大模型,由大模型综合搜索结果进行回答

进阶知识

了解了如何使用,我们来看一下其内部原理和相关接口及实现类,以及如何进行技术选型 

作用原理

VectorStore中内置一个嵌入式大模型,数据预处理阶段加载到向量数据库中的每个文档片段,会由EmbeddingModel加工为一个浮点数数组(即多维向量)

在处理用户查询时,EmbeddingModel同样先将用户查询的文本加工为一个多维向量,然后向量数据库将其与库内每个多维向量进行匹配,得到相似度数值,相似度越接近0越不相关,越接近1越相关。

相关接口及实现

接口

VectorStore

BatchingStrategy
方法

void add(List<Document> docs);

List<Document> similaritySearch(SearchRequest request);

List<List<Document>> batch(List<Document docs);
实现类

AbstractObservationVectorStore

SimpleVectorStore

TokenCountBatchingStrategy

VectorStore接口:向量数据库接口,主要方法即add和similaritySearch,分别对应数据预处理和相似性查找

AbstractObservationVectorStore:VectorStore的抽象实现类,内部包含EmbeddingModel和BatchingStrategy,分别用来将Document向量化和切分Document,同时负责可观测性Observation相关的处理

SimpleVectorStore:一个简单的向量数据库实现,不建议用在生产,适合用来进行教学,内部实现了一个EmbeddingMath,用来计算两个向量的相似度

Document:相似性查找的结果对象,文档或文档片段,内部包含id、文档文本、得分等属性

SearchRequest:相似性查找请求对象,内部包含请求文本query,结果最大条数topK,最低相似度阈值similarityThreshold,筛选表达式filterExpression等

BatchingStrategy接口:文档切分策略接口,提供batch方法,将长文本切分为一系列的小文本

TokenCountBatchingStrategy:按token个数对Document进行切分

其他框架的相关功能

spring-ai的VectorStore实际已经涉及了RAG(检索增强生成)的各个方面,例如文档切分、向量化、存储、相似性查找等功能

在这些环节,有许多可以提高最终效果的优化方案

例如langchain的切分策略,除了按token个数进行切分,还可以按字符切分,比如按【换行符,句号,分号,逗号】的顺序对文档切分,这样能更好的保持语义完整性。

而spring-ai由于起步较晚,此类扩展相对还比较少。

相关优化方案会在后续RAG篇进阶知识中进行详细的说明。

向量数据库选型

spring-ai支持的向量数据库:

可以参考VectorStoreProvider枚举类,目前该枚举类已经有21种向量数据库

选型时需要考虑的因素:

是否开源:这是相对来说首先需要考虑的一个方面,因为它决定了很多其他因素,开源一般都伴随着这些属性——免费、社区活跃、可以进行定制化改造、维护难度相对较高、需要有自己的研发人员,而闭源则一般伴随着这些属性——收费、易用、由厂家提供维护等。

数据规模:其次需要考虑的就是数据规模,因为它也决定了许多其他因素,如果数据量较大,向量维度较高,则需要考虑向量数据库是否支持大规模或超大规模,是否支持分布式,是否支持索引,搜索性能如何等。

其他因素:如是否国产、云上还是云下、是否需要结合其他检索如全文搜索、与现有系统的兼容性、易用性等

学习时可以直接使用spring-ai自带的SimpleVectorStore或者FAISS、Chroma

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84988.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84988.shtml
英文地址,请注明出处:http://en.pswp.cn/web/84988.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 的Banner的介绍和设置

Spring Banner 是指在 Spring Boot 应用启动时,控制台上显示的那一段 ASCII 艺术字(通常是 Spring 的 logo),以及一些应用信息。 Banner 是 Spring Boot 提供的一个小但有趣的功能,可以让应用程序启动时更具个性也显得更高级。 默认 Banner Spring Boot 内置了一个默认…

魅族“换血”出牌:手机基本盘站不稳,想靠AI和汽车“改命”

撰稿|何威 来源|贝多财经 被吉利收购后&#xff0c;魅族逐渐转向在AI领域躬身耕作。 自2024年2月以“All in AI”正式宣告转型、喊出不再推出传统智能手机的豪言开始&#xff0c;这家曾以设计见长的手机厂商&#xff0c;将下半场押注在AI终端、AR眼镜与智能座舱系统上&#…

力扣热题100之将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 代码 使用递归的方法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # s…

mac隐藏文件现身快捷键

在 macOS 系统中&#xff0c;‌显示/隐藏隐藏文件‌ 有两种常用方法&#xff0c;以下是详细说明&#xff1a; ✅ 方法一&#xff1a;使用快捷键&#xff08;最简单&#xff09; 打开 ‌访达&#xff08;Finder&#xff09;‌。 进入任意文件夹&#xff08;如桌面或文档&#x…

IAR Workspace 中 Debug 与 Release 配置的深度解析

IAR Workspace 中 Debug 与 Release 配置的深度解析 一、配置的本质区别 1. 核心目标对比 特性Debug 配置Release 配置优化目标调试友好性性能/尺寸优化代码优化无或低优化 (-O0/-O1)高级优化 (-O2/-O3/-Oz)调试信息包含完整符号信息无或最小化符号断言检查启用通常禁用输出…

Ubuntu下安装python3

一、下载python3源码 以要安装的是python3.13.5为例&#xff0c;在 Index of /ftp/python/3.13.5/ 下载Python-3.13.5.tgz&#xff1a; 将压缩包上传到Ubuntu系统中&#xff0c;解压&#xff1a; tar -zxvf Python-3.13.5.tgz 二、安装 进入解压后的源码目录&#xff1a; c…

计算机基础和Java编程的练习题

1. 计算机的核心硬件是什么&#xff1f;各自有什么用&#xff1f; 中央处理器&#xff08;CPU&#xff09;&#xff1a;负责执行程序中的指令&#xff0c;进行算术和逻辑运算&#xff0c;是计算机的“大脑”。 内存&#xff08;RAM&#xff09;&#xff1a;临时存储CPU正在处…

桥头守望者

赵阿姨在324国道边的便利店守了八年柜台&#xff0c;她的记账本里藏着特殊的日历——那些标着KLN字母的运输单据总在固定日期出现&#xff0c;精确得像是节气。"比气象台还准"&#xff0c;她指着玻璃窗上凝结的水珠说。去年寒潮来袭时&#xff0c;她亲眼看见送货员小…

C语言函数的参数传递和C++函数的参数传递

文章目录 C语言值传递地址传递 C引用传递 C语言 值传递 这种方式使用变量、数组元素作为函数参数&#xff0c;实际是将实参的值复制到形参相应的存储单元中&#xff0c;即形参和实参分别占用不同的存储单元&#xff0c;这种传递方式称为“参数的值传递”。在调用结束后&#…

设计模式-三大工厂

工厂模式有三种&#xff0c;分别是简单工厂模式、工厂方法模式、抽象工厂模式。三种模式从前到后越来越抽象&#xff0c;也更具有一般性。 设计模式 优点 缺点 简单工厂 1.实现了对责任的分割&#xff0c;它提供了专门的工厂类用于创建对象。 1.违背了开闭原则。 2.使用了…

在 AI 工具海洋中掌舵:Cherry Studio 如何成为你的统一指挥中心

01 被 AI 工具包围的知识工作者现状 在这个 AI 爆发的时代&#xff0c;知识工作者的工具库正经历前所未有的扩容。以我为例&#xff0c;按平台类型梳理日常使用的 AI 工具&#xff0c;已然形成三层矩阵&#xff1a; 「云端智能助手」&#xff1a;Kimi、豆包、ChatGPT、Gemini…

Java 线程池技术深度解析与代码实战

为什么线程池总在深夜崩溃&#xff1f; 昨天我这项目又经历了一次爆破——路由推送服务突然崩溃&#xff0c;排查发现线程池队列堆积了几万任务直接把内存撑爆。早上起来看见人都麻了&#xff0c;线程池用不好&#xff0c;分分钟变系统炸弹。今天我们就来系统梳理线程池的实战…

Gradio可视化构建聊天机器人

Gradio是一个Python库&#xff0c;专门用于快速构建和部署机器学习模型的Web界面。它的名字来源于"Gradient"&#xff08;梯度&#xff09;&#xff0c;最初是为了让机器学习开发者能够快速展示他们的模型而设计的。 1. Gradio是什么&#xff1f; 核心概念 快速原…

selenium如何识别条形验证码,自动输入验证码

在自动化测试或网页爬取中&#xff0c;识别验证码是常见的难点。Selenium 本身不具备直接识别验证码的能力&#xff0c;但可以通过结合第三方工具、OCR 技术或人工介入等方式解决。以下是多种可行方案的详细实现思路及代码示例&#xff1a; 一、方案一&#xff1a;使用第三方验…

SAP将指定EXCEL工作SHEET的数据上传到内表

SAP将指定EXCEL工作SHEET的数据上传到内表 本文描述了一个SAP ABAP类方法upload_excel_2internaltab&#xff0c;用于将Excel文件数据上传到内部表。主要功能包括&#xff1a; 验证Excel行列范围有效性&#xff0c;若起始值大于结束值则抛出异常检查文件是否存在&#xff0c;支…

Spring Boot(九十三):Springboot 整合cfx实现webservice接口

1 服务端 最近项目改造,有一些老项目接口协议是webservice soap1.1,这就需要我们提供webservice服务接口。在Spring Boot中整合CFX(CXF框架)以实现Web服务客户端与服务端的功能,可以分为几个步骤。下面我将详细介绍如何在Spring Boot中设置一个Web服务端点,使用Apache CX…

Triton server的部署、构建、backend插件机制整体介绍

目录 0 引言 1 什么是Trition inference server 2 Trition inference server部署 2.1 下载server 2.2 下载模型 2.3 实验 3 triton inference server的构建 3.1 build时候需要哪些repo 3.2 构建过程做了什么 3.3 构建体验 4 阅读readme整体了解下backend机制 4.1 什…

Paimon在各大公司生产实践和优化总结

这是一篇汇总和个人学习文章&#xff0c;主要目的是总结一下Paimon在各大公司的落地做一个学习笔记。 本文的主要内容是关于Paimon在各大公司包括Vivo、Shopee、阿里、抖音等公司的落地实践&#xff0c;文末有文章来源地址&#xff0c;内容大概分为几个部分&#xff1a; 1.引…

简析自动驾驶产业链及其核心技术体系

一、自动驾驶产业链 自动驾驶产业链可以细分为感知层、决策层、执行层以及通信层等多个环节。上游部分主要包括提供环境感知所需的各种传感器&#xff08;如激光雷达、毫米波雷达、摄像头等&#xff09;、高精度地图服务、定位系统以及其他相关硬件设备&#xff1b;中游涵盖了…

第一节 布局与盒模型-Flex与Grid布局对比

一、核心特性对比​​ 1. ​​布局维度​​ ​​Flex 布局​​&#xff1a; ​​一维布局​​&#xff1a;仅支持单方向&#xff08;水平或垂直&#xff09;的排列&#xff0c;通过 flex-direction 控制主轴方向&#xff08;row 或 column&#xff09;。​​适用场景​​&…