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