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

Java-SpringBoot集成Langchain4j文本嵌入模型实现向量相似度查询

 集成Pg数据库并创建vector字段类型

运行pgvector容器 根据需要进行容器目录挂载

docker run --name pgvector \-e POSTGRES_PASSWORD=123456 \-p 5432:5432 \-d --platform linux/amd64 ankane/pgvector:latest

进入docker容器并创建vector字段类型

docker exec -it pgvector bash
psql -U postgres -c "CREATE EXTENSION IF NOT EXISTS vector;"

集成Langchain4j所需依赖

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId><version>0.30.0</version>
</dependency>
<!-- 主要用于查询向量数据库-->
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-pgvector</artifactId><version>0.31.0</version>
</dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId><version>0.30.0</version>
</dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.30.0</version>
</dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-hugging-face</artifactId><version>0.30.0</version>
</dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-vertex-ai</artifactId><version>0.30.0</version>
</dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-embeddings</artifactId><version>0.30.0</version>
</dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId><version>0.30.0</version>
</dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-document-parser-apache-tika</artifactId><version>0.30.0</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version>
</dependency>
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.2</version>
</dependency>
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId>
</dependency>

SpringBoot连接Pg数据库以及配置向量连接

spring:datasource:url: jdbc:postgresql://localhost:5432/postgresusername: postgrespassword: postgres

配置类

@Configuration
public class PgVectorConfiguration {@Beanpublic PgVectorEmbeddingStore embeddingStore() {return PgVectorEmbeddingStore.builder()//指定主机地址.host("localhost")//指定端口.port(5432)//指定数据库名.database("postgres")//指定用户名.user("postgres")//指定密码.password("postgres")//指定向量数据所在表名.table("knowledge_vector")//指定向量维度.dimension(384).build();}
}

Java实体类配置

@TableName、@TableId以及@TableField集成MyBatis-plus根据自己ORM框架修改

@TableName("knowledge_vector")
@Data
public class KnowledgeVectorDO {@TableId(value = "embedding_id", type = IdType.ASSIGN_ID)private Long embeddingId;@TableField("knowledge_id")private Long knowledgeId;@TableField("text")private String text;@TableField("embedding")private List<Float> embedding;@TableField("metadata")private String metaData;
}

注:embedding_id、text、embedding、metadata是必备字段 字段名不能修改 如果embedding需要处理大量的向量数据,并且这些数据的精度要求不高,使用float会更高效,占用更少的存储空间。如果应用场景对数值精度要求较高,例如科学计算或金融应用,应该选择 double。

  1. embedding_id:向量表的Id
  2. text:文本切分后的数据块
  3. embedding:存储的向量数据
  4. metadata:元数据

业务代码

