01--SpringAI接入大模型,chatgpt,Java接入人工智能大模型

01–SpringAI接入大模型,chatgpt,Java接入人工智能大模型


文章目录

  • 01--SpringAI接入大模型,chatgpt,Java接入人工智能大模型
  • 一、准备工作?
    • ①:环境准备
  • 二、创建一个springAI项目
    • ①:创建一个根项目
    • ②:创建一个SpringAI模块
      • 01.解决下载spring-ai依赖报错问题
      • 02. 添加api-key配置(yml)
      • 03.添加控制层简单测试
      • 04.测试
    • 3️⃣:测试使用gpt-4模型
      • 方法一 添加控制层代码
      • 方法二 配置文件中配置
      • 02.测试
    • 4️⃣:使用Stream方式一个一个的返回
  • 三、Ai图像程序API结构
    • 1️⃣:方式一
      • 01. 代码
      • 02. 测试
    • 2️⃣: 方式二(设置图片属性)
      • 01. 代码
      • 02. 测试
  • 四、音频转文字
    • ①:方式一
      • 01. 代码:
      • 02. 测试
  • 五、文字转语言
    • ①:方式一
      • 01. 代码
      • 02.测试
  • 六、多模态API
    • ①:方式一
      • 01. 代码


一、准备工作?

①:环境准备

  • jdk版本:jdk17
  • idea版本:idea2024.1
  • 要有一个 open ai-key
  • 能【ke】【学】【上】【wang】

二、创建一个springAI项目

①:创建一个根项目

我们先创建一个根项目、之后在根项目中创建AI模块

在这里插入图片描述

  • 把jdk17添加到项目结构中(不然后面可能会报错 setSdk: sdk '17' type 'JavaSDK' is not registered in ProjectJdkTable)

在这里插入图片描述

②:创建一个SpringAI模块

在这里插入图片描述

  • springBoot、jdk17

在这里插入图片描述

  • 选择依赖

在这里插入图片描述

  • 创建

在这里插入图片描述

01.解决下载spring-ai依赖报错问题

  • 下载依赖报错

在这里插入图片描述

  • 将配置阿里云的mirror注释掉使用原生的即可

在这里插入图片描述

  • 然后在重新加载maven
  • 如果还不行,就重新创建项目或者取消maven链接在将项目添加为maven

在这里插入图片描述

02. 添加api-key配置(yml)

spring:application:name: spring-ai-01-chatai:openai:api-key: ${open-ai-key}base-url: ${open-ai-uri}
server:port: 8899

03.添加控制层简单测试

   @RequestMapping("/ai/chat")public String chat(@RequestParam(value = "msg") String msg) {return openAiChatModel.call(msg);}

04.测试

  • 已经根据问题给出了回答

在这里插入图片描述

3️⃣:测试使用gpt-4模型

