Spring AI 初学

打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

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 包。仓库地址改成快照仓库地址,官方说明
  1.     <repository>
  2.         <id>spring-snapshots</id>
  3.         <name>Spring Snapshots</name>
  4.         <url>https://repo.spring.io/snapshot</url>
  5.         <releases>
  6.             <enabled>false</enabled>
  7.         </releases>
  8.     </repository>
复制代码
项目中找到 pom.xml 文件,将 0.8.1 改为 1.0.0-SNAPSHOT
yaml 配置文件中添加,openai 更多配置可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration。
  1. spring:
  2.   ai:
  3.     openai:
  4.       # 购买的 api-key
  5.       api-key: sk-xxxx
  6.       # 如果是官方地址,则可以不填,默认为 https://api.openai.com
  7.       base-url:
复制代码
谈天

基础使用

主要类 org.springframework.ai.openai.OpenAiChatModel,快照版本不同,可能名字不一样,可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration 中的谈天类是哪个。
  1. import jakarta.annotation.Resource;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.ai.openai.OpenAiChatModel;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. @SpringBootTest
  6. public class ChatTest {
  7.     @Resource
  8.     private OpenAiChatModel chatModel;
  9.     @Test
  10.     public void chat1(){
  11.         String msg = "你是谁?";
  12.         //返回string数据
  13.         String res = chatModel.call(msg);
  14.         System.out.println(res);
  15.     }
  16.    
  17.     @Test
  18.     public void chat2(){
  19.         String msg = "你是谁?";
  20.         //返回对象
  21.         ChatResponse res = chatModel.call(new Prompt(msg));
  22.         System.out.println(res);
  23.         //获取对话返回结果
  24.         System.out.println(res.getResult().getOutput().getContent());
  25.     }
  26. }
复制代码
配置属性
  1.     @Test
  2.     public void test3(){
  3.         String msg = "你是谁";
  4.         //采用 gpt-4-turbo 模型
  5.         ChatResponse res = chatModel.call(new Prompt(msg, OpenAiChatOptions.builder()
  6.                                                      .withModel("gpt-4-turbo")
  7.                                                      .build()));
  8.         System.out.println(res);
  9.         //获取对话返回结果
  10.         System.out.println(res.getResult().getOutput().getContent());
  11.     }
复制代码
谈天模子配置属性可以查看 org.springframework.ai.autoconfigure.openai.OpenAiChatProperties,也可以在官网查看更详细的信息。配置属性也可以放在 yml 配置文件中,如 OpenAiChatProperties 的注解,需要以 spring.ai.openai.chat 开头,例如将 gpt-4-turbo 配置在配置文件中,就是 OpenAiChatProperties 中 options 中的属性。
  1. spring:
  2.   ai:
  3.     openai:
  4.       chat:
  5.         options:
  6.           model: gpt-4-turbo
复制代码
多模子

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

基础使用

主要类  org.springframework.ai.openai.OpenAiImageModel,快照版本不同,可能类不一样。可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration 中详细的图像类是哪个。
  1. import jakarta.annotation.Resource;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.ai.image.ImagePrompt;
  4. import org.springframework.ai.image.ImageResponse;
  5. import org.springframework.ai.openai.OpenAiImageModel;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. @SpringBootTest
  8. public class ImageTest {
  9.     @Resource
  10.     private OpenAiImageModel imageModel;
  11.     @Test
  12.     public void test(){
  13.         //调用 image 模型的 call 方法获取图片
  14.         ImageResponse res = imageModel.call(new ImagePrompt("山水画"));
  15.         //AI 绘制的图片路径
  16.         String url = res.getResult().getOutput().getUrl();
  17.         System.out.println(url);
  18.     }
  19. }
复制代码
配置属性
  1.     @Test
  2.     public void test2(){
  3.         //使用 dall-e-2 绘画
  4.         OpenAiImageOptions options = OpenAiImageOptions.builder()
  5.             .withModel(OpenAiImageApi.ImageModel.DALL_E_2.getValue())
  6.             .build();
  7.         ImageResponse res = imageModel.call(new ImagePrompt("山水画", options));
  8.         //获取 AI 绘画路径
  9.         String url = res.getResult().getOutput().getUrl();
  10.         System.out.println(url);
  11.     }
