零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG

向量数据库是一种特殊类型的数据库,在人工智能应用中发挥着至关重要的作用。

在向量数据库中,查询与传统的关系数据库不同。它们不是进行精确匹配,而是执行相似性搜索。当给定一个向量作为查询时,向量数据库会返回与查询向量"相似"的向量。

向量数据库用于将您的数据与 AI 模型集成。使用它们的第一步是将您的数据加载到向量数据库中。然后,当要将用户查询发送到 AI 模型时,首先检索一组类似的文档。然后,这些文档作为用户问题的上下文,并与用户的查询一起发送到 AI 模型。这种技术称为检索增强生成 (RAG)。

本地部署大模型,不需要GPU就能玩本地模型-亲测成功

零基础学习Spring AI Java AI SpringBoot AI调用大模型OpenAi Ollama集成大模型

Embedding模型介绍

Embedding模型是将文本数据(如词汇、短语或句子)转换为数值向量的工具,这些向量捕捉了文本的语义信息,可用于各种自然语言处理
(NLP)任务。

#### 工作原理

Embedding模型将文本映射到高维空间中的点,使语义相似的文本在这个空间中距离较近。例如,"猫"和"狗"的向量可能会比"猫"和"汽车"的向量更接近。

#### 优点

  • 可以创建自己的或公司的私有知识库

  • 高效的相似性搜索:专为近似最近邻搜索(ANN)优化,能够在海量数据中快速找到相似项,适用于推荐系统、图像和文本搜索等应用。

  • 支持非结构化数据:可以存储 AI 模型生成的图像、文本等数据的向量表示,实现语义搜索和推荐等功能。

  • 出色的扩展性:支持水平扩展,能够处理数十亿条向量数据,适合高并发、大规模数据的业务场景。

  • 与机器学习框架的兼容性:与 TensorFlow、PyTorch 等框架兼容,加速 AI 应用的开发与部署。

Java AI支持的向量数据库

环境准备

  • jdk17+ 这里自行安装,我安装的jdk21

  • idea

postgres安装和表创建

这里使用docker安装

docker run -it --rm --name postgres -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres  pgvector/pgvector:pg16

使用Navicat连接postgres
如果连接报错时:column “datlastsysoid“ does not exist
Line1:SELECT DISTINCT datalastsysoid FROM pg_database

解决请看: https://blog.csdn.net/qq_51081700/article/details/139336320

连接上后执行sql

CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";CREATE TABLE IF NOT EXISTS vector_store (id uuid DEFAULT uuid_generate_v4() PRIMARY KEY,content text,metadata json,embedding vector(4096));CREATE INDEX ON vector_store USING HNSW (embedding vector_cosine_ops);

下面是查询语句

select * from vector_store

创建项目

maven的pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springai</artifactId><version>0.0.1-SNAPSHOT</version><name>springai</name><description>springai</description><properties><java.version>23</java.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--        <dependency>-->
<!--            <groupId>org.springframework.ai</groupId>-->
<!--            <artifactId>spring-ai-redis-store-spring-boot-starter</artifactId>-->
<!--        </dependency>--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId></dependency><!--        <dependency>-->
<!--            <groupId>org.springframework.ai</groupId>-->
<!--            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>-->
<!--        </dependency>--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories></project>

配置pgvector连接信息

spring.application.name=springaispring.ai.openai.api-key=3422324******24324324spring.datasource.url=jdbc:postgresql://192.168.1.97:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=postgresspring.ai.vectorstore.pgvector.index-type=HNSW
spring.ai.vectorstore.pgvector.distance-type=COSINE_DISTANCE
spring.ai.vectorstore.pgvector.dimensions=1536spring.ai.ollama.base-url=http://192.168.1.59:11434
spring.ai.ollama.init.pull-model-strategy=never
spring.ai.ollama.init.timeout=60s
spring.ai.ollama.init.max-retries=1spring.ai.ollama.chat.options.model=llama3.1:latest
spring.ai.ollama.chat.options.temperature=0.7spring.ai.ollama.embedding.enabled=true
spring.ai.ollama.embedding.options.model=llama3.1-instruct:latest