方法一 添加控制层代码

    /*** 调用chat2** @param msg* @return*/@RequestMapping("/ai/chat2")public Object chat2(@RequestParam(value = "msg") String msg) {ChatResponse response = openAiChatModel.call(new Prompt(msg, OpenAiChatOptions.builder().withModel("gpt-4-32k") // 模型名称 gpt的版本,32k是参数量.withTemperature(0.4F) // 温度,值越小,结果越确定.build()));return response.getResult().getOutput().getContent();}

方法二 配置文件中配置

spring:application:name: spring-ai-01-chatai:openai:api-key: ${open-ai-key}base-url: ${open-ai-uri}chat:options:model: gpt-4-32ktemperature: 0.3
server:port: 8899

02.测试

在这里插入图片描述

4️⃣:使用Stream方式一个一个的返回

    /*** 调用chat3(使用stream流方式)** @param msg* @return*/@RequestMapping("/ai/chat3")public Object chat3(@RequestParam(value = "msg") String msg) {Flux<ChatResponse> stream = openAiChatModel.stream(new Prompt(msg, OpenAiChatOptions.builder().withTemperature(0.3F) // 温度,值越小,结果越确定.build()));stream.toStream().forEach(res -> {System.out.println(res.getResult().getOutput().getContent());});return stream.collectList(); // 数据的序列,一序列的数据,一个一个的数据返回}
  • 测试
    在这里插入图片描述

在这里插入图片描述

三、Ai图像程序API结构

1️⃣:方式一

01. 代码

@RestController
public class ImgController {@Resourceprivate OpenAiImageModel openAiImageModel;/*** 生成图片(方式一)* @param msg* @return*/@RequestMapping("/ai/img")public Object getImg(String msg) {ImageResponse imageResponse = openAiImageModel.call(new ImagePrompt(msg));System.out.println("imageResponse" + imageResponse);return imageResponse.getResult().getOutput();}}

02. 测试

在这里插入图片描述

2️⃣: 方式二(设置图片属性)

01. 代码

    /*** 生成图片(方式二)设置图片属性* @param msg* @return*/@RequestMapping("/ai/img2")public Object getImg2(String msg) {ImageResponse imageResponse = openAiImageModel.call(new ImagePrompt(msg, OpenAiImageOptions.builder().withQuality("hd") // 图片质量(高清).withN(1) // 生成图片数量.withWidth(1024) // 图片宽度.withHeight(1024) // 图片高度.build()));System.out.println("imageResponse" + imageResponse);return imageResponse.getResult().getOutput().getUrl();}

02. 测试

在这里插入图片描述

四、音频转文字

①:方式一

01. 代码:

@RestController
public class TranscriptionController {@Resourceprivate OpenAiAudioTranscriptionModel openAiAudioTranscriptionModel;/*** 语言转文本(方式一)** @return*/@RequestMapping("/ai/audio")public Object audio() {ClassPathResource resource = new ClassPathResource("20240705.mp3");return openAiAudioTranscriptionModel.call(resource);}}

在这里插入图片描述

02. 测试

  • 我用的这个 ai-key 不支持语言转文字,,,

五、文字转语言

①:方式一

01. 代码

  • controller 接口
@RestController
public class SpeechController {@Resourceprivate OpenAiAudioSpeechModel openAiAudioSpeechModel;/*** 文本转语音(方式一)** @return*/@RequestMapping("/ai/speech")public Object audio(String msg) {try {byte[] bytes = openAiAudioSpeechModel.call(msg);// 指定要写入的文件路径String filePath = "D:\\KuGou\\KugouMusic\\audiofile.mp3";FileUtil.writeBytesToFile(bytes, filePath);return "转换成功";} catch (IOException e) {e.printStackTrace();return "转换失败";}}}
  • 工具类
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;public class FileUtil {/*** 将字节数组写入指定路径的文件中** @param bytes 字节数组* @param filePath 文件路径* @throws IOException 如果写入过程中发生错误*/public static void writeBytesToFile(byte[] bytes, String filePath) throws IOException {try (FileOutputStream fos = new FileOutputStream(filePath)) {fos.write(bytes);}}/*** 使用 Java NIO 的 Files 类将字节数组写入文件** @param bytes 字节数组* @param filePath 文件路径* @throws IOException 如果写入过程中发生错误*/public static void writeBytesToFileNIO(byte[] bytes, String filePath) throws IOException {Files.write(Paths.get(filePath), bytes);}
}

02.测试

  • 我用的这个 ai-key 不支持语言转文字,,,

六、多模态API

①:方式一

01. 代码

@RestController
public class MultiModelController {@Resourceprivate ChatClient chatModel;/*** 多模态(方式一)** @return*/@RequestMapping("/ai/multi")public Object multi(String msg, String imageUrl) {var userMessage = new UserMessage(msg,List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageUrl)));ChatResponse response = chatModel.call(new Prompt(List.of(userMessage),OpenAiChatOptions.builder().withModel(OpenAiApi.ChatModel.GPT_4_VISION_PREVIEW.getValue()).build()));return response.getResult().getOutput();}
}

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

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

相关文章

国际水务交流 | 一带一路沿线水环境考察暨中马水务合作论坛

从具体区域来看&#xff0c;“一带一路"沿线国家环境问题复杂而多样&#xff0c;各国生态环境特征差异明显 东南亚尤其是东盟地区受热带季风影响&#xff0c;降水较多&#xff0c;洪水高发&#xff0c;也是世界生物最为多样最为丰富的地区之一&#xff0c;这一区域面临森…

项目实战--Spring Boot与PageHelper的集成及线程污染解决

一、PageHelper使用背景 公司要做个简单管理系统&#xff0c;要我搭建Spring BootMyBatisPageHelperRedis的项目框架然后交i给实习生来开发。这个其实很简单&#xff0c;但是遇到搭建和使用过程中PageHelper有好多小坑&#xff0c;就记录一下&#xff0c;避免再踩。 版本选择&…

C语言_操作符

目录 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用&#xff0c;函数调用&#xff0c;结构成员 表达式求值 隐式类型转换 算术转换 操作符的属性 练习题 代码仓库 算术操作符 加()&#x…

自定义通信协议实例

自定义通信协议是指通信双方为了实现特定功能或满足特定需求&#xff0c;在通信过程中自行约定的一种通信规则。这种协议通常包括数据的格式、传输方式、校验方法等内容&#xff0c;以确保通信双方能够正确地理解和交换信息。以下是关于自定义通信协议的一些详细解释和示例&…

智能插座搭配BIOS唤醒功能实现远程定时开关机

智能插座 智能插座凭借其强大的联网能力&#xff0c;不仅能够实现远程操控开关电源&#xff0c;部分高端型号更是集成了电量统计与自动化操作功能&#xff0c;为用户带来了前所未有的便捷体验。以下是我对几款体验过的智能插座的简要评价&#xff0c;因版本差异可能有所不同。…

工业交换机端口统计功能

工业交换机端口统计功能不仅是一项技术手段&#xff0c;更是一双透视企业网络健康状态的慧眼。通过这一功能&#xff0c;企业能够实时捕捉到网络中每一个端口的流量情况&#xff0c;这不仅仅是数据的积累&#xff0c;更是对网络脉搏的精准把握。当网络的每一个脉动都被记录在案…

建智慧医院核心:智能导航系统的功能全析与实现效益

在数字化转型的浪潮中&#xff0c;智慧医院的建设是医疗行业数字化转型的关键步骤。随着医院规模的不断扩大和医疗设施的日益复杂&#xff0c;传统的静态不连续的导航方式已无法满足患者的需求。院内智能导航系统&#xff0c;作为医疗数字化转型的关键组成部分&#xff0c;正逐…

环境检测聚四氟乙烯微波消解罐 特氟龙反应釜 适用于COD测定

COD消解罐是实验室中用于测定水样中化学需氧量&#xff08;Chemical Oxygen Demand&#xff0c;简称COD&#xff09;的一种专用设备。化学需氧量是衡量水体污染程度的一个重要参数&#xff0c;它表示在一定条件下&#xff0c;水样中的有机物质和部分无机物质被氧化的程度。以下…

中霖教育:二建报名成功后怎么审核?

【中霖教育怎么样】【中霖教育靠谱吗】 在成功完成二级建造师资格考试的报名流程后&#xff0c;需要准备后续的审核阶段&#xff0c;审核是否通过关乎考生是否能顺利参加考试&#xff0c;审核的方式包括&#xff1a;现场审核、网络审核以及考试后的审核。 某些地区会要求考生…

AI文字图片人脸生成原创视频文生图生肖生小程序开发

AI文字图片人脸生成原创视频文生图生肖生小程序开发 无限开 0.12生成 图生视频 AI技术在生成文字、图片、人脸以及视频方面已经取得了显著的进步。以下是一些可能包含在AI文字图片人脸生成原创视频小程序中的功能列表&#xff1a; 文字转视频&#xff1a; 输入文字或文章&…

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一)

文章目录 概要开发思路界面编辑新建工程&#xff0c;设置界面大小导入素材场景编辑场景编辑 移动组件输入组件添加移动状态脚本定位组件 概要 飞船设计游戏的学习&#xff0c;如下所示 原视频地址&#xff1a; https://www.youtube.com/playlist?listPL9FzW-m48fn09w6j8Now…

go语言day09 通道 协程的死锁

Go语言学习——channel的死锁其实没那么复杂 - JackieZheng - 博客园 (cnblogs.com) 目录 通道 创建通道 1&#xff09;无缓冲通道 2&#xff09;有缓冲通道 通道的使用 1) 值从通道入口进 2) 值从通道出口出 信道死锁&#xff1a; 0&#xff09;死锁现场0 1&#xff09;死…

# [0701] Task05 策略梯度、Actor-critic 算法

easy-rl PDF版本 笔记整理 P4、P9 joyrl 比对 补充 P9 - P10 相关 代码 整理 最新版PDF下载 地址&#xff1a;https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用)&#xff1a; 链接: https://pan.baidu.com/s/1isqQnpVRWbb3yh83Vs0kbw 提取码: us…

气压传感器在自动驾驶汽车还有哪些应用场景

气压传感器在近年来被广泛应用于各种新兴领域&#xff0c;以下是其中几个最新的应用&#xff1a; 1、自动驾驶汽车&#xff1a;自动驾驶汽车需要精确的气压传感器来监测道路上的气压变化&#xff0c;帮助车辆进行准确的定位和导航。气压传感器可以提供高精度、可靠的气压数据&…

GUKE万能工具箱(附带源码)

GUKE万能工具箱&#xff08;附带源码&#xff09; 效果图部分源码领取完整源码下期更新 效果图 部分源码 <!DOCTYPE html> <html><head><meta charset"utf-8" name"viewport" content"widthdevice-width, initial-scale1"…

哏号分治,CF103D - Time to Raid Cowavans

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 103D - Time to Raid Cowavans 二、解题报告 1、思路分析 想了半天数据结构最终选择根号分治 我们考虑 大于 550 的公差直接暴力 小于550 的公差的所有询问&#xff0c;我们直接计算该公差后缀和&#xf…

strcpy,srtcmp,strlen函数漏洞利用

strcpy,srtcmp,strlen函数漏洞利用 strcpy strcpy函数用于将字符串复制到另一个指针指向的空间中&#xff0c;遇到空字符 **b’x\00’**时停止&#xff0c;&#xff1a; 所以可以利用 strcpy不检查缓冲区 的漏洞&#xff08;构造的字符串要以\0结尾&#xff09;&#xff0c;…

【力扣】数组中的第K个最大元素

一、题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…

C++(第五天----多继承、虚继承、虚函数、虚表)

一、继承对象的内存空间 构造函数调用顺序&#xff0c;先调用父类&#xff0c;再调用子类 #include<iostream>using namespace std;//基类 父类 class Base{ public: //公有权限 类的外部 类的内部 Base(){cout<<"Base()"<<endl;}Base(int …

ANN文献综述

人工神经网络文献综述 摘要 人工神经网络&#xff08;Artificial Neural Networks, ANNs&#xff09;是由多个简单的、相互连接的处理单元组成的自适应系统&#xff0c;通过调整这些单元之间的连接强度&#xff0c;ANNs能够实现对复杂数据的建模和预测。本文综述了ANNs的基本…