无需深入AI底层实现,Java开发者也能快速构建智能应用
本文将介绍如何使用 Spring AI 在 Spring Boot 项目中快速集成 AI 能力。通过三步操作------添加依赖、配置 API 凭证和编写调用代码,Java 开发者可以轻松构建 AI 应用。
一、Spring AI 简介
Spring AI 是 Spring 官方推出的 AI 应用开发框架,旨在将 大语言模型 (LLM) 和 AI 能力 无缝集成到 Spring 生态系统中3。它提供了一套简洁、统一、抽象的 API,让开发者能用熟悉的 Spring 风格(如 RestTemplate
、Repository
模式)调用不同 AI 提供商的模型3。
核心价值
-
简化集成:无需手写 HTTP 请求、解析 JSON,Spring 帮你搞定3。
-
统一抽象:更换 AI 提供商时,代码几乎不用改!3
-
Spring 风格:支持依赖注入、AOP、Actuator 等 Spring 全家桶特性3。
-
模块化设计:按需引入文本、图像、嵌入、向量库等模块3。
应用场景
Spring AI 能帮助实现多种 AI 应用场景,包括但不限于:
-
智能文本生成(如自动生成营销文案、产品描述、邮件草稿、代码片段、对话聊天机器人)3。
-
多模态处理(如图像内容分析描述、基于文本描述生成图片)3。
-
函数调用(让 AI 模型根据用户请求决定调用预定义的 Java 方法)3。
-
RAG (检索增强生成):结合向量数据库,让 AI 回答基于私有知识库的内容3。
二、环境准备
在开始前三步集成前,请确保你的开发环境满足以下要求:
-
JDK 17+:Spring Boot 3 和 Spring AI 需要 JDK 版本不低于 171。
-
Maven 或 Gradle:本文以 Maven 为例1。
-
IDE:推荐使用 IntelliJ IDEA 或其他你熟悉的 Java 开发环境1。
-
LLM API Key:本文以 DeepSeek 为例(因其价格便宜且无需科学上网),但你也可以使用 OpenAI、Azure OpenAI、阿里云百炼等兼容 OpenAI API 的模型服务110。
三、三步集成 Spring AI
下面我们通过三个步骤,演示如何将 Spring AI 集成到 Spring Boot 项目中。
步骤 1:添加依赖
首先创建一个新的 Maven 项目,并在 pom.xml
文件中进行如下配置:1
1. 设置 Spring Boot 父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.0</version> <!-- 建议使用最新稳定版 -->
</parent>
2. 管理 Spring AI 的版本
通过 BOM 统一管理 Spring AI 相关依赖的版本,避免版本冲突:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0</version> <!-- 使用最新稳定版 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3. 添加具体依赖
<dependencies>
<!-- Spring Boot Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI OpenAI Starter -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
</dependencies>
注意 :即使我们使用 DeepSeek 的 API,引入的也是 spring-ai-starter-model-openai
。这是因为 DeepSeek 采用了与 OpenAI 完全兼容的 API 规范,我们可以直接复用 OpenAI 的客户端实现。这种设计让切换不同的 AI 服务商变得非常简单------只需要更换 API Key 和端点地址即可1。
步骤 2:配置凭证
有了依赖后,接下来需要配置如何连接到 AI 服务。在 src/main/resources
目录下的 application.yml
文件中添加以下配置:
spring:
ai:
openai:
api-key: your-api-key-here # 替换为你的实际API密钥
base-url: https://api.deepseek.com # DeepSeek的API端点
chat:
options:
model: deepseek-chat # 使用的模型名称
安全提示 :直接将 API Key 写在配置文件中仅适合本地开发和快速测试,不要在生产环境中这样做!在生产环境中,推荐使用环境变量来管理你的密钥:
spring:
ai:
openai:
api-key: ${SPRING_AI_OPENAI_API_KEY:} # 从环境变量读取
base-url: https://api.deepseek.com
chat:
options:
model: deepseek-chat
然后在你的系统环境变量或 IDE 运行配置中设置 SPRING_AI_OPENAI_API_KEY
。
步骤 3:编写代码调用
万事俱备,现在可以编写代码来调用 AI 模型了。1
1. 创建聊天控制器
创建一个 REST 控制器来处理 AI 对话请求:
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/chat")
public class ChatController {
private final ChatClient chatClient;
// 通过构造器注入ChatClient.Builder
public ChatController(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
@GetMapping("/test")
public String completion(@RequestParam String message) {
return chatClient.prompt()
.user(message) // 设置用户输入
.call() // 调用AI模型
.content(); // 获取响应内容
}
}
2. 启动应用测试
启动 Spring Boot 应用后,你可以通过浏览器、curl 或 API 测试工具(如 Apifox)访问接口:
http://localhost:8080/chat/test?message=给我讲一个关于Java编程的笑话
3. 配置跨域支持(可选)
如果需要从前端应用调用这个接口,需要配置 CORS 支持:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*") // 允许所有来源,生产环境应限制
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
四、进阶用法
使用 PromptTemplate
PromptTemplate 可用于动态生成 Prompt,支持占位符,避免硬编码:
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.prompt.PromptTemplate;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/ai")
public class AdvancedChatController {
private final ChatClient chatClient;
public AdvancedChatController(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
@GetMapping("/joke")
public String getTechJoke(@RequestParam String topic) {
PromptTemplate template = new PromptTemplate("给我讲一个关于 {topic} 的技术冷笑话。");
String prompt = template.render(Map.of("topic", topic));
return chatClient.prompt()
.user(prompt)
.call()
.content();
}
}
流式响应
对于长文本响应,可以使用流式响应提高用户体验:
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.stream() // 使用流式调用
.content();
}
配置默认系统提示
你可以在创建 ChatClient 时配置默认的系统提示,定义 AI 的角色和行为:
五、最佳实践与注意事项
-
API 密钥管理:永远不要将 API 密钥提交到版本控制系统。使用环境变量或密钥管理服务1。
-
异常处理:在实际应用中,应该添加适当的异常处理机制:
@GetMapping("/test") public ResponseEntity<String> completion(@RequestParam String message) { try { String response = chatClient.prompt() .user(message) .call() .content(); return ResponseEntity.ok(response); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body("AI服务暂时不可用: " + e.getMessage()); } }
-
性能考虑:AI API 调用可能有延迟,考虑添加超时设置和重试机制。
-
成本控制:设置使用限制和监控,避免意外的高额费用。
六、总结
通过 Spring AI,Java 开发者可以以熟悉的 Spring 方式快速集成 AI 能力。本文演示了如何通过三个简单步骤将 AI 功能添加到 Spring Boot 应用中:1
-
添加 Spring AI 依赖
-
配置 API 凭证
-
编写调用代码
Spring AI 的强大之处在于它提供了统一的抽象接口,让你可以轻松切换不同的 AI 提供商,而无需重写业务逻辑3。无论你是要构建智能聊天机器人、文本生成工具还是复杂的 RAG 系统,Spring AI 都能提供良好的支持。