Spring Boot 整合 Spring AI 实现项目接入ChatGPT
前言
随着人工智能技术的快速发展,越来越多的应用程序开始集成人工智能功能,以提供更智能、更个性化的体验。诸如ChatGPT等开放性大型语言模型的出现,使得自然语言处理和对话系统的开发变得更加容易和普及。这些技术已经在社交媒体、客户服务、教育等领域展现出巨大潜力,对于提升用户体验和提高工作效率至关重要。
优势
在之前,openai已经提供了相应的Java整合方案:https://github.com/TheoKanning/openai-java,但是Spring AI测试版本的发布,给我们提供了一个新的整合方向,与原先方法相比,Spring AI具有如下优势:
-
更快速的开发周期: Spring AI的原生生态封装使得开发人员能够更快地集成人工智能功能,加快项目的迭代周期。
-
与现有技术栈无缝整合: 如果你的项目已经是基于Spring Boot构建的,那么使用Spring AI将更加方便,无需引入额外的技术栈,能够更好地利用已有的技术和资源。
-
强大的社区支持: Spring框架拥有庞大的社区支持和活跃的开发者社区,能够为开发人员提供更多的技术支持和解决方案。
简介
本篇旨在为读者提供一个基本的使用案例,帮助学习如何在Spring Boot应用程序中集成Spring AI,以实现智能化的功能。通过本文,读者将了解如何利用现有的人工智能技术,为他们的应用程序增加自动化和智能化的功能,从而提高用户体验和应用程序的价值。接下来,我们将详细介绍如何在Spring Boot项目中配置和使用Spring AI,为你带来更智能的应用体验。
准备工作
- jdk 17
- Spring Boot 3.2.0
- maven 3.9
步骤
1. 导入依赖
pom.xml写入如下内容:
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>0.8.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. 配置自己的api-key和基础访问地址base-url
api-key的申请获得方式这里不在赘述,可查阅相关资料去官网上进行申请
application.ym配置如下内容:
server:
port: 9876
spring:
ai:
openai:
# 全局配置
api-key: sk-xxx # 申请的api-key
base-url: https://api.openai.com/ #openAi访问地址(不写默认)
# 嵌入API配置
embedding:
options:
model: text-davinci-003
# 聊天API配置
chat:
#指定某一个API配置(覆盖全局配置)
api-key: sk-xxx
base-url: https://api.openai.com/
options:
model: gpt-3.5-turbo # 模型配置
3. 配置自己的openai聊天客户端
这里需要注意的是,在application.yml文件中已经配置好了api-key和base-url后可以直接在service层进行自动装配,但是只能配置一种参数类型的客户端,这里通过读取配置文件内容的方式自定义一个可以自动装配的Bean,后续还可以根据自己的需要配置不同参数配置的客户端,配置参数详情可查看官网<OpenAI Chat :: Spring AI Reference>
OpenAiChatConfig.java
@Configuration
public class OpenAiChatConfig {
/*
* 读取配置文件中系统默认配置
*/
@Value("${spring.ai.openai.chat.api-key}")
private String apiKey;
@Value("${spring.ai.openai.chat.base-url}")
private String baseUrl;
/**
* 通过配置自定义的apiKey和baseUrl访问中转/反向代理,实现面向用户的OpenAiChat客户端
* 可通过OpenAiApi类的构造方法配置不同的基本参数
* @return 自定义的OpenAiChat客户端
*/
@Bean("myOpenAiChatClient")
public OpenAiChatClient myOpenAiChatClient(){
OpenAiApi openAiApi = new OpenAiApi(baseUrl, apiKey);
return new OpenAiChatClient(openAiApi);
}
}
4. 接口调用
OpenAiChatService.java
public interface OpenAiChatService {
String easyChat(String message);
}
OpenAiChatServiceImpl.java
@Service
public class OpenAiChatServiceImpl implements OpenAiChatService {
@Resource(name = "myOpenAiChatClient")
private OpenAiChatClient chatClient;
@Override
public String easyChat(String message) {
Prompt prompt = new Prompt(message);
return chatClient.call(prompt).getResult().getOutput().getContent();
}
}
ChatController.java
@RestController
@RequestMapping("/ai")
public class ChatController {
@Resource
private OpenAiChatService openAiChatService;
@GetMapping(value = "/easyChat",params = "message")
public String easyChat(@RequestParam String message){
return openAiChatService.easyChat(message);
}
}
5. 结果演示
总结
Spring AI 是一种原生生态的封装,旨在为 Spring Boot 应用程序提供快速集成人工智能功能的解决方案。通过与 Spring 框架的完美整合,Spring AI 可以利用 Spring 提供的依赖注入,使得集成人工智能功能变得更加简便和灵活。借助 Spring AI,开发团队能够更快速地实现智能化的应用程序,为用户提供更优秀的体验。