AI | springai - [入门案例]
maven 仓库
补充下面配置
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
<!-- Spring Snapshots 仓库(可选,用于最新快照版) -->
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
</repository>
</repositories>
依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
<!--如果使用了方便连接的大模型,可以使用对应的 starter 包-->
<!--这个信息通常在对应的官网是没有的,但是可以在springai的官网找到-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.ai</groupId>-->
<!-- <artifactId>spring-ai-starter-model-minimax</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.8.26</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置
spring.application.name=demo
#spring.ai.openai.api-key=<api-key>
## 这才是推荐的使用 api-key 的方式,用环境变量
#spring.ai.openai.api-key=${AI_API_KEY}
spring.ai.openai.api-key=<api-key>
## 目前阶段,中转站通常是比较推荐的选择
## 中转站通常只需要变更 base-url,注意部分场景下已经不需要带 /v1 了
## 部分中转站要求 api-key 所在的组里包括对应的模型,才能调用其功能
## 这些信息,一般在模型广场上的每个模型详情里有说明
#spring.ai.openai.base-url=https://api.nonelinear.com/
spring.ai.openai.base-url=https://gitaigc.com
spring.ai.retry.max-attempts=1
spring.ai.retry.backoff.initial-interval=2s
spring.ai.retry.backoff.multiplier=5
spring.ai.retry.backoff.max-interval=3m
#文生文
#spring.ai.openai.chat.options.model=gpt-5-chat-latest
spring.ai.openai.chat.options.model=gpt-4o-mini
#spring.ai.openai.chat.options.temperature=0.1
spring.ai.openai.chat.options.temperature=1
#文生图
spring.ai.openai.image.options.model=gpt-4-dalle
#spring.ai.openai.image.options.model=gpt-image-1.5-high
#音生文
spring.ai.openai.audio.transcription.options.model=whisper-1
spring.ai.openai.audio.transcription.options.response-format=json
#文声音
spring.ai.openai.audio.speech.options.model=tts-1
spring.ai.openai.audio.speech.options.response-format=mp3
spring.ai.openai.audio.speech.options.voice=shimmer
基本 case
注意,spring ai 的 api 例子有可能随时间发生重大变化,下述 case 已与首次接触时有了极大不同
以官网为主 https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html
//从使用情况上看,这个 api 不如 OpenAiChatModel
private ChatClient chaty;
@Resource
private OpenAiChatModel chatClient;
@Resource
private OpenAiImageModel imageClient;
@Resource
private OpenAiAudioTranscriptionModel transClient;
@Resource
private OpenAiAudioSpeechModel audioClient;
@Resource
private ChatClient.Builder chat;
@RequestMapping("ai")
public String hello(@RequestParam("p") String p){
System.out.println(System.getenv("GITAIGC_API_KEY"));
return this.chaty.prompt()
.user(p).call().content();
}
@RequestMapping("ai2")
//调用时配置,会覆盖配置文件
public String hello2(@RequestParam("p") String p){
return this.chaty.prompt()
.user(p).options(OpenAiChatOptions.builder().temperature(0.1d).model("gpt-5.5").build()).call().content();
// return "";
}
@RequestMapping("img")
public Object img(@RequestParam("p") String p){
ImageResponse response = imageClient.call(
new ImagePrompt(p,
OpenAiImageOptions.builder()
.quality("high")
.N(1)
//1024x1024, 1024x1536, 1536x1024,auto
.height(1024)
.width(1024).build())
);
return response.getResult().getOutput();
}
@RequestMapping("tr")
public Object tr(@RequestParam("p") String p){
ClassPathResource s = null;
s = p.equals("zh")?new ClassPathResource(""):new ClassPathResource("");
return transClient.call(s);
}
@RequestMapping("au")
public Object au(@RequestParam("p") String p){
byte[] a = audioClient.call(p);
String f = "D:\\a.mp3";
try{
FileUtil.writeBytes(a,new File(f));
}catch (Exception e) {
//e.printStackTrace();
System.err.println("写入文件时发生错误");
}
return "200";
}
@RequestMapping("mu")
public String multi(){
ClassPathResource s = new ClassPathResource("/a.png");
UserMessage m = UserMessage.builder()
.text("Explain what do you see on this picture?")
.media(new Media(MimeTypeUtils.IMAGE_PNG, s))
.build();
ChatResponse response = chatClient.call(new Prompt(m,
OpenAiChatOptions.builder().model(OpenAiApi.ChatModel.GPT_4_O.getValue()).build()));
return response.getResult().getOutput().getText();
}
/* *******************************
* 以下是工具
******************************* */
@PostConstruct
public void init(){ this.chaty = chat.build(); }
浙公网安备 33010602011771号