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

SpringAI-基于java大模型的胡言乱语

最近看了一点相关的springAI知识,做个小总结

胡言乱语开始

1.不同的ai调用api一般单独汇总成一个依赖,比如说调用openai的api的依赖是spring-ai-openai-spring-boot-starter。

2.最常用的展示方式是流式对话,AI的数据是一个字一个字生成的,不等AI全部生成才传过来。看上去提高响应速度,给用户一个好体验,主要使用SSE技术。

3.为了让ai有上下文对话能力,需要将历史对答+本次提问组成一个list传输给ai,Message有

  • SystemMessage系统限制信息,该类信息在对话中的权重很大
  • UserMessage用户信息
  • AssistantMessageAI回复信息

等类型,由于ai计费方式按长度计算,所以一般会对这个列表长度进行限制。

4.人设功能,实际上属于提示词Prompt工程的一部分,在openai中人设设定存储在SystemMessage中,该SystemMessage在在对话中的权重很大,ai会优先对这部分反应。一般塞在历史数据list中的第一个。

5.Prompts模板语法,PromptTemplate能够创建结构化提示词,实现了三个接口:

  • PromptTemplateStringActions: 主要用于创建和渲染提示词字符串,返回值类型均是String类型,提示词基本形式。
  • PromptTemplateActions: 主要用于创建Prompt对象,该对象可直接传递给ChatClient以生成响应。
  • PromptTemplateMessageActions:主要用于创建Message对象,这允许我们针对Message对象进行其他的相关操作。

6.OutputParser 生成解析器,可以将AI生成的内容解析为Java对象。实际上是靠Prompt提示词强规范返回输出格式为json

Parser接口用于解析AI生成的内容并将其转换为Java对象返回。 在Spring AI中,OutputParser接口有三个具体的实现类:

  • BeanOutputParser: 通过让AI生成JSON格式的文本,然后通过JSON反序列化为Java对象返回;
  • MapOutputParser: 与BeanOutputParser的功能类似,但会将JSON反序列化为Map对象;
  • ListOutputParser: 让AI生成以逗号分隔的列表;

7.基于数据库的多Key轮询需求,在实际业务场景下,不可能只通过一个Key来保证系统稳定运行,因为一旦超过单key请求上限,就会出现无法请求AI的情况,所以需要实现多Key轮询请求,保证系统不会出现因为单key达到请求限制而无法运行的情况。

8.函数调用功能,在一些大模型中可能集成了函数调用功能,函数调用允许 AI 大模型执行客户端的函数,从而根据需要访问必要的信息或动态地执行任务。

9.不同于对话的ChatClient,绘图使用的ImageClient,需要给出ImageMessage(绘图指令)、ImageOptions(图片数、图片配置、返回的图片格式、绘图模型等)。

10.多模态对话,自行判断对话和图片方式,大概率取决去提示词,为了精准一般使用英文写提示词框架,第一次对话让ai判断使用什么方式,第二次对话调用相应的ChatClient或者ImageClient,当然,也可以要求同时输出文字和图片,通过ChatClient添加同时输出文字和图片的提示词来实现

11.Embeddings技术,将文本或图片等各种之后需要用的信息转换为数值向量。这些向量化后的数值数据对于文本分析和检索有着至关重要的作用。一般需要关注选用的Embedding模型model(比如text-embedding-3)和编码格式encodingFormat(通常float)

12.突破Token限制的取巧方法,上下文太长会超过Token限制导致ai无法根据所有信息进行回复,比如提取一篇几十页的论文的总结或者其中提出的名词的含义,直接提问显得不太显示,这时需要一种能存储大量信息并且能被ai理解的事物,也就是向量数据库,与传统数据库执行的精确性搜索不同,向量数据库执行相似性搜索。相似性搜索的算法有很多,比如计算两个向量之间的距离或者夹角来判断是否相似。

13.RAG技术,向量数据库执行搜索后的结果是一组与用户问题相似的数据,在让AI处理超大文本时,只需将这组数据发送给AI即可,这解决了传入超大文本时突破Token限制,节省大量开销。这就是增强检索生成(RAG),RAG的实现原理:

  • 文本分割成一组文本;
  • 一组文本调用嵌入模型获得一组向量并存储到向量数据库中;
  • 提问时,在向量数据库执行相似性搜索获得与问题相关的一组文本;
  • 将这组文本和问题一并发给AI

如果想使用RAG技术,需要以下几个功能:

  • 文件上传功能和接口
  • 向量数据库的CURD
  • 创建提示词来让AI知道自己要根据查找的内容进行回复
  • 创建对话接口

相关文章:

SpringAI-基于java大模型的胡言乱语

最近看了一点相关的springAI知识,做个小总结 胡言乱语开始 1.不同的ai调用api一般单独汇总成一个依赖,比如说调用openai的api的依赖是spring-ai-openai-spring-boot-starter。 2.最常用的展示方式是流式对话,AI的数据是一个字一个字生成的…...

python提问及解析

在看答案之前,可以先试试自己做哦! 1.图书馆借书还书系统 问题描述 问题:设计一个Python程序,该程序模拟一个大型图书馆的图书管理系统。图书馆拥有成千上万的书籍,每本书都有一个唯一的ISBN号、书名、作者、出版年份…...

从Apple Intelligence到IoT Intelligence,端侧生成式AI时代加速到来

