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

第四节 chatPDF

一、Rag 向量数据库

1.向量相似度

欧式距离越小,相似度越高;余弦距离越大相似度越高。

2.配置向量模型

embedding: 嵌入,把…牢牢地嵌入

意思: 把文字转化为向量坐标嵌入到八维空间。

spring.ai.openai.embedding.options.dimensions=2048
spring.ai.openai.embedding.options.model=text-embedding-v4
3.使用EmbeddingModel

3.1 给测试脚本配置环境变量
OPENAI_API_KEY=sk-6c6026***854ca44

 

3.2 编辑测试脚本
package com.spring.springai;import com.spring.springai.mapper.CourseMapper;
import org.junit.jupiter.api.Test;
import org.springframework.ai.openai.OpenAiEmbeddingModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Arrays;import static org.junit.jupiter.api.Assertions.assertNotNull;@SpringBootTest
class SpringaiApplicationTests {@Autowiredprivate OpenAiEmbeddingModel openAiEmbeddingModel;@Testvoid contextLoads() {float[] floats = openAiEmbeddingModel.embed("学java就到黑马程序员");System.out.println(Arrays.toString(floats));}// 测试 mapper/*@Autowiredprivate CourseMapper mapper;@Testvoid testSelect() {assertNotNull(mapper.selectById(1));}*/}

3.3 测试欧式距离和余弦距离
package com.spring.springai;import com.spring.springai.mapper.CourseMapper;
import com.spring.springai.utils.VectorDistanceUtils;
import org.junit.jupiter.api.Test;
import org.springframework.ai.openai.OpenAiEmbeddingModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Arrays;
import java.util.List;import static org.junit.jupiter.api.Assertions.assertNotNull;@SpringBootTest
class SpringaiApplicationTests {@Autowiredprivate OpenAiEmbeddingModel openAiEmbeddingModel;@Testvoid contextLoads() {float[] floats = openAiEmbeddingModel.embed("学java就到黑马程序员");System.out.println(Arrays.toString(floats));}/*** 测试向量距离*/@Testpublic void testEmbedding() {// 1.测试数据// 1.1.用来查询的文本,国际冲突String query = "global conflicts";// 1.2.用来做比较的文本String[] texts = new String[]{
//                "哈马斯称加沙下阶段停火谈判仍在进行 以方尚未做出承诺","伊朗与以斯列互射导弹","胡塞武装公布魔法海洋号被击沉全程","74岁老戏骨捧花接小36岁未婚妻出狱","土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判","日本航空基地水井中检测出有机氟化物超标","国家游泳中心(水立方):恢复游泳、嬉水乐园等水上项目运营","我国首次在空间站开展舱外辐射生物学暴露实验",};System.out.println("文本个数:" + texts.length);// 2.向量化System.out.println("------计算欧氏距离start------------");// 2.1.先将查询文本向量化float[] queryVector = openAiEmbeddingModel.embed(query);// 2.2.再将比较文本向量化,放到一个数组List<float[]> textVectors = openAiEmbeddingModel.embed(Arrays.asList(texts));// 3.比较欧氏距离// 3.1.把查询文本自己与自己比较,肯定是相似度最高的System.out.println(VectorDistanceUtils.euclideanDistance(queryVector, queryVector));// 3.2.把查询文本与其它文本比较for (float[] textVector : textVectors) {System.out.println(VectorDistanceUtils.euclideanDistance(queryVector, textVector));}System.out.println("------计算欧氏距离end,计算余弦距离 start------------");// 4.比较余弦距离// 4.1.把查询文本自己与自己比较,肯定是相似度最高的System.out.println(VectorDistanceUtils.cosineDistance(queryVector, queryVector));// 4.2.把查询文本与其它文本比较for (float[] textVector : textVectors) {System.out.println(VectorDistanceUtils.cosineDistance(queryVector, textVector));}System.out.println("------欧式距离越小,相似度越高;余弦距离越大相似度越高。------------");}// 测试1. mapper/*@Autowiredprivate CourseMapper mapper;@Testvoid testSelect() {assertNotNull(mapper.selectById(1));}*/}

结算结果:

参考:https://blog.csdn.net/2201_75669520/article/details/148813100

http://www.xdnf.cn/news/15006.html

相关文章:

  • Java-----韩顺平单例设计模式学习笔记
  • Ubuntu防火墙缺失问题(unit firewalld.service could not be found, ubuntu 22)
  • 小赛安全智脑×动态MCP Server:让组件API对接像搭积木一样简单
  • 闲庭信步使用图像验证平台加速FPGA的开发:第七课——获取RAW图像
  • 首批|美创智能数据安全分类分级平台获CCIA“网络安全新产品”
  • 聚铭安全管家平台2.0实战解码 | 安服篇(二):无人值守自动化封禁
  • Docker 高级管理--容器通信技术与数据持久化
  • HUAWEI HiCar6.0的新变化
  • Git 详解:从概念,常用命令,版本回退到工作流
  • 多信息流展示利器 - 利用FeedCard优化企业通知与公告发布
  • 征程 6|工具链量化简介与代码实操
  • 基于Java+SpringBoot 协同过滤算法私人诊所管理系统
  • STM32第十八天 ESP8266-01S和电脑实现串口通信
  • SpringAI学习笔记-MCP客户端简单示例
  • OSPFv3和v2区别(续)
  • SKUA-GOCAD入门教程-第九节 面的创建与编辑1
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?
  • 二刷(李宏毅深度学习,醍醐灌顶,长刷长爽)
  • QML事件处理:鼠标、拖拽与键盘事件
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | StickyNavbar(粘性导航栏)
  • 【学习笔记】网络设备(华为交换机)基础知识 24 —— 以太网子接口基础知识
  • Java 阻塞队列:7种类型全解析
  • [Swarm] 上下文变量 | 接入function功能调用 | Mcp
  • Spring注解驱动开发
  • C语言使用Protobuf进行网络通信
  • Docker、Git与虚拟机:技术原理与深度对比(更新版)
  • SSH密钥 与 Ed25519密钥 是什么关系
  • 深入解析 structuredClone API:现代JS深拷贝的终极方案
  • 找出父节点名称和子节点名称拼接
  • C语言基础(1)