”spring 不生产 ai,只是 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 包。仓库地址改成快照仓库地址,
spring-snapshots
spring snapshots
https://repo.spring.io/snapshot
false
项目中找到 pom.xml 文件,将
改为
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().get;
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().get;
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