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

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


文章目录


一、准备工作?

①:环境准备

  • 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)

yml 复制代码
spring:
    application:
        name: spring-ai-01-chat
    ai:
      openai:
          api-key: ${open-ai-key}
          base-url: ${open-ai-uri}
server:
    port: 8899

03.添加控制层简单测试

java 复制代码
   @RequestMapping("/ai/chat")
    public String chat(@RequestParam(value = "msg") String msg) {

        return openAiChatModel.call(msg);
    }

04.测试

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

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

方法一 添加控制层代码

java 复制代码
    /**
     * 调用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();
    }

方法二 配置文件中配置

yaml 复制代码
spring:
    application:
        name: spring-ai-01-chat
    ai:
      openai:
          api-key: ${open-ai-key}
          base-url: ${open-ai-uri}
          chat:
            options:
                model: gpt-4-32k
                temperature: 0.3
server:
    port: 8899

02.测试

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

java 复制代码
    /**
     * 调用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. 代码

java 复制代码
@RestController
public class ImgController {


    @Resource
    private 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. 代码

java 复制代码
    /**
     * 生成图片(方式二)设置图片属性
     * @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. 代码:

java 复制代码
@RestController
public class TranscriptionController {


    @Resource
    private OpenAiAudioTranscriptionModel openAiAudioTranscriptionModel;


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

}

02. 测试

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

五、文字转语言

①:方式一

01. 代码

  • controller 接口
java 复制代码
@RestController
public class SpeechController {


    @Resource
    private 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 "转换失败";
        }
    }

}
  • 工具类
java 复制代码
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. 代码

java 复制代码
@RestController
public class MultiModelController {

    @Resource
    private 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();
    }
}
相关推荐
Elastic 中国社区官方博客4 小时前
Elasticsearch:使用 Agent Builder 的 A2A 实现 - 开发者的圣诞颂歌
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
chools5 小时前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
郝学胜-神的一滴5 小时前
深度学习必学:PyTorch 神经网络参数初始化全攻略(原理 + 代码 + 选择指南)
人工智能·pytorch·python·深度学习·神经网络·机器学习
李白你好5 小时前
TongWeb EJB 反序列化生成工具(Java-Chain 插件)
java·安全
leobertlan5 小时前
好玩系列:用20元实现快乐保存器
android·人工智能·算法
笨笨饿5 小时前
#58_万能函数的构造方法:ReLU函数
数据结构·人工智能·stm32·单片机·硬件工程·学习方法
jr-create(•̀⌄•́)5 小时前
从零开始:手动实现神经网络识别手写数字(完整代码讲解)
人工智能·深度学习·神经网络
冬奇Lab6 小时前
一天一个开源项目(第78篇):MiroFish - 用群体智能引擎预测未来
人工智能·开源·资讯
冬奇Lab6 小时前
你的 Skill 真的好用吗?来自OpenAI的 Eval 系统化验证 Agent 技能方法论
人工智能·openai
数智工坊6 小时前
Transformer 全套逻辑:公式推导 + 原理解剖 + 逐行精读 - 划时代封神之作!
人工智能·深度学习·transformer