一、Spring AI 简介
在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接,同时支持本地模型部署(如 Ollama),为开发者提供了灵活高效的 AI 集成方案。
核心价值体现:
-
生态融合:完美继承 Spring Boot 的自动配置特性,通过简单配置即可接入 AI 服务
-
多模型支持:统一抽象层兼容 OpenAI GPT、Mistral 等 20+主流模型
-
企业级特性:内置重试机制、限流策略、监控指标等生产级功能
-
全栈能力:覆盖文本生成、图像处理、向量检索等完整 AI 应用场景
二、环境准备
- 开发环境要求
-
JDK 17+(推荐 Azul Zulu JDK)
-
Spring Boot 3.2.x
-
Maven 3.8.6+ 或 Gradle 8.5+
- 项目初始化
通过 Spring Initializr 创建项目时选择:
bash
Project: Maven Project
Language: Java
Spring Boot: 3.2.1
Dependencies: Spring Web, Spring AI Starter
- 依赖配置
在 `pom.xml` 中添加核心依赖:
xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter</artifactId>
<version>0.8.1</version>
</dependency>
<!-- OpenAI 服务支持 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version>
</dependency>
三、快速入门实践
- 配置 API 密钥
在 `application.yml` 中设置服务凭证:
yaml
spring:
ai:
openai:
api-key: sk-your-api-key-here
chat:
options:
model: gpt-3.5-turbo
temperature: 0.7
- 创建聊天服务
java
@Service
public class ChatService {
@Autowired
private ChatClient chatClient;
public String generateResponse(String prompt) {
ChatResponse response = chatClient.call(prompt);
return response.getResult().getOutput().getContent();
}
}
- 控制器实现
java
@RestController
@RequestMapping("/api/chat")
public class ChatController {
@Autowired
private ChatService chatService;
@GetMapping
public String chat(@RequestParam String message) {
return chatService.generateResponse(message);
}
}
- 测试接口
通过 curl 发送请求:
bash
curl "http://localhost:8080/api/chat?message=用Java实现快速排序"
四、核心功能解析
- 模型管理
Spring AI 提供统一的模型访问接口:
java
@Autowired
private ModelManager modelManager;
// 加载本地模型
TensorFlowModel model = modelManager.loadModel("classpath:model.pb");
// 调用远程服务
OpenAiChatOptions options = OpenAiChatOptions.builder()
.withTemperature(0.5)
.build();
- 提示工程
通过模板化提示提升输出质量:
java
PromptTemplate template = new PromptTemplate("作为{role},请用{language}解释{topic}");
template.addVariable("role", "资深架构师");
template.addVariable("language", "中文");
template.addVariable("topic", "微服务架构设计");
- 向量处理
文本向量化实现语义检索:
java
TextEmbedding embedding = new OpenAiTextEmbedding();
float vector = embedding.embed("Spring AI 入门指南");
- RAG 增强
结合检索增强生成技术:
java
RetrievalChain chain = RetrievalChain.builder()
.withRetriever(vectorRetriever)
.withPromptTemplate(promptTemplate)
.build();