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());}

 

 

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

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

相关文章

2024Spring> HNU-计算机系统-实验4-Buflab-导引+验收

前言 称不上导引了&#xff0c;因为验收已经结束了。主要是最近比较忙&#xff0c;在准备期末考试。周五晚上才开始看实验&#xff0c;自己跟着做了一遍实验&#xff0c;感觉难度还是比bomblab要低的&#xff0c;但是如果用心做的话对于栈帧的理解确实能上几个档次。 实验参考…

基于antd的DatePicker 组件封装业务组件

先看一下我写的目录结构: 依次来看业务代码; (1)RangeTime.tsx import {useState,uesCallback} from react; import {DatePicker} from antd; import {RangePickerProps as AntdRangePickerProps} from antd/es/date-picker; import {Moment} from moment; import type {Ran…

ROCm上来自Transformers的双向编码器表示(BERT)

14.8. 来自Transformers的双向编码器表示&#xff08;BERT&#xff09; — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import torch from torch import nn from d2l import torch as d2l#save def get_tokens_and_segments(tokens_a, tokens_bNone):""&qu…

驾校管理系统-手把手调试搭建

驾校管理系统-手把手调试搭建 驾校管理系统-手把手调试搭建

rk3568_atomic

文章目录 前言一、atomic是什么?二、原子操作API函数1.atomic原子操作2.原子位操作API三、atomic驱动实验总结前言 本文记录的是正点原子rk3568开发板的atomic实验 一、atomic是什么? 不同的线程在进行读写的过程中,可能会冲突乱入,导致会有预想不到的结果。所以为了让数…

开源模型应用落地-LangSmith试炼-入门初体验-数据集评估(三)

一、前言 LangSmith是一个用于构建生产级 LLM 应用程序的平台&#xff0c;它提供了调试、测试、评估和监控基于任何 LLM 框架构建的链和智能代理的功能&#xff0c;并能与LangChain无缝集成。通过使用LangSmith帮助开发者深入了解模型在不同场景下的表现&#xff0c;让开发者能…

python使用xlrd读取excel的时候把字符串读成了数字

xlrd 是一个 Python 库&#xff0c;用于读取 Excel 文件&#xff08;.xls 和 .xlsx&#xff0c;但 .xlsx 需要 openpyxl 或 xlrd 的较新版本&#xff09;。然而&#xff0c;xlrd 在读取 Excel 文件时通常会将单元格的内容按其原始数据类型&#xff08;如字符串、数字、日期等&a…

webshell工具-冰蝎流量特征和加密方式

一、冰蝎原理 1.1 简介 冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端&#xff0c;由于通信流量被加密&#xff0c;传统的WAF、IDS 设备难以检测&#xff0c;给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密&#xff0c;且加密密钥是由随…

Period、Duration

Period 说明&#xff1a;可以用于计算两个 LocalDate对象 相差的年数、月数、天。 方法&#xff1a; 方法名 说明 public static Period between(LocalDate start, LocalDate end) 传入2个日期对象&#xff0c;得到Period对象 public int getYears() 计算隔几年&#xf…

axios是什么怎么使⽤尝试描述使⽤它实现登录功能的例子

Axios是一个基于Promise的HTTP库&#xff0c;它可以用于发送GET、POST等请求&#xff0c;并且可以在浏览器和Node.js中使用。其主要特点包括支持Promise API、拦截请求和响应、转换请求和响应数据、取消请求、自动转换JSON数据等。 关于使用Axios实现登录功能的例子&#xff0…

mybatis-plus小课堂: apply 拼接 in SQL,来查询从表某个范围内的数据

文章目录 引言I mybatis-Plus 之 apply 拼接 in SQL1.1 apply源码实现1.2 apply 拼接 in SQL : 非字符串数组1.3 apply 拼接 in SQL : 字符串数组II 如果in的数量太多,采用子查询。III 常见问题: Cause: comColumn xxx in where clause is ambiguoussee also引言 I mybati…

周日休息一下

周日休息一下&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;

基于Ruoyi-Cloud-Plus重构黑马项目-学成在线

文章目录 一、系统介绍二、系统架构图三、参考教程四、演示图例机构端运营端用户端开发端 一、系统介绍 毕设&#xff1a;基于主流微服务技术栈的在线教育系统的设计与实现 前端仓库&#xff1a;https://github.com/Xiamu-ssr/Dragon-Edu-Vue3 后端仓库&#xff1a;https://g…

【NodeMCU实时天气时钟温湿度项目 9】为项目增加智能配网功能(和风天气版)

今天是第九专题&#xff0c;主要介绍智能配网的方法途径和具体实现。在项目开发和调试阶段&#xff0c;设置 WIFI 连接信息&#xff0c;通常是在项目中修改源程序代码完成的。项目调试完成后&#xff0c;客户应用环境中如何实现WIFI连接信息&#xff08;ssid 和 password&#…

【基础详解】快速入门入门 SQLite数据可

简介 SQLite 是一个开源的嵌入式关系数据库&#xff0c;实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库系统不同&#xff0c;比如 MySQL、PostgreSQL 等&#xff0c;SQLite 不需要在系统中设置…

Unity功能——设置Camera,实现玩家被攻击后晃动效果

一、方法说明&#xff1a; 来源&#xff1a;siki学院&#xff1a;Unity项目捕鱼达人&#xff0c;功能学习记录&#xff1b; 效果摘要&#xff1a;通过调整相机移动&#xff0c;视觉感觉玩家面板剧烈晃动&#xff0c;实现被boss攻击时的震动效果。 使用场景说明&#xff1a; …

通过继承React.Component创建React组件-5

在React中&#xff0c;V16版本之前有三种方式创建组件&#xff08;createClass() 被删除了)&#xff0c;之后只有两种方式创建组件。这两种方式的组件创建方式效果基本相同&#xff0c;但还是有一些区别&#xff0c;这两种方法在体如下&#xff1a; 本节先了解下用extnds Reac…

MetaRTC-ffmpeg arm移植

touch cmake_arm.sh 添加 rm -rf build mkdir build cd build ARCHaarch64.cmake cmake -DCMAKE_BUILD_TYPERelease -DCMAKE_TOOLCHAIN_FILE../$ARCH .. maketouch cmake_arm.sh 添加 SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_C_COMPILER /home/yqw/MetaRTC/BC/stbgcc-6.3-1…

yocto学习

bitbake命令单独编译u-boot&#xff1a; $ bitbake -c compile -f u-boot-imx $ bitbake -c deploy -f u-boot-imx //部署编译生成的u-boot镜像到deploy bitbake命令单独编译kernel&#xff1a; bitbake -c compile -f linux-imx //编译内核 bitbake -c deploy -f linux-imx /…

Java | Leetcode Java题解之第112题路径总和

题目&#xff1a; 题解&#xff1a; class Solution {public boolean hasPathSum(TreeNode root, int sum) {if (root null) {return false;}if (root.left null && root.right null) {return sum root.val;}return hasPathSum(root.left, sum - root.val) || has…