    /*** * @param text 匹配的内容*/public void getKnowledgeByText(String text){//它是一个使用 AllMiniLmL6V2 模型的实例。文本嵌入模型通常是由预训练的神经网络组成,用于将文本转换为高维向量表示,以捕捉文本之间的语义关系。EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();//将给定的文本 text 嵌入到高维向量空间中,返回一个表示该文本的嵌入向量Embedding queryEmbedding = embeddingModel.embed(text).content();//用于在嵌入向量空间中查找与给定查询向量最相似的文本片段。queryEmbedding 是我们之前嵌入的查询文本的向量表示,而参数 1 表示要返回与查询向量最相似的文本片段数量。List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.findRelevant(queryEmbedding, 1);//从返回的相似文本片段列表 relevant 中获取第一个匹配结果,即与查询向量最相似的文本片段。这个结果被存储在 embeddingMatch 变量中,可以通过它来访问相似度分数和文本内容等信息。EmbeddingMatch<TextSegment> embeddingMatch = relevant.get(0);//对应数据表的IdSystem.out.println("tableId:"+embeddingMatch.embeddingId());//根据向量查询到的内容System.out.println("text:"+embeddingMatch.embedded().text());//表示查询向量与返回的相似文本片段之间的相似度得分。 得分越高表示两个向量之间的语义关系越相似。值越接近1表示相似度越高,值越接近0表示相似度越低System.out.println("score:"+embeddingMatch.score());}

 

 

相关文章:

Java-SpringBoot集成Langchain4j文本嵌入模型实现向量相似度查询

集成Pg数据库并创建vector字段类型 运行pgvector容器 根据需要进行容器目录挂载 docker run --name pgvector \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-d --platform linux/amd64 ankane/pgvector:latest 进入docker容器并创建vector字段类型 docker exec -it pgvecto…...

正宇软件:引领数字人大新纪元,开启甘肃人大代表履职新篇章

在数字化强国的主旋律之下&#xff0c;政府工作的数字化、智能化转型已成为提升治理效能、增强人民满意度的关键一环。在这个大背景下&#xff0c;正宇软件技术开发有限公司以其卓越的技术实力和丰富的行业经验&#xff0c;成为了政府信息化建设的杰出代表。甘肃省人大代表履职…...

UniApp中,在页面显示时触发子组件的重新渲染

在UniApp中&#xff0c;要在页面显示时触发子组件的重新渲染&#xff0c;可以利用生命周期钩子函数来实现。具体来说&#xff0c;可以在页面的onShow生命周期钩子中调用子组件的方法或者改变子组件的props&#xff0c;从而触发子组件的重新渲染。 首先&#xff0c;确保子组件有…...

Linux(三)

Linux&#xff08;三&#xff09; Linux网络配置管理网络基础知识 IP地址A类 由1个字节网络地址3个字节主机地址B类 由2个字节网络地址2个主机地址C类 由3个字节网络地址1个主机地址D类:主要用于组播E类:为将来使用保留 子网掩码子网掩码作用网关DNS服务器 Linux用户管理用户的…...

2024年郫都区区级农业生产社会化服务重点服务组织评定申报条件材料、程序要求

第一章 总 则 第一条 为深入贯彻《中共中央办公厅 国务院办公厅关于促进小农户和现代农业发展有机衔接的意见》《农业农村部关于加快发展农业社会化服务的指导意见》精神&#xff0c;充分发挥农业生产社会化服务组织在引领现代农业发展、打造新时代更高水平“天府粮仓”郫都…...

Java入门须知术语

文章目录 前言JVM (Java Virtual Machine)JVM的组成部分JVM的作用为什么需要JVM JRE&#xff08;Java Runtime Environment&#xff09;JRE的组成部分JRE的作用为什么需要JRE JDK&#xff08;Java Development Kit&#xff0c;Java开发工具包&#xff09;JDK的组成部分JDK的作用…...

Spring Boot中集成WebSocket

目录 WebSocket简介WebSocket原理WebSocket的使用场景在Spring Boot中集成WebSocket 创建Spring Boot项目添加依赖配置WebSocket创建WebSocket处理器配置WebSocket端点前端使用WebSocket添加WebSocket拦截器 WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的…...

18.多分类问题代码实现

在机器学习中&#xff0c;多分类问题是一类常见的问题&#xff0c;它涉及到将输入数据划分为多个类别中的一个。例如&#xff0c;在图像识别中&#xff0c;我们可能需要将图像分为不同的类别&#xff0c;如手写数字识别&#xff08;MNIST数据集&#xff09;就是将手写数字图像分…...

实时通信的方式——WebRTC

文章目录 基于WebRTC实现音视频通话P2P通信原理如何发现对方&#xff1f; 不同的音视频编解码能力如何沟通&#xff1f;&#xff08;媒体协商SDP&#xff09;如何联系上对方&#xff1f;&#xff08;网络协商&#xff09; 常用的API音视频采集getUserMedia核心对象RTCPeerConne…...

Android 使用 ActivityResultLauncher 申请权限

前面介绍了 Android 运行时权限。 其中&#xff0c;申请权限的步骤有些繁琐&#xff0c;需要用到&#xff1a;ActivityCompat.requestPermissions 函数和 onRequestPermissionsResult 回调函数&#xff0c;今天就借助 ActivityResultLauncher 来简化书写。 步骤1&#xff1a;创…...

如何将前端项目打包并部署到不同服务器环境

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站尚硅谷的前端讲师【张天禹老师】整理的&#xff0c;用于自己复盘&#xff0c;有需要学习的可以去b站学习原版视频&…...

什么样的展馆场馆才是科技满满?就差一张智慧场馆大屏

随着科技的飞速发展&#xff0c;传统的场馆展示方式已经无法满足现代人对信息获取和体验的需求。智慧场馆大屏作为一种新型的展示方式&#xff0c;应运而生。它将高清大屏显示技术、智能交互技术、数据分析技术等融为一体&#xff0c;为观众带来更加丰富、生动的展示体验。 一…...

python核心编程(二)

python面向对象 一、基本理论二、 面向对象在python中实践2.1 如何去定义类2.2 通过类创建对象2.3 属性相关2.4 方法相关 三、python对象的生命周期,以及周期方法3.1 概念3.2 监听对象的生命周期 四、面向对象的三大特性4.1 封装4.2 继承4.2.1 概念4.2.1 目的4.2.2 分类4.2.3 t…...

【wiki知识库】02.wiki知识库SpringBoot后端的准备

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、&#x1f4c2;打开SpringBoot项目 2.1 导入所需依赖 2.2修改application.yml配置文件 2.3导入MybatisPlus逆向工程工具 2.4创建一个公用的返回值 2.5创建CopyUtil工具类 2.6创建…...

python tuple(元组)

python list&#xff08;列表&#xff09;、创建、访问、内置index、判断in、not in、添加元素、insert、append、extend、列表排序、颠倒顺序、删除元素、remove、pop、clear-CSDN博客 目录 tuple&#xff1a; 元组的主要特点包括&#xff1a; tuple的创建 单个元组需要注…...

opencv调用摄像头保存视频

opencv调用摄像头保存视频 文章目录 opencv调用摄像头保存视频保存视频&#xff08;采用默认分辨率640 x 480)保存视频&#xff08;指定分辨率&#xff0c;例1280720) 保存视频&#xff08;采用默认分辨率640 x 480) import cv2 import time # 定义视频捕捉对象 cap cv2.Vide…...

STM32定时器四大功能之定时器编码接口

1什么是编码器接口&#xff1f; 编码器接口接受编码器的正交信号&#xff0c;根据编码器产生的正交信号脉冲控制CNT的自增和自减&#xff0c;从而指示编码器的旋转方向和旋转速度。 每个高级定时器和通用定时器都有一个编码器接口&#xff0c;同时正交编码器产生的正交信号分…...

全国各城市间驾车耗时和距离矩阵数据集(更新至2022年)

数据简介&#xff1a;城市之间距离越远&#xff0c;耗时越长。经济发达地区的交通状况较好。各城市之间的驾车耗时和距离存在差异。有些城市之间的交通非常便捷&#xff0c;而有些城市之间的交通则较为不便。这表明中国的交通网络发展尚不平衡&#xff0c;需进一步优化。特别是…...

推荐二轮电动车仪表盘蓝牙主芯片方案-HS6621CGC

随着国内二轮电动车的火热开启&#xff0c;电动车的智能化程度越来越高&#xff1b;电动车的智能操控需求也越来越高&#xff0c;现在介绍蓝牙控制面板的一些功能&#xff1b;例如&#xff1a;定位&#xff08;GNSS&#xff09;&#xff0c;设防&#xff0c;实时上报数据&#…...

『香橙派』基于Orange Pi AIpro打造高效个人云存储解决方案

读完这篇文章里你能收获到 了解Orange Pi AIpro硬件优势&#xff0c;为构建高效云存储基础设施的理想平台。学会使用Orange Pi AIpro硬件平台&#xff0c;搭载Ubuntu Server系统&#xff0c;打造云存储环境。掌握利用Kodbox软件&#xff0c;享受文件管理、多格式预览及编辑的全…...

CANN-昇腾NPU-LoRA微调-显存只占5%怎么做到的

全量微调 Llama2-7B 需要更新 7B 参数&#xff0c;显存开销约 80GB。LoRA 只训练 0.5% 的参数&#xff08;约 35M&#xff09;&#xff0c;显存开销约 4GB。在昇腾NPU上 LoRA 微调是性价比最高的方案。 LoRA 原理 在原始权重 W 旁边加一个低秩矩阵 ΔW A B&#xff1a; 原…...

GMERF与MERF:处理过离散计数数据的小域估计方法对比

1. 项目概述&#xff1a;当小域估计遇上复杂计数数据在统计分析&#xff0c;尤其是社会经济调查、公共卫生监测等领域&#xff0c;我们常常面临一个经典难题&#xff1a;如何利用有限的样本数据&#xff0c;去准确推断那些样本量极少甚至为零的“小域”&#xff08;Small Area&…...

煎饼果仔 夏天妹妹 90 天 AI 变现落地计划

配套固化核心 Skills+ 标准化Workflow,分阶段落地,兼顾口碑与长效收益 一、阶段总规划 表格 周期 阶段核心目标 变现侧重 AI 能力沉淀 1-30 天 资产梳理 + 模型训练,搭建生产底座 现有商单 + 单片付费增收 风格 LoRA、声纹、剧本模型、素材资产库 31-60 天 AI 量产内容 + …...

避开这些坑,你的孟德尔随机化分析结果才可靠:以口腔癌研究为例的实操避雷指南

孟德尔随机化分析实战避坑指南&#xff1a;从数据陷阱到稳健结论当你在深夜盯着屏幕上那个意义不明的0.6940093乘数&#xff0c;或是当MR-PRESSO分析结果始终无法收敛时&#xff0c;是否怀疑过自己的分析流程存在致命缺陷&#xff1f;孟德尔随机化&#xff08;MR&#xff09;作…...

多任务学习优化文档级机器翻译:源语句重建与上下文重建策略对比

1. 项目概述&#xff1a;当翻译需要“瞻前顾后”在机器翻译领域&#xff0c;我们早已告别了那个逐字逐句、生硬拼接的时代。基于Transformer架构的神经机器翻译&#xff08;NMT&#xff09;模型&#xff0c;凭借其强大的序列建模能力&#xff0c;已经能够产出相当流畅、准确的句…...

Linux Hook技术演进史:从函数指针到eBPF,安全与监控的十年变迁

Linux Hook技术演进史&#xff1a;从函数指针到eBPF的十年变革在系统级编程领域&#xff0c;Hook技术始终扮演着关键角色。想象一下这样的场景&#xff1a;当某个关键系统调用被触发时&#xff0c;你需要在不修改原始代码的情况下注入自定义逻辑——可能是记录日志、实施安全检…...

The Front 末日生存战争游戏专属服务器搭建教程

The Front 末日生存战争游戏专属服务器搭建教程 《The Front》&#xff08;前线&#xff09;是一款以末日废土为背景的多人生存建造游戏&#xff0c;玩家在充满战争气息的废土世界中采集资源、建造据点、研发科技、与其他玩家或 NPC 势力展开激烈对抗。自建专属服务器可以让你…...

AArch64架构下非缓存内存的指令缓存机制解析

1. AArch64架构下非缓存正常内存的指令缓存机制解析在Armv8-A和Armv9-A架构的AArch64执行状态下&#xff0c;关于指令缓存(Instruction Cache)如何处理非缓存(Non-cacheable)内存区域的指令访问&#xff0c;存在一个值得深入探讨的技术细节。这个问题直接关系到处理器对内存访问…...

不用pip install -e也能搞定Vision Mamba训练:我的CIFAR-100快速测试与whl文件安装指南

Vision Mamba极速体验指南&#xff1a;绕过复杂安装直接训练CIFAR-100 当最新论文《Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model》在arXiv上出现时&#xff0c;许多同行都迫不及待想验证这个号称"超越ViT"的架构…...

毕业论文神器!2026年必备AI论文软件榜单,免费版也能写合规初稿

2026 年实测 10 款主流 AI 论文工具&#xff0c;千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜&#xff1b;ThouPen 稳坐留学生毕业全流程工具头把交椅&#xff1b;免费工具中DeepSeek Scholar、豆包学术版表现亮眼&#xff0c;30 分钟即可生成万字高质量初稿&#xff0…...