从 0 到 1 上手 Spring AI:让 Java 开发者轻松玩转 AI 功能
最近 AI 工具的热度居高不下,作为 Java 开发者,我们总在想:能不能用熟悉的 Spring 生态快速集成 AI 能力?答案是肯定的 ——Spring AI 来了!它就像 Spring 家族的一位新成员,让我们能用写 Spring Boot 的方式轻松对接各种 AI 模型。今天就来聊聊 Spring AI 的基本操作,带你快速上手。
一、Spring AI 是什么?先搞懂定位
简单说,Spring AI 是 Spring 官方推出的 AI 工具包,它的核心目标是:降低 Java 开发者使用 AI 模型的门槛。
想象一下,以前调用 OpenAI 的 API 需要自己处理 HTTP 请求、解析 JSON、管理 API 密钥;现在有了 Spring AI,这些工作都被封装成了熟悉的 Spring 风格组件,我们只需注入ChatClient,调用几个方法就能实现对话功能 —— 这就是 Spring AI 的价值。
它支持主流的 AI 模型:
- 开源模型:如 Llama 2、Mistral
- 商业 API:如 OpenAI、Azure OpenAI、Google Gemini
- 本地模型:通过 Ollama 集成本地部署的模型
而且保持了 Spring 一贯的特性:依赖注入、自动配置、模板类(类似 RestTemplate),上手成本极低。
二、环境准备:5 分钟搭好 Spring AI 项目
1. 版本要求
- JDK 17+(Spring AI 对 JDK 版本要求较高)
- Spring Boot 3.2+(建议用最新稳定版)
2. 引入依赖
目前 Spring AI 还没正式进入 Maven 中央仓库,需要先添加 Spring 的仓库。在pom.xml中配置:
<!-- 仓库配置 -->
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<!-- 核心依赖:以OpenAI为例 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI OpenAI集成 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1-SNAPSHOT</version> <!-- 版本可能更新,建议查最新版 -->
</dependency>
</dependencies>
如果用 Gradle,配置类似,核心是引入对应的 starter。
三、第一个例子:用 Spring AI 调用 OpenAI 聊天
以最常用的 OpenAI 为例,实现一个简单的对话功能,步骤简单到离谱:
1. 配置 API 密钥
在application.properties中填入你的 OpenAI 密钥:
spring.ai.openai.api-key=sk-你的API密钥
# 可选:指定模型,默认是gpt-3.5-turbo
spring.ai.openai.chat.model=gpt-3.5-turbo
2. 注入 ChatClient,直接用!
Spring AI 已经自动配置好了ChatClient,我们直接注入使用:
import org.springframework.ai.chat.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AiController {
// 注入Spring AI提供的ChatClient
private final ChatClient chatClient;
// 构造器注入(Spring推荐方式)
public AiController(ChatClient chatClient) {
this.chatClient = chatClient;
}
// 一个简单的接口:接收问题,返回AI回答
@GetMapping("/chat")
public String chat(@RequestParam String message) {
// 调用AI模型,获取响应
return chatClient.prompt()
.user(message) // 设置用户输入
.call() // 发送请求
.content(); // 提取回答内容
}
}
3. 启动项目,测试效果
启动 Spring Boot 应用,访问http://localhost:8080/chat?message=Spring AI是什么,就能收到 AI 的回答。整个过程没有一行 HTTP 调用代码,没有 JSON 解析,完全是 Spring 的 “注入即用” 风格!
四、进阶操作:提示词(Prompt)管理与模板
实际开发中,提示词往往需要动态拼接(比如传入用户参数)。Spring AI 提供了PromptTemplate来管理提示词,避免硬编码。
1. 定义提示词模板
在src/main/resources/prompts目录下创建weather-prompt.st文件:
请根据城市名{city},预测未来{days}天的天气,用简洁的中文回答。
其中{city}和{days}是占位符。
2. 使用模板生成提示词
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.ai.resource.ClassPathResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class WeatherController {
private final ChatClient chatClient;
public WeatherController(ChatClient chatClient) {
this.chatClient = chatClient;
}
@GetMapping("/weather")
public String getWeather(
@RequestParam String city,
@RequestParam int days) {
// 加载提示词模板
PromptTemplate promptTemplate = new PromptTemplate(
new ClassPathResource("prompts/weather-prompt.st"),
Map.of("city", city, "days", days) // 填充占位符
);
// 生成Prompt对象
Prompt prompt = promptTemplate.create();
// 调用AI
return chatClient.prompt(prompt).call().content();
}
}
这样做的好处是:提示词与代码分离,方便修改和管理,尤其适合复杂场景。
五、切换模型:从 OpenAI 到本地模型
Spring AI 的一大优势是模型无关性—— 同一套代码,切换模型只需改配置。比如换成本地部署的 Llama 2(需通过 Ollama 运行):
- 替换依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
<version>0.8.1-SNAPSHOT</version>
</dependency>
- 修改配置:
# Ollama服务地址(本地默认)
spring.ai.ollama.base-url=http://localhost:11434
# 指定模型
spring.ai.ollama.chat.model=llama2
- 代码完全不变!之前的
ChatClient调用逻辑无需修改,直接兼容。
六、避坑指南:新手常遇到的问题
- 版本兼容:Spring AI 目前还是快照版(SNAPSHOT),建议用最新版,避免旧版本的 BUG。
- API 密钥安全:生产环境不要把密钥写在配置文件里,建议用环境变量或配置中心:
spring.ai.openai.api-key=${OPENAI_API_KEY:默认值} - 超时设置:AI 模型调用可能较慢,可配置超时时间:
spring.ai.openai.chat.timeout=30000 # 30秒 - 依赖冲突:如果项目中有旧版本的 Spring Boot,可能需要排除冲突的依赖(如 Jackson)。
七、写在最后:Spring AI 的未来可期
作为 Spring 生态的一部分,Spring AI 最大的优势是降低认知成本——Java 开发者不用学习新框架,就能快速集成 AI 能力。目前它还在快速迭代中,未来会支持更多模型和功能(如图像生成、embedding 向量等)。
如果你想在 Java 项目中加入 AI 功能,Spring AI 绝对是首选工具。从今天的例子来看,只需几行配置和代码,就能实现一个 AI 对话接口,这种便捷性在以前是难以想象的。
赶紧试试吧!用 Spring 的方式,玩转 AI 其实很简单~
更多推荐


所有评论(0)