欢乐狗 发表于 2024-5-27 19:36:12

Spring AI 初学

Spring AI 初学

Spring AI 官方地址
”spring 不生产 AI,只是 AI 工具的搬运工“
项目可以查看gitee
Open AI

前期准备

Open AI官方地址,需要使用魔法才能打开,同时购买很麻烦,发起淘宝举行购买,只需要购买 open ai 的 apikey 即可。
apikey 形如 sk-xxxxxxxxxxxxxxxxx
项目创建

Idea 创建 SpringBoot Maven 项目(基于1.0-SNAPSHOT版本,SpringBoot 3.2.6),依赖选择Spring Web、 OpenAI。其他可以自行选择
修改项目仓库地址,中心仓库暂时还没 Spring AI 相关 jar 包。仓库地址改成快照仓库地址,官方说明
    <repository>
      <id>spring-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <releases>
            <enabled>false</enabled>
      </releases>
    </repository>项目中找到 pom.xml 文件,将 0.8.1 改为 1.0.0-SNAPSHOT
yaml 配置文件中添加,openai 更多配置可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration。
spring:
ai:
    openai:
      # 购买的 api-key
      api-key: sk-xxxx
      # 如果是官方地址,则可以不填,默认为 https://api.openai.com
      base-url: 谈天

基础使用

主要类 org.springframework.ai.openai.OpenAiChatModel,快照版本不同,可能名字不一样,可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration 中的谈天类是哪个。
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class ChatTest {

    @Resource
    private OpenAiChatModel chatModel;

    @Test
    public void chat1(){
      String msg = "你是谁?";
      //返回string数据
      String res = chatModel.call(msg);
      System.out.println(res);
    }
   
    @Test
    public void chat2(){
      String msg = "你是谁?";
      //返回对象
      ChatResponse res = chatModel.call(new Prompt(msg));
      System.out.println(res);
      //获取对话返回结果
      System.out.println(res.getResult().getOutput().getContent());
    }

}配置属性

    @Test
    public void test3(){
      String msg = "你是谁";
      //采用 gpt-4-turbo 模型
      ChatResponse res = chatModel.call(new Prompt(msg, OpenAiChatOptions.builder()
                                                   .withModel("gpt-4-turbo")
                                                   .build()));
      System.out.println(res);
      //获取对话返回结果
      System.out.println(res.getResult().getOutput().getContent());
    }谈天模子配置属性可以查看 org.springframework.ai.autoconfigure.openai.OpenAiChatProperties,也可以在官网查看更详细的信息。配置属性也可以放在 yml 配置文件中,如 OpenAiChatProperties 的注解,需要以 spring.ai.openai.chat 开头,例如将 gpt-4-turbo 配置在配置文件中,就是 OpenAiChatProperties 中 options 中的属性。
spring:
ai:
    openai:
      chat:
      options:
          model: gpt-4-turbo多模子

可以共同图片等让谈天模子举行回答。
    //给图片来进行聊天
    @Test
    public void test4() {
      //获取图片资源
      ClassPathResource resource = new ClassPathResource("2024052701.png");
      UserMessage userMessage = new UserMessage("说说你看到了什么",
                List.of(new Media(MimeTypeUtils.IMAGE_PNG, resource)));
      ChatResponse res = chatModel.call(new Prompt(userMessage, OpenAiChatOptions.builder()
                .withModel("gpt-4-turbo")
                .build()));
      System.out.println(res);
      //获取回答
      System.out.println(res.getResult().getOutput().getContent());
    }图像

基础使用

主要类org.springframework.ai.openai.OpenAiImageModel,快照版本不同,可能类不一样。可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration 中详细的图像类是哪个。
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.openai.OpenAiImageModel;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class ImageTest {

    @Resource
    private OpenAiImageModel imageModel;

    @Test
    public void test(){
      //调用 image 模型的 call 方法获取图片
      ImageResponse res = imageModel.call(new ImagePrompt("山水画"));
      //AI 绘制的图片路径
      String url = res.getResult().getOutput().getUrl();
      System.out.println(url);
    }

}配置属性

    @Test
    public void test2(){
      //使用 dall-e-2 绘画
      OpenAiImageOptions options = OpenAiImageOptions.builder()
            .withModel(OpenAiImageApi.ImageModel.DALL_E_2.getValue())
            .build();
      ImageResponse res = imageModel.call(new ImagePrompt("山水画", options));
      //获取 AI 绘画路径
      String url = res.getResult().getOutput().getUrl();
      System.out.println(url);
    }图像模子属性配置可以查看 org.springframework.ai.autoconfigure.openai.OpenAiImageProperties,也可以查看官网获取更详细的信息。当然配置属性也可以在 yml 中定义,如 OpenAiImageProperties 上的注解,需要以 spring.ai.openai.image 开头,例如使用 dall-e-2 模子举行绘画
spring:
ai:
    openai:
      image:
      options:
          model: dall-e-2语音

语音转文字

基础使用

主要类 org.springframework.ai.openai.OpenAiAudioTranscriptionModel,快照版本不同,可能名字不一样,可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration 中的语音转文字翻译类是哪个。
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.ai.openai.OpenAiAudioTranscriptionModel;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.ClassPathResource;

@SpringBootTest
public class AudioTest {

    //语音转文字
    @Resource
    private OpenAiAudioTranscriptionModel transcriptionModel;

    @Test
    public void testTranscription1(){
      String res = transcriptionModel.call(new ClassPathResource("2024052702.mp3"));
      System.out.println(res);
    }

}配置属性

    @Test
    public void testTranscription2(){
      //创建模型属性,采用 whisper-1 语音模型
      OpenAiAudioTranscriptionOptions options = new OpenAiAudioTranscriptionOptions().builder()
                .withModel(OpenAiAudioApi.WhisperModel.WHISPER_1.getValue())
                .build();
      AudioTranscriptionResponse res = transcriptionModel.call(
            new AudioTranscriptionPrompt(new ClassPathResource("2024052702.mp3"), options));
      //获取翻译内容
      String output = res.getResult().getOutput();
      System.out.println(output);
    }语音转文字模子属性可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAudioTranscriptionProperties,也可以在官网查看更详细信息。当然可以在 yml 配置中配置属性,如 OpenAiAudioTranscriptionProperties 上的注解,以 spring.ai.openai.audio.transcription 开头,例如接纳 whisper-1 模子
spring:
ai:
    openai:
      audio:
      transcription:
          options:
            model: whisper-1文字转语音

基础使用

主要类 org.springframework.ai.openai.OpenAiAudioSpeechModel,快照版本不同,可能名字不一样,可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration 中的文字转语音类是哪个。
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.ai.openai.OpenAiAudioSpeechModel;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.FileOutputStream;
import java.io.IOException;

@SpringBootTest
public class AudioTest2 {

    @Resource
    private OpenAiAudioSpeechModel speechModel;

    //byte数组转文件
    private void byteArrayToFile(byte[] byteArray, String filePath) throws IOException {
      FileOutputStream fos = new FileOutputStream(filePath);
      fos.write(byteArray);
      fos.close();
    }

    @Test
    public void testSpeech() throws IOException {
      byte[] res = speechModel.call("我爱北京");
      byteArrayToFile(res,"D:\\project\\AI\\openai\\speech\\1.mp3");
    }

}属性配置

    @Test
    public void testSpeech2() throws IOException {
      //采用 tts-1-hd 模型
      OpenAiAudioSpeechOptions options = new OpenAiAudioSpeechOptions().builder()
                .withModel(OpenAiAudioApi.TtsModel.TTS_1_HD.getValue())
                .build();
      SpeechPrompt prompt = new SpeechPrompt("我爱北京", options);
      SpeechResponse res = speechModel.call(prompt);
      byte[] bytes = res.getResult().getOutput();
      byteArrayToFile(bytes,"D:\\project\\AI\\openai\\speech\\1-hd.mp3");
    }文字转语音模子属性可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAudioSpeechProperties,也可以在官网查看更详细信息。当然可以在 yml 配置中配置属性,如 OpenAiAudioSpeechProperties 上的注解,以 spring.ai.openai.audio.speech 开头,例如接纳 tts-1-hd 模子
spring:
ai:
    openai:
      audio:
      speech:
          options:
            model: tts-1-hdOllama


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Spring AI 初学