AI5 min read
Spring AI 入门:用 Spring Boot 构建 AI 应用
Spring AI 入门:用 Spring Boot 构建 AI 应用
Spring AISpring BootJavaAI开发
Spring AI 是 Spring 官方的 AI 框架,让 Java 开发者用熟悉的方式构建 AI 应用。
什么是 Spring AI?
Spring AI 是 Spring 生态的 AI 扩展:
- 统一的 API 抽象
- 支持多种 AI 模型(OpenAI、Claude、Ollama 等)
- 集成 Spring 生态
- 支持 RAG、Function Calling 等
快速开始
1. 添加依赖
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
2. 配置
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o
temperature: 0.7
3. 基本使用
@RestController
public class ChatController {
private final ChatClient chatClient;
public ChatController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/chat")
public String chat(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.call()
.content();
}
}
ChatClient 详解
简单对话
String response = chatClient.prompt()
.user("什么是微服务?")
.call()
.content();
带系统提示
String response = chatClient.prompt()
.system("你是一个 Java 专家,用简洁的语言回答")
.user("解释 Spring IoC 容器")
.call()
.content();
流式输出
Flux<String> stream = chatClient.prompt()
.user("写一篇关于 Spring Boot 的文章")
.stream()
.content();
带参数
String response = chatClient.prompt()
.user(u -> u.text("翻译以下内容到{language}: {text}")
.param("language", "英文")
.param("text", "你好世界"))
.call()
.content();
多模型支持
OpenAI
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
Anthropic (Claude)
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-anthropic-spring-boot-starter</artifactId>
</dependency>
spring:
ai:
anthropic:
api-key: ${ANTHROPIC_API_KEY}
chat:
options:
model: claude-sonnet-4-20250514
Ollama (本地模型)
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
spring:
ai:
ollama:
base-url: http://localhost:11434
chat:
options:
model: llama3
Function Calling
让 AI 调用你的 Java 方法:
@Bean
@Description("获取指定城市的当前天气")
public Function<WeatherRequest, WeatherResponse> getWeather() {
return request -> {
// 调用天气 API
return new WeatherResponse(request.city(), "晴天", 25);
};
}
// 使用
String response = chatClient.prompt()
.user("北京今天天气怎么样?")
.functions("getWeather")
.call()
.content();
AI 会自动判断需要调用函数,获取结果后回答。
RAG 实现
1. 文档加载
@Bean
public VectorStore vectorStore(EmbeddingModel embeddingModel) {
return new SimpleVectorStore(embeddingModel);
}
// 加载文档
@Bean
CommandLineRunner loadDocuments(VectorStore vectorStore) {
return args -> {
var documents = new TextReader("docs.txt").get();
vectorStore.add(documents);
};
}
2. RAG 查询
@GetMapping("/ask")
public String ask(@RequestParam String question) {
return chatClient.prompt()
.user(question)
.advisors(new QuestionAnswerAdvisor(vectorStore))
.call()
.content();
}
实战示例
智能客服
@Service
public class CustomerService {
private final ChatClient chatClient;
private final OrderRepository orderRepository;
public String handleQuestion(String userId, String question) {
// 获取用户订单信息
List<Order> orders = orderRepository.findByUserId(userId);
return chatClient.prompt()
.system("你是客服助手,基于用户订单信息回答问题")
.user(u -> u.text("用户问题:{question}\n订单信息:{orders}")
.param("question", question)
.param("orders", orders.toString()))
.call()
.content();
}
}
代码审查服务
@Service
public class CodeReviewService {
private final ChatClient chatClient;
public String reviewCode(String code) {
return chatClient.prompt()
.system("你是代码审查专家,审查 Java 代码并给出改进建议")
.user(u -> u.text("审查以下代码:\n```java\n{code}\n```")
.param("code", code))
.call()
.content();
}
}
SQL 生成器
@Service
public class SqlGeneratorService {
private final ChatClient chatClient;
public String generateSql(String requirement, String tableSchema) {
return chatClient.prompt()
.system("你是 SQL 专家,根据需求生成 SQL 查询")
.user(u -> u.text("表结构:{schema}\n需求:{requirement}\n生成 SQL:")
.param("schema", tableSchema)
.param("requirement", requirement))
.call()
.content();
}
}
和直接调用 API 对比
| 特性 | Spring AI | 直接调用 API |
|---|---|---|
| 学习成本 | 低(Spring 开发者) | 中等 |
| 代码量 | 少 | 多 |
| 多模型切换 | 配置切换 | 改代码 |
| Function Calling | 内置支持 | 手动实现 |
| RAG | 内置支持 | 手动实现 |
| Spring 集成 | 原生 | 需要封装 |
最佳实践
1. 使用 Prompt 模板
String response = chatClient.prompt()
.user(u -> u.text("""
分析以下日志,找出错误原因:
日志内容:{log}
应用信息:{appInfo}
""")
.param("log", logContent)
.param("appInfo", appInfo))
.call()
.content();
2. 错误处理
try {
String response = chatClient.prompt()
.user(message)
.call()
.content();
} catch (Exception e) {
log.error("AI 调用失败", e);
return "抱歉,AI 服务暂时不可用";
}
3. 成本控制
spring:
ai:
openai:
chat:
options:
max-tokens: 1000
temperature: 0.7
总结
Spring AI 让 Java 开发者用熟悉的方式构建 AI 应用:
- 统一 API:切换模型只改配置
- Function Calling:让 AI 调用 Java 方法
- RAG 内置:轻松实现知识库问答
- Spring 生态:和 Spring Boot 无缝集成
如果你是 Java 开发者,Spring AI 是构建 AI 应用的最佳选择。