9月10日凌晨1点,苹果新品发布会如期举行,全新iPhone16系列成为苹果生态中真正意义上的第一款原生AI手机,在第二代3nm工艺A18和A18 Pro芯片的加持下,iPhone16系列能够容纳并快速运行以Apple Intelligence为中心的生成式AI功能在手机…...

智能AC管理系统HTTPD-AC 1.0服务存在未授权访问漏洞

@[toc] 智能AC管理系统HTTPD-AC 1.0服务存在未授权访问漏洞 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途…...

Sidewalk介绍

目录 1 前言2 简介2.1 注意事项 3 结束语 1 前言 Sidewalk是Amazon出的一个针对IoT物联网的协议,类似于LoRaWAN协议,针对小而美的低功耗设备。Amazon Sidewalk支持低带宽和远程连接,使用BLE进行短距离通信,使用900MHz的频率的LoR…...

Java数据结构 (泛型第二节) 泛型擦除机制/泛型的限制/上界下界

书接上回:Java数据结构 (泛型第一节) 为什么要有泛型/泛型语法/泛型方法-CSDN博客 访问作者Github: https://github.com/Joeysoda/Github_java/blob/main/20240908%E6%B3%9B%E5%9E%8B/src/%E6%B3%9B%E5%9E%8B.java 目录 1. 为什么要有擦除机制? 2. 类…...

数据安全标准在非结构化数据中台的遵守

在数字化转型的浪潮中,非结构化数据中台作为企业数据管理的核心枢纽,承载着海量且多样的数据资产。这些数据不仅关乎企业的运营决策,更涉及客户隐私、商业机密等敏感信息。因此,确保非结构化数据中台遵守数据安全标准,…...

探索Go语言中的Goroutine并发机制

什么是Goroutine 在Go语言中,Goroutine 是程序中最基本的并发单位。事实上,每个Go程序都会自动创建一个goroutine,那就是主goroutine,程序启动时会立即执行。Goroutine是Go语言中处理并发问题的核心工具,因此理解它的工作原理至关重要。 简而言之,Goroutine是并发执行的…...

实现实时Web应用,使用AJAX轮询、WebSocket、还是SSE呢??

文章目录 短轮询(Short Polling)长轮询(Long Polling)Comet “服务器推” (这玩意现在用的很少了,了解一下即可)WebSocket原理:方法:事件: SSE原理事件 总结 …...

3GPP协议入门——物理层基础(一)

1. 频段/带宽 NR指定了两个频率范围,FR1:通常称Sub 6GHz,也称低频5G;FR2:通常称毫米波(Millimeter Wave),也称高频5G。 2. 子载波间隔 NR中有15kHz,30kHz,6…...

关于Java数据结构中集合的一个小知识

在我们以后刷题的过程,我们会遇到一些奇怪的集合数据类型。 如下图 这里,我们以顺序表的集合类为例,我们看到上图函数的返回值类型有点奇怪,其实并不奇怪,也就是穿过去的参数类型是一个顺序表的集合类型,也…...

leetcode41. 缺失的第一个正数,原地哈希表

leetcode41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释&#xf…...

如何准备教师资格证科目三“学科知识与教学能力”的考试与面试?(理科导向:数学/物理)

如何准备教师资格证科目三“学科知识与教学能力”的考试与面试?(理科导向:数学/物理) ​ 目录 收起 1 前言 1.1 自身经历 1.2 教师资格证的作用 2 知识点题型分数的分布与学习建议 2.1 科目三的知识点分数分布: …...

3.数据类型

作业系统链接 Python 是一门面向对象友好的语言,支持多种内置数据类型,包括整数(int)、浮点数(float)、布尔值(bool)、字符串(str)、列表(list&am…...

Xcode报错:No exact matches in reference to static method ‘buildExpression‘

Xcode报错1:No exact matches in reference to static method buildExpression Xcode报错2:Type () cannot conform to View 这两个报错都是因为在SwiftUI的View的Body里面使用了ForEach循环,却没有在ForEach循环闭包的内部返回视图,而是做了…...

校园安全无小事,EasyCVR视频综合管理平台助力智慧校园视频监控系统全面升级

随着信息技术的飞速发展,智慧校园作为教育信息化的重要载体,正逐步成为提升校园安全管理、优化教育资源配置、增强师生互动体验的关键手段。其中,高效、智能的视频监控系统作为智慧校园不可或缺的一部分,扮演着至关重要的角色。TS…...

通过Python代码发送量化交易信号邮件通知

量化交易利用数学模型和计算机算法来分析市场数据,并生成交易信号,本文将介绍如何使用Python编写一个简单的脚本,通过发送邮件通知量化交易信号。 开启SMTP服务 首先要在发件箱的邮件设置中,将POP3/SMPT服务开启,记录下授权密码,在本地可通过此密码登录,注意有效期和保…...

计算机毕业设计 乡村生活垃圾管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...

Qwen 2.5:阿里巴巴集团的新一代大型语言模型

Qwen 2.5:阿里巴巴集团的新一代大型语言模型 摘要: 在人工智能领域,大型语言模型(LLMs)的发展日新月异,它们在自然语言处理(NLP)和多模态任务中扮演着越来越重要的角色。阿里巴巴集…...

Element UI入门笔记(个人向)

Element UI入门笔记 将页面分割为一级菜单、二级菜单、导航栏三个部分;使用npm下载安装,使用语句npm i element-ui -s; 布局组件 el-form 用于创建和管理表单;从属性上看: :model:用于双向数据绑定,将表单…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

DiscuzX3.5发帖json api

参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...