Spring AI 初學 Spring AI 官方地址 ”spring 不生產 AI,只是 AI 工具的搬運工“ 項目可以查看gitee Open AI 前期準備 Open AI官方地址,需要使用魔法才能打開,同時購買很麻煩,建議淘寶進行購買,只需要購買 open ai 的 apikey 即可。 a ...
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 文件,將 <spring-ai.version>0.8.1</spring-ai.version>
改為 <spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version>
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