Spring AI 近期同时推送了三个版本:1.0.8、1.1.7 和 2.0.0-M7。三条线并行推进,意味着不同阶段的用户都有了对应的更新入口——稳定线修 bug、功能线补特性、2.0 里程碑继续打磨大版本重构。如果你正在评估或已经用上 Spring AI,该选哪条线、怎么升级,是这篇文章要回答的问题。
三条版本线各自在做什么
1.0.x(当前 1.0.8)——这是最早的生产可用线,主打稳定。1.0.8 属于补丁版本,修复已知问题,不引入新特性。如果你的项目已经跑在 1.0.x 上且没有迫切的新功能需求,升级到 1.0.8 风险最低,直接改版本号即可。
1.1.x(当前 1.1.7)——功能增强线。1.1.x 相比 1.0.x 增加了更多模型适配、工具调用(Tool Calling)改进、向量存储扩展等。1.1.7 继续在这个基础上修 bug 和做小幅增强。新项目建议直接从 1.1.x 起步,能用到更完整的 API。
2.0.0-M7——下一个大版本的里程碑。2.0 带来了较大的架构调整:API 重新设计、模块拆分更细、对 Agent 编排和结构化输出的支持更深入。M7 还是里程碑(Milestone),不建议用于生产,但适合提前验证新 API 和迁移路径。
一句话总结:生产跑 1.0.8 或 1.1.7,新实验试 2.0.0-M7。
实际接入:用 1.1.7 搭一个最简对话服务
下面用一个可复制的 Spring Boot 项目示例,展示如何用 Spring AI 1.1.7 接入 OpenAI(或任何兼容 API 的模型)完成一次对话调用。
1. 添加依赖
pom.xml 中引入 Spring AI 的 BOM 和 starter:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.1.7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- OpenAI starter,也可换成 azure-openai、ollama 等 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
如果用 Gradle,BOM 用
platform("org.springframework.ai:spring-ai-bom:1.1.7")引入即可。
2. 配置 API Key
application.yml:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY} # 建议用环境变量,不要硬编码
base-url: https://api.openai.com # 如用代理或兼容服务,改这里
chat:
options:
model: gpt-4o-mini # 选一个性价比合适的模型
temperature: 0.7
3. 写一个对话接口
@RestController
@RequestMapping("/chat")
public class ChatController {
private final ChatClient chatClient;
public ChatController(ChatClient.Builder builder) {
// ChatClient 是 1.1.x 推荐的 fluent API
this.chatClient = builder.build();
}
@GetMapping
public String ask(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.call()
.content();
}
@GetMapping("/stream")
public Flux<String> askStream(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.stream()
.content();
}
}
启动后访问:
# 普通调用
curl "http://localhost:8080/chat?message=用三句话解释什么是RAG"
# 流式调用(需要 WebFlux 依赖)
curl "http://localhost:8080/chat/stream?message=用三句话解释什么是RAG"
ChatClient 是 1.1.x 的核心入口,比 1.0.x 直接用 ChatModel 更简洁——链式调用、内嵌 system prompt、工具注册都从这里完成。
2.0.0-M7 值得关注的变化
如果你准备试 2.0 里程碑,有几个方向可以提前验证:
- API 重构:
ChatClient和ChatModel的职责边界更清晰,Advisor(拦截器)机制取代了之前部分回调设计。 - Agent 编排:2.0 加强了多步工具调用的编排能力,不再只是单轮 function call。
- 结构化输出:
BeanOutputConverter等类被整合进更通用的结构化输出模块,直接映射到 Java POJO 的路径更短。
一个 2.0 中结构化输出的伪代码示例(API 可能随里程碑调整):
// 2.0 里程碑中结构化输出的典型用法,具体 API 以正式版为准
record BookRecommendation(String title, String author, String reason) {}
Flux<BookRecommendation> recommendations = chatClient.prompt()
.user("推荐三本关于分布式系统的书")
.outputType(BookRecommendation.class) // 直接指明目标类型
.stream()
.entities(); // 流式返回实体
⚠️ 2.0.0-M7 是里程碑版本,API 仍可能变动。验证思路可以,上生产请等正式版。
升级决策清单
| 你的情况 | 建议动作 |
|---|---|
| 项目跑在 1.0.x,运行稳定 | 升到 1.0.8,只改版本号,回归测试即可 |
| 项目跑在 1.1.x,需要最新修复 | 升到 1.1.7,注意看 release note 里是否有行为变更 |
| 新项目起步 | 直接用 1.1.7,API 更完整,社区示例也多 |
| 想提前验证 Agent 编排或结构化输出新设计 | 单独建实验项目用 2.0.0-M7,不要混进生产依赖 |
| 用了 Ollama / Azure OpenAI 等非 OpenAI 模型 | 1.1.x 和 2.0 都有对应 starter,确认你用的模型 starter 版本兼容 |
最后一点:Spring AI 的版本迭代节奏很快,三条线并行意味着团队在同时推进稳定维护和架构演进。对你来说,选对版本线比追最新版本更重要——生产求稳,实验求新,不要在同一个项目里混用。