保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!
保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!
一、Spring AI 简介
Spring AI 是 Spring 项目中一个面向 AI 应用的模块,旨在通过集成开源框架、提供标准化的工具和便捷的开发体验,加速 AI 驱动应用程序的构建和部署。它支持多种 AI 任务,包括自然语言处理(NLP)、计算机视觉(CV)和推荐系统等。
二、环境配置
1. 前置条件
- JDK 版本:11 或更高。
- Spring Boot:推荐使用 3.x 版本。
- 依赖工具:Maven 或 Gradle。
2. 添加依赖
在 pom.xml
中添加以下依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>1.0.0-M5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
或者在 build.gradle
中:
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:1.0.0-M5'
implementation 'org.springframework.boot:spring-boot-starter-web'
三、Spring AI 注解式开发
Spring AI 提供了注解式开发的支持,通过注解简化 AI 服务的集成和调用。以下是一个完整的示例,展示如何使用 Spring AI 的注解式开发。
1. 创建 Spring Boot 项目
使用 Spring Initializr 或手动创建一个 Spring Boot 项目,添加上述依赖。
2. 配置文件
在 application.yml
中配置 OpenAI 的 API Key 和模型:
spring:
ai:
openai:
api-key: your_openai_api_key
base-url:
chat:
options:
model: gpt-3.5-turbo
3. 创建自定义注解
创建一个自定义注解 @AiPrompt
,用于标记需要 AI 处理的方法:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AiPrompt {
String systemMessage() default "";
}
4. 实现 AOP 切面
创建一个 AOP 切面类,拦截带有 @AiPrompt
注解的方法调用:
@Aspect
@Component
@RequiredArgsConstructor
public class AiPromptAspect {
private final ChatClient chatClient;
@Around("@annotation(aiPrompt)")
public Object processAiPrompt(ProceedingJoinPoint joinPoint, AiPrompt aiPrompt) throws Throwable {
Object[] args = joinPoint.getArgs();
if (args.length == 0) {
return joinPoint.proceed();
}
String userMessage = args[0].toString();
ChatClient.ChatClientRequestSpec requestSpec = chatClient.prompt();
if (!aiPrompt.systemMessage().isEmpty()) {
requestSpec = requestSpec.system(aiPrompt.systemMessage());
}
return requestSpec
.user(userMessage)
.call()
.content();
}
}
5. 使用注解
在服务类中使用 @AiPrompt
注解:
@Service
@RequiredArgsConstructor
public class ChatService {
@AiPrompt(systemMessage = "你是一个专业的Java开发顾问,擅长解答Spring框架相关问题。")
public String getJavaAdvice(String question) {
return null; // 这个返回值会被AOP切面中的返回值覆盖
}
}
6. 创建控制器
创建一个控制器类,调用服务类中的方法:
代码语言:java复制@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class ChatController {
private final ChatService chatService;
@PostMapping("/chat")
public String getJavaAdvice(@RequestBody String question) {
return chatService.getJavaAdvice(question);
}
}
四、运行与测试
启动 Spring Boot 应用程序后,可以通过以下方式测试:
代码语言:bash复制curl -X POST http://localhost:8080/api/chat -H "Content-Type: application/json" -d "列出Spring中的重点概念"
如果配置正确,你将收到类似以下的响应:
代码语言:txt复制Spring 是一个开源的 Java 平台,提供了丰富的功能支持,包括依赖注入、AOP、事务管理等。
五、高级功能
1. 流式响应处理
Spring AI 支持流式响应处理,适合处理长文本或分段返回结果的场景。可以通过以下方式实现:
代码语言:java复制@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatResponse> stream(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.stream()
.chatResponse();
}
2. 请求缓存与优化
通过缓存减少重复请求,提高性能。可以使用 Spring Cache 实现:
代码语言:java复制@Cacheable("chatResponses")
public String getChatResponse(String message) {
return chatClient.prompt()
.user(message)
.call()
.content();
}
3. 多任务并行执行
适用于批量处理场景。可以使用 Spring 的 @Async
注解实现:
@Async
public CompletableFuture<String> getAsyncChatResponse(String message) {
return CompletableFuture.supplyAsync(() -> chatClient.prompt()
.user(message)
.call()
.content());
}
六、总结
Spring AI 提供了强大的注解式开发支持,通过注解简化了 AI 服务的集成和调用。通过 AOP 切面,可以自动处理 AI 接口的调用逻辑,显著提升开发效率。这种模式不仅降低了与 AI 服务交互的代码复杂度,还通过标准化注解配置实现了以下优势:
- 提示词工程的可维护性提升;
- 业务代码与 AI 基础设施解耦;
- 无缝集成 Spring 生态的其他能力,如 Spring Cache 实现 AI 注解式缓存。
通过以上示例和说明,开发者可以快速上手 Spring AI 的注解式开发,构建高效、可维护的 AI 应用程序。