1. Spring Boot与Spring AI整合概述
在当今企业级应用开发领域,快速构建智能应用已成为刚需。Spring Boot作为Java生态中最流行的微服务框架,与新兴的Spring AI模块结合,为开发者提供了快速集成AI能力的标准化方案。这种组合让传统Java开发者无需深入机器学习细节,就能为应用添加智能功能。
Spring AI项目是Spring官方实验性项目,旨在降低AI集成门槛。它抽象了不同AI提供商(如OpenAI、Azure AI等)的接口差异,提供统一的编程模型。通过自动配置和starter依赖,开发者可以像使用普通Spring组件一样调用AI服务。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与项目创建
2.1 基础环境要求
- JDK 17+(Spring Boot 3.x最低要求)
- Maven 3.6+或Gradle 7.x
- IDE推荐IntelliJ IDEA(对Spring Boot支持最佳)
2.2 初始化Spring Boot项目
使用Spring Initializr创建项目时,需选择以下依赖:
xml复制<dependencies>
<!-- Spring Boot基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI核心依赖 -->
<dependency>
<groupId>org.springframework.experimental.ai</groupId>
<artifactId>spring-ai-core</artifactId>
<version>0.7.1-SNAPSHOT</version>
</dependency>
<!-- 使用OpenAI需添加 -->
<dependency>
<groupId>org.springframework.experimental.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.7.1-SNAPSHOT</version>
</dependency>
</dependencies>
注意:由于Spring AI尚处实验阶段,需添加Spring快照仓库:
xml复制<repositories> <repository> <id>spring-snapshots</id> <url>https://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories>
3. 核心功能实现
3.1 配置AI服务连接
在application.yml中配置OpenAI密钥:
yaml复制spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
model: gpt-3.5-turbo # 默认使用模型
temperature: 0.7 # 控制生成随机性
3.2 实现基础对话功能
创建ChatController处理对话请求:
java复制@RestController
@RequestMapping("/api/chat")
public class ChatController {
private final ChatClient chatClient;
@Autowired
public ChatController(ChatClient chatClient) {
this.chatClient = chatClient;
}
@PostMapping
public String generate(@RequestParam String message) {
return chatClient.call(message);
}
}
3.3 高级Prompt工程
Spring AI支持结构化Prompt模板:
java复制@Bean
PromptTemplate customerSupportPrompt() {
return new PromptTemplate("""
你是一名专业的{role}客服。
请用{style}风格回答以下问题:
{question}
""");
}
@GetMapping("/support")
public String getSupport(@RequestParam String question) {
Map<String, Object> params = Map.of(
"role", "电子产品",
"style", "亲切友好",
"question", question
);
return promptTemplate.render(params);
}
4. 功能扩展与优化
4.1 流式响应处理
对于长文本生成,使用流式响应提升用户体验:
java复制@GetMapping("/stream")
public SseEmitter streamChat(@RequestParam String message) {
SseEmitter emitter = new SseEmitter();
chatClient.stream(message)
.subscribe(
chunk -> {
try {
emitter.send(chunk);
} catch (IOException e) {
throw new RuntimeException(e);
}
},
emitter::completeWithError,
emitter::complete
);
return emitter;
}
4.2 自定义AI客户端
实现特定领域的AI客户端:
java复制@Component
public class LegalAssistantClient {
private final ChatClient chatClient;
private final PromptTemplate legalPrompt;
public LegalAssistantClient(ChatClient chatClient) {
this.chatClient = chatClient;
this.legalPrompt = new PromptTemplate("""
你是一名专业律师,请根据{lawType}法律回答:
{question}
回答需引用具体法条。
""");
}
public String legalAdvice(String lawType, String question) {
return chatClient.call(
legalPrompt.create(Map.of(
"lawType", lawType,
"question", question
))
);
}
}
5. 生产环境注意事项
5.1 性能优化建议
- 启用响应缓存:对常见问题结果缓存
- 设置合理超时:默认HTTP客户端可能需要调整
- 限制并发请求:防止API配额快速耗尽
5.2 安全防护措施
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/chat/**").authenticated()
)
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
.build();
}
}
5.3 监控与指标
集成Actuator监控AI调用:
yaml复制management:
endpoints:
web:
exposure:
include: health,metrics,ai
metrics:
tags:
application: ${spring.application.name}
6. 调试与问题排查
6.1 常见错误处理
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 401 Unauthorized | API密钥无效 | 检查spring.ai.openai.api-key配置 |
| 429 Too Many Requests | 达到速率限制 | 实现限流或升级API套餐 |
| 503 Service Unavailable | AI服务不可用 | 添加重试机制 |
6.2 日志分析技巧
启用DEBUG日志查看完整交互:
properties复制logging.level.org.springframework.ai=DEBUG
典型调试日志示例:
code复制DEBUG o.s.ai.openai.OpenAiApi - Request:
model: gpt-3.5-turbo
messages: [{"role":"user","content":"你好"}]
DEBUG o.s.ai.openai.OpenAiApi - Response:
id: chatcmpl-7q...
usage: {prompt_tokens: 10, completion_tokens: 45}
7. 进阶应用场景
7.1 文档智能处理
结合文档解析实现智能问答:
java复制@Bean
DocumentReader pdfReader() {
return new PdfDocumentReader(new ResourcePatternResolver());
}
@Bean
VectorStore vectorStore(EmbeddingClient embeddingClient) {
return new SimpleVectorStore(embeddingClient);
}
@Bean
DocumentIndexer indexer(VectorStore vectorStore, DocumentReader reader) {
return new DocumentIndexer(vectorStore, reader);
}
7.2 多模态处理
处理图像输入示例:
java复制@Bean
public PromptTemplate imageAnalysisPrompt() {
return new PromptTemplate("""
请分析这张图片:
{imageUrl}
描述图片内容并提取关键信息。
""");
}
@PostMapping("/analyze-image")
public String analyzeImage(@RequestParam String imageUrl) {
return chatClient.call(
imageAnalysisPrompt.create(Map.of("imageUrl", imageUrl))
);
}
在实际项目中,建议根据具体需求选择合适的AI模型。对于中文场景,可以尝试配置国产大模型接口:
yaml复制spring:
ai:
api:
base-url: https://api.国产模型.com/v1
model: chatglm3
Spring Boot与Spring AI的结合为Java开发者打开了AI应用开发的大门。通过合理的架构设计,可以在保持Spring优雅编程模型的同时,轻松集成前沿AI能力。随着Spring AI的持续发展,未来会有更多便捷功能加入官方starter。
