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();
    }
}
相关推荐
无声旅者13 分钟前
AI 模型分类全解:特性与选择指南
人工智能·ai·ai大模型
不知几秋21 分钟前
Spring Boot
java·前端·spring boot
Grassto28 分钟前
Cursor Rules 使用
人工智能
MYH51633 分钟前
深度学习在非线性场景中的核心应用领域及向量/张量数据处理案例,结合工业、金融等领域的实际落地场景分析
人工智能·深度学习
Lilith的AI学习日记40 分钟前
什么是预训练?深入解读大模型AI的“高考集训”
开发语言·人工智能·深度学习·神经网络·机器学习·ai编程
聚客AI1 小时前
PyTorch玩转CNN:卷积操作可视化+五大经典网络复现+分类项目
人工智能·pytorch·神经网络
程序员岳焱1 小时前
深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?
java·人工智能·后端
柠檬味拥抱1 小时前
AI智能体在金融决策系统中的自主学习与行为建模方法探讨
人工智能
都叫我大帅哥1 小时前
AQS(AbstractQueuedSynchronizer)深度解剖:从“奶茶店排队”到源码级设计哲学
java
智驱力人工智能1 小时前
智慧零售管理中的客流统计与属性分析
人工智能·算法·边缘计算·零售·智慧零售·聚众识别·人员计数