代码使用如下

package com.example.springai.controller;import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.embedding.EmbeddingResponse;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;@RestController
class AIController {@Autowired VectorStore vectorStore;private final EmbeddingModel embeddingModel;@Autowiredpublic AIController(EmbeddingModel embeddingModel) {this.embeddingModel = embeddingModel;}@GetMapping("/ai")public Map ai() {EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of("春天的诗"));List<Document> documents = List.of(new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),new Document("The World is Big and Salvation Lurks Around the Corner"),new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));// Add the documents to PGVector 把文本写入到向量数据库vectorStore.add(documents);// Retrieve documents similar to a query 从向量数据库中查询List<Document> results = this.vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(8));results.forEach(System.out::println);return Map.of("embedding", embeddingResponse);}}

运行项目
访问接口:http://localhost:8080/ai

查询postgres是否入库
在这里插入图片描述

根据关键信息查询出来数据打印到控制台
在这里插入图片描述

后续可以结合Embedding模型把私有知识保存到向量数据库,建立私有知识库。如公司的公告文件,文档,手册,图片,视频等,这些比较隐私性的东西,不方便放公网大模型,所以建立私有知识库,私有知识库查询出来脱敏后结合大模型输出结构化消息。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

口子查好做吗?有什么特点?

大家好&#xff0c;我是橙河老师&#xff0c;一家问卷公司老板&#xff0c;今天讲一讲“口子查好做吗&#xff1f;有什么特点&#xff1f;” 1.口子查是公开性资源&#xff0c;由国外问卷公司直接发布在主流的平台上&#xff0c;比如我们的抖音、百度这些平台&#xff0c;竞争…

开放式耳机性价比排行榜:从入门到高端的全方位推荐

在购买开放式耳机时&#xff0c;性价比是一个重要的考虑因素。开放式耳机性价比排行榜可以为我们提供从入门到高端的全方位推荐。但是&#xff0c;在关注排行榜的同时&#xff0c;我们也不能忽视一些关于开放式耳机的谣言&#xff0c;如对耳朵有伤害、完全不漏音、是否适合所有…

计算机毕业设计Spark+大模型知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

WEB:如何优化大数据菜单展示的攻略指南

1、简述 在前端开发中&#xff0c;树结构菜单是常见的 UI 组件&#xff0c;尤其是在展示层级复杂、数据量庞大的场景下。如何优化大数据量的树结构菜单展示&#xff0c;提高性能和用户体验&#xff0c;是一个值得探讨的话题。本文将介绍一些优化技术和实践&#xff0c;帮助开发…

MySQL表的增删改查(CRUD3约束)

这次我们开始先不复习嗷&#xff0c;等到把数据表的删除说完咱们统一&#xff0c;总结书写 1.数据表的删除&#xff1a; 语法&#xff1a; 1. 使用 DROP TABLE 语句删除单个表 基本语法&#xff1a;DROP TABLE [IF EXISTS] table_name; table_name是要删除的表的名称。IF EXIS…

【每日推荐】使用 Ollama 平台上的 Llama 3.2-vision 模型进行视频目标检测

&#x1f680; 使用 Ollama 平台上的 Llama 3.2-vision 模型进行视频目标检测 在本期推荐的文章中&#xff0c;视频将展示如何通过 Ollama 平台上的 Llama 3.2-vision 多模态模型&#xff0c;结合 Python 和 FastAPI 框架&#xff0c;轻松实现视频目标检测功能。只需要简单的代…

【华为云-云驻共创】UCS跨云多活容灾:让业务高可用不再是难题

【摘要】云原生应用深入到企业各个业务场景&#xff0c;云原生正在走向分布式化&#xff0c;跨云跨域统一协同治理&#xff0c;保证一致应用体验&#xff0c;这些新的需求日益凸显。而容灾是确保服务高可用的保障&#xff0c;但即使应用部署在云上&#xff0c;也无法避免市政方…

ssm080削面快餐店点餐服务系统的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;快餐店点餐服务系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本快餐店点餐服务…

AI学习笔记

目录 专业词汇 AI、NLP和AIGC的关系 涌现能力(Emergent Ability) 专业词汇 专业词汇 (缩写) 英文中文AIArtificial Intelligence人工智能AIGCArtificial Intelligence Generated Content人工智能生成内容PGCProfessional Generated Content专业生成内容UGCUser Generated Co…

【【简单systyem verilog 语言学习使用二--- 新adder加法器 】】

【【简单systyem verilog 语言学习使用二— 新adder加法器 】】 adder.v module addernew(input clk ,input rst_n ,input [2 : 0] in_a ,input [2 : 0] in_b ,input …

曲率定义与三维Mesh曲率估计

曲率定义与三维Mesh曲率估计 二维圆的曲率线的曲率 三维Patch fitting methodsNormal curvature-based methodsTensor averaging methods Estimating Curvatures and Their Derivatives on Triangle Meshes1. Per-Face Curvature Computation2. Coordinate System Transformati…

Dinky控制台:利用SSE技术实现实时日志监控与操作

1、前置知识 1.1 Dinky介绍 实时即未来,Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑。 Dinky 是一个开箱即用、易扩展,以 Apache Flink 为基础,连接 OLAP 和数据湖等众多框架的一站式实时计算平台,致力于流批一体和湖仓一体的探索与实践。 致力于简化Flink任务开…

无人机声学侦测算法详解!

一、算法原理 无人机在飞行过程中&#xff0c;其电机工作、旋翼震动以及气流扰动等都会产生一定程度的噪声。这些噪声具有独特的声学特征&#xff0c;如频率范围、时域和频域特性等&#xff0c;可以用于无人机的检测与识别。声学侦测算法利用这些特征&#xff0c;通过一系列步…

ABAP开发-12、Dialog屏幕开发_1

系列文章目录 文章目录 系列文章目录[TOC](文章目录) 前言一、Dialog屏幕概览二、界面1、界面-界面中的事件块2、界面-创建界面3、界面- 属性4、界面-元素清单5、界面-Screen Layout Designer6、界面- 参照创建7、界面- 常用关键字8、界面- 数据处理逻辑9、界面- Module执行顺序…

vue搭建项目之后的步骤操作

1.创建router文件夹&#xff08;里面创建index.js&#xff09;&#xff0c;创建views文件夹&#xff08;创建index页面&#xff09; 2.删除assets文件夹里面的内容&#xff0c;删除components文件夹 3.安装路由 npm install vue-router 4.router路由下面的index.js书写内容 …

w029基于springboot的网上购物商城系统研发

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…

底层视角看C语言

文章目录 main函数很普通main函数之前调用了什么main函数和自定义函数的对比 变量名只为人而存在goto是循环的本质指针变量指针是一个特殊的数字汇编层面看指针 数组和指针数组越界问题低端地址越界高端地址越界 引用就是指针 main函数很普通 main函数是第一个被调用的函数吗&…

Linux内核USB2.0驱动框架分析--USB设备枚举过程

一 USB特点 1.1 USB协议版本介绍&#xff1a; USB1.0/1.1&#xff08;low/fullspeed&#xff09;&#xff1a;传输速率最大为12Mbps&#xff0c;是较早的USB协议版本。 USB2.0&#xff08;highspeed&#xff09;&#xff1a;传输速率最大为480Mbps&#xff0c;相比USB1.0/1.1…

bert-base-uncased处理文档

1.安装必要的库 确保安装 transformers 和 torch 库&#xff1a; pip install transformers torch 2.加载本地 BERT 模型和分词器 由于已将模型和分词器下载到本地&#xff0c;可以指定文件路径加载。确保路径与本地文件结构一致。 from transformers import BertTokenizer…

【快速入门】Kafka的安装部署

目录 一、我的集群环境介绍 二、集群部署 1、解压安装包 2、修改解压后的文件名称 3、进入到/opt/installs/kafka3 目录&#xff0c;修改配置文件 4、分发安装包 5、分别在 bigdata02 和 bigdata03上修改配置文件 6、配置环境变量 7、启动集群 8、停止集群 三、本文用…