Spring AI简介
Spring AI是Spring生态中的一个新兴项目,其目标是简化大型语言模型(LLM)的集成流程,提供统一的API接口。通过Spring AI,开发者可以:
- 快速接入多种模型(如OpenAI、Hugging Face、本地模型等);
- 实现标准化模型交互模板(如提示词管理、响应解析);
- 利用Spring Boot的依赖注入和配置管理功能,降低代码复杂度。
实战步骤:在Spring Boot中集成生成式AI
1. 创建Spring Boot项目
使用Spring Initializr初始化一个项目,选择Spring Web
和Lombok
依赖。
2. 添加Spring AI依赖
在pom.xml
中添加Spring AI的依赖(以OpenAI为例):
<XML>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.0</version>
</dependency>
3. 配置API密钥
在application.properties
中配置生成式AI服务商的密钥:
<PROPERTIES>
spring.ai.openai.api-key=your-openai-api-key
spring.ai.openai.model=gpt-3.5-turbo
4. 实现AI服务层
创建一个AIService
类,编写与模型交互的代码:
<JAVA>
@Service
@RequiredArgsConstructor
public class AIService {
private final OpenAiClient openAiClient;
public String generateText(String prompt) {
return openAiClient.generate(prompt).getGeneration().getText();
}
// 高级用法:使用Prompt对象结构化输入
public List<String> generateMultipleResponses(String question) {
PromptTemplate promptTemplate = new PromptTemplate("你是一个助手,请回答这个问题:{question}");
Prompt prompt = promptTemplate.create(Map.of("question", question));
return openAiClient.generate(prompt)
.getGenerations().stream()
.map(Generation::getText)
.toList();
}
}
5. 创建REST控制器
暴露一个API端点供外部调用:
<JAVA>
@RestController
@RequiredArgsConstructor
@RequestMapping("/ai")
public class AIController {
private final AIService aiService;
@PostMapping("/ask")
public ResponseEntity<String> askQuestion(@RequestBody String question) {
try {
String response = aiService.generateText(question);
return ResponseEntity.ok(response);
} catch (Exception e) {
return ResponseEntity.status(500).body("AI服务调用失败:" + e.getMessage());
}
}
}
二、Spring AI如何与模型互动
核心交互流程
- 客户端请求 → 2. Spring Boot接收参数 → 3. Spring AI构建
Prompt
对象 → - 调用AI模型API → 5. 解析响应 → 6. 返回结构化的结果
高级功能:结构化输出
通过@OutputParser
注解自定义响应解析逻辑(如将文本解析为JSON对象):
<JAVA>
public class RecipeOutputParser implements OutputParser<Recipe> {
@Override
public Recipe parse(String text) {
// 解析AI返回的菜谱文本为Recipe对象
return new Recipe(...);
}
}
支持多模型交互
Spring AI支持多种模型服务的统一抽象。例如,你可以通过切换配置文件轻松切换到Claude模型:
<JAVA>
// application-claude.properties
spring.ai.anthropic.api-key=your_key
spring.ai.anthropic.model=claude-2.1
三、实际应用场景
- 智能客服:根据用户提问生成自然语言回复
- 内容创作:自动编写文章草稿或营销文案
- 代码生成:通过自然语言生成SQL查询或Java代码片段
四、部署与优化建议
- 安全性:通过
@PreAuthorize
限制敏感接口的访问权限 - 限流机制:使用Resilience4j防止模型API被过量调用
- 缓存策略:对常见问题的回答进行缓存(如配置
@Cacheable
) - 异步处理:通过
@Async
避免长时间阻塞请求线程
五、总结
通过Spring AI,开发者无需深入理解复杂的AI模型底层,即可将智能能力无缝融入现有Spring Boot应用。其模块化设计既保证了扩展性(支持新模型快速接入),又通过Spring风格的API降低了学习成本。