复制代码
图像模子属性配置可以查看 org.springframework.ai.autoconfigure.openai.OpenAiImageProperties,也可以查看官网获取更详细的信息。当然配置属性也可以在 yml 中定义,如 OpenAiImageProperties 上的注解,需要以 spring.ai.openai.image 开头,例如使用 dall-e-2 模子举行绘画
  1. spring:
  2.   ai:
  3.     openai:
  4.       image:
  5.         options:
  6.           model: dall-e-2
复制代码
语音

语音转文字

基础使用

主要类 org.springframework.ai.openai.OpenAiAudioTranscriptionModel,快照版本不同,可能名字不一样,可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration 中的语音转文字翻译类是哪个。
  1. import jakarta.annotation.Resource;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.ai.openai.OpenAiAudioTranscriptionModel;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. import org.springframework.core.io.ClassPathResource;
  6. @SpringBootTest
  7. public class AudioTest {
  8.     //语音转文字
  9.     @Resource
  10.     private OpenAiAudioTranscriptionModel transcriptionModel;
  11.     @Test
  12.     public void testTranscription1(){
  13.         String res = transcriptionModel.call(new ClassPathResource("2024052702.mp3"));
  14.         System.out.println(res);
  15.     }
  16. }
复制代码
配置属性
  1.     @Test
  2.     public void testTranscription2(){
  3.         //创建模型属性,采用 whisper-1 语音模型
  4.         OpenAiAudioTranscriptionOptions options = new OpenAiAudioTranscriptionOptions().builder()
  5.                 .withModel(OpenAiAudioApi.WhisperModel.WHISPER_1.getValue())
  6.                 .build();
  7.         AudioTranscriptionResponse res = transcriptionModel.call(
  8.             new AudioTranscriptionPrompt(new ClassPathResource("2024052702.mp3"), options));
  9.         //获取翻译内容
  10.         String output = res.getResult().getOutput();
  11.         System.out.println(output);
  12.     }
复制代码
语音转文字模子属性可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAudioTranscriptionProperties,也可以在官网查看更详细信息。当然可以在 yml 配置中配置属性,如 OpenAiAudioTranscriptionProperties 上的注解,以 spring.ai.openai.audio.transcription 开头,例如接纳 whisper-1 模子
  1. spring:
  2.   ai:
  3.     openai:
  4.       audio:
  5.         transcription:
  6.           options:
  7.             model: whisper-1
复制代码
文字转语音

基础使用

主要类 org.springframework.ai.openai.OpenAiAudioSpeechModel,快照版本不同,可能名字不一样,可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration 中的文字转语音类是哪个。
  1. import jakarta.annotation.Resource;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.ai.openai.OpenAiAudioSpeechModel;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. @SpringBootTest
  8. public class AudioTest2 {
  9.     @Resource
  10.     private OpenAiAudioSpeechModel speechModel;
  11.     //byte数组转文件
  12.     private void byteArrayToFile(byte[] byteArray, String filePath) throws IOException {
  13.         FileOutputStream fos = new FileOutputStream(filePath);
  14.         fos.write(byteArray);
  15.         fos.close();
  16.     }
  17.     @Test
  18.     public void testSpeech() throws IOException {
  19.         byte[] res = speechModel.call("我爱北京");
  20.         byteArrayToFile(res,"D:\\project\\AI\\openai\\speech\\1.mp3");
  21.     }
  22. }
复制代码
属性配置
  1.     @Test
  2.     public void testSpeech2() throws IOException {
  3.         //采用 tts-1-hd 模型
  4.         OpenAiAudioSpeechOptions options = new OpenAiAudioSpeechOptions().builder()
  5.                 .withModel(OpenAiAudioApi.TtsModel.TTS_1_HD.getValue())
  6.                 .build();
  7.         SpeechPrompt prompt = new SpeechPrompt("我爱北京", options);
  8.         SpeechResponse res = speechModel.call(prompt);
  9.         byte[] bytes = res.getResult().getOutput();
  10.         byteArrayToFile(bytes,"D:\\project\\AI\\openai\\speech\\1-hd.mp3");
  11.     }
复制代码
文字转语音模子属性可以查看 org.springframework.ai.autoconfigure.openai.OpenAiAudioSpeechProperties,也可以在官网查看更详细信息。当然可以在 yml 配置中配置属性,如 OpenAiAudioSpeechProperties 上的注解,以 spring.ai.openai.audio.speech 开头,例如接纳 tts-1-hd 模子
  1. spring:
  2.   ai:
  3.     openai:
  4.       audio:
  5.         speech:
  6.           options:
  7.             model: tts-1-hd
复制代码
Ollama


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

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表