在微信中阅读,关注公众号:
CodeFit
。创作不易,如果你觉得这篇文章对你有帮助,请不要忘了 点赞、分享 和 关注 我的公众号:
CodeFit
,为我的持续创作提供一些动力。
这是我准备写的 Spring AI 系列文章,这是第一篇。
Spring AI 项目还非常新,在写本文的时候版本是 0.8.1,预计 1.0 也快了。
主要内容参考了官方文档,然后经过我的实践进行一些修改,以便大家由浅入深地学习。
https://docs.spring.io/spring-ai/reference/index.html
内容侧重实践,下面直接开撸。
1. 添加依赖
目前使用 Spring AI,推荐引入 Spring snapshot 或 milestone 版本存储库,当然同时引入也可以。
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
Spring 还提供了 spring-ai-bom 来避免我们自己指定和维护 spring-ai 的版本。
所以,建议把 BOM 添加到 pom.xmml 中:
<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>
目前的版本是 0.81,添加 properties 配置项中添加对应版本号:
<properties>
<java.version>21</java.version>
<spring-ai.version>0.8.1</spring-ai.version>
</properties>
然后是引入 OpenAI 依赖,添加如下依赖:
<dependency>
<groupId>org.springframework.experimental.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
另外一种选择是 Azure OpenAI,如下依赖:
<dependency>
<groupId>org.springframework.experimental.ai</groupId>
<artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
</dependency>
我们以 spring-ai-openai 举例。
2. 获取 OpenAI API 密钥
由于接入的是 OpenAI,所以肯定要先获取 OpenAI 的 API 密钥啦,否则没法通过连接调用 OpenAI 的 API。
没有申请过的同学,需要进入 https://platform.openai.com/ 进行申请。
然后你会得到一个密钥:
把密钥添加到项目的配置文件中,同时,同时设置默认使用最新的 gpt-4o 模型。
spring:
ai:
openai:
api-key: {your key}
chat:
options:
model: gpt-4o
3. 项目结构
4. 在 service 包下创建 AiService
@Service
public class AiService {
ChatClient chatClient;
@Autowired
public AiService(ChatClient chatClient) {
this.chatClient = chatClient;
}
public Completion generateJoke(String message) {
return new Completion() {
@Override
public String getValue() {
return chatClient.call(message);
}
@Override
public String getMessage() {
return chatClient.call(message);
}
};
}
public String generateFiveName() {
ChatResponse response = chatClient.call(
new Prompt(
"Generate the names of 5 famous pirates.",
OpenAiChatOptions.builder()
.withModel("gpt-4o")
.withTemperature(0.4f)
.build()
));
System.out.println(response);
return response.getResult().toString();
}
}
我们来看看代码涉及了哪些内容:
-
注入了 ChatClient 实例,这是与 OpenAI 服务器通信的接口。
-
创建 generateJoke 方法,调用 ChatClient 的 call 方法和 OpenAI 进行通信,接收 String 类型参数,这里会直接返回字符串文本。
-
创建 generateFiveName 方法,和上一个方法类似,不同的是传递的是 Prompt 类型参数。OpenAiChatOptions 类提供了对模型的配置,它在运行时可以通过 Prompt 调用添加新的配置,它会覆盖全局配置。例如,覆盖全局默认的 Model 和 Temperature 设置。
5. 在 controller 包下创建 AiController
@RestController
@RequestMapping("/api/v1/ai")
public class AiController {
AiService aiService;
@Autowired
public AiController(AiService aiService) {
this.aiService = aiService;
}
@GetMapping("/joke")
public String getJoke(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return aiService.generateJoke(message);
}
@GetMapping("/five_name")
public String getFiveName() {
return aiService.generateFiveName();
}
}
这里创建了两个 endpoints,分别调用刚才我们写的 service 方法。
-
/api/v1/ai/joke
-
/api/v1/ai/five_name
总结
我们讲了如何设置依赖、获取 API 密钥、创建服务和接口,并通过实际案例展示如何调用 OpenAI 的 API。
感谢你的阅读!
如果你觉得这篇文章对你有帮助,请点赞、分享,并关注 CodeFit,这样你就不会错过更多的精彩内容。
同时,你的 支持 和 反馈 对我非常重要,欢迎在评论区留言,与我互动。
谢谢大家,下次见!