Spring AI(仓库 spring-projects/spring-ai,最近提交 2026-10-29)是 Spring 官方出品的 AI 应用框架,把 ChatClient、工具调用、RAG、向量库、MCP 全部做成 Spring Boot Starter。Java 后端团队不用再羡慕 Python 生态——加一个依赖、配一个 Key,就能在 Spring Boot 里调 OpenAI、Anthropic、Ollama、DeepSeek、Bedrock,还能让模型主动调用你的 Java 函数。
本文严格对照官方 README 给出版本兼容、start.spring.io 选依赖、Maven 构建与运行方式。
一、项目介绍与适用场景
Spring AI 的目标:把 Spring 生态的设计原则(可移植、模块化、强类型)搬到 AI 领域,核心是"把企业数据与 API 接到大模型上"。
适用场景:
- Java/Spring 团队:在现有 Spring Boot 微服务里加 AI 聊天、知识库问答;
- 企业内网:用 Ollama 跑本地模型,Spring AI 统一抽象,未来换模型不改业务代码;
- 工具调用 Agent:让大模型直接调用你写好的 Java
@Tool函数。
二、核心功能逐条拆解
- 多模型支持:Anthropic、OpenAI、Bedrock、Google、Ollama、Mistral、DeepSeek 等;
- ChatClient API:流式 API,类似 WebClient/RestClient 的 fluent 风格;
- 结构化输出:把模型返回直接映射成 POJO;
- 工具调用(Tool Calling):模型请求执行你客户端的 Java 函数;
- RAG advisors:内置问答/摘要/自定义 advisor,可插拔;
- 向量库抽象:Chroma、PGVector、Milvus、Redis、Weaviate、Neo4j 等二十多种;
- MCP 一等支持:通过 Boot Starter 与注解,既能当 MCP client 也能把 Spring 服务暴露成 MCP server;
- 聊天记忆:可插拔 JDBC / Cassandra / MongoDB / Neo4j / Redis 持久化;
- 可观测性:对接 Micrometer/Tracing;
- ETL 文档处理:文档注入管道,解析 PDF/Markdown/HTML。
三、全套官方链接
| 类型 | 链接 |
|---|---|
| GitHub 仓库 | https://github.com/spring-projects/spring-ai |
| 官方文档 | https://docs.spring.io/spring-ai/reference/ |
| 官方 Demo | https://github.com/spring-projects/spring-ai-examples |
| License | Apache-2.0(Spring 官方项目默认) |
四、硬件与环境前置要求
官方 README 明确版本兼容:
- Spring AI 2.x.x(main 分支)→ Spring Boot 4.x;
- Spring AI 1.1.x(1.1.x 分支)→ Spring Boot 3.5.x。
其他:
- JDK 17+(Spring Boot 3.x 要求);
- Maven 3.6+ 或 Gradle;
- 一个模型 Key(OpenAI 等)或本地 Ollama;
- 内存 2 GB 起步。
五、多平台部署步骤
5.1 用 start.spring.io 生成工程(官方推荐)
官方 README 明确:"use start.spring.io to select the Model or Vector Store of choice"。
步骤:
- 浏览器打开 https://start.spring.io/ ;
- 选 Spring Boot 版本(与 Spring AI 版本对应:Boot 4.x 配 Spring AI 2.x,Boot 3.5.x 配 Spring AI 1.1.x);
- 在 Dependencies 搜索 "Spring OpenAI" 或 "Spring Ollama",勾选对应 Starter;
- 点 GENERATE 下载 zip;
- 解压后导入 IDE。
5.2 手动加 Maven 依赖
以 OpenAI 为例(参考官方 Maven Central org.springframework.ai:spring-ai-model):
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
具体 artifactId 随版本变化,以 https://docs.spring.io/spring-ai/reference/api/chatmodel.html 与 start.spring.io 生成的 pom 为准。
5.3 配置模型 Key
在 src/main/resources/application.yml:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o
5.4 写一个 ChatClient 接口
官方文档标准用法:
@RestController
class ChatController {
private final ChatClient chatClient;
ChatController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/chat")
String chat(String q) {
return chatClient.prompt().user(q).call().content();
}
}
5.5 工具调用
在你的 Bean 方法上加 @Tool:
@Component
class MyTools {
@Tool(description = "获取当前天气")
String weather(String city) {
return city + " 晴 25℃";
}
}
然后在 ChatClient 里 defaultTools(myTools) 注册,模型会主动调用。
5.6 本地 Ollama 模式
把 starter 换成 Ollama,application.yml 改:
spring:
ai:
ollama:
base-url: http://localhost:11434
chat:
options:
model: qwen2.5
5.7 构建与运行
官方 README 给出从源码构建:
./mvnw clean install
普通用户运行自己的工程:
./mvnw spring-boot:run
预期:Spring Boot 启动,默认 http://localhost:8080 ,访问 /chat?q=你好 拿到模型回答。
5.8 Docker 部署
官方 README 未提供独立镜像;Spring Boot 应用自带 BootBuildImage:
./mvnw spring-boot:build-image
生成的镜像可直接 docker run -p 8080:8080 -e OPENAI_API_KEY=... 启动。
六、配置文件全部参数解释
| 参数名 | 作用 | 可选值 | 默认值 | 配置示例 | 改错后果 |
|---|---|---|---|---|---|
spring.ai.openai.api-key |
OpenAI Key | sk-xxx | 无 | 见 5.3 | 不填则 401 |
spring.ai.openai.chat.options.model |
模型名 | gpt-4o 等 | 官方默认 | "gpt-4o" |
错则模型不存在 |
spring.ai.ollama.base-url |
Ollama 地址 | URL | http://localhost:11434 | 见 5.6 | 连不上则调用失败 |
@Tool |
声明工具方法 | 注解 | 无 | 见 5.5 | 不加则模型看不到函数 |
七、启动、后台常驻与开机自启
7.1 前台启动
./mvnw spring-boot:run
7.2 打 Jar 后常驻
./mvnw clean package -DskipTests
java -jar target/demo-0.0.1.jar
systemd:
[Unit]
Description=Spring AI App
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/demo
Environment="OPENAI_API_KEY=sk-..."
ExecStart=/usr/bin/java -jar /home/ubuntu/demo/target/demo-0.0.1.jar
Restart=on-failure
[Install]
WantedBy=multi-user.target
7.3 开机自启
sudo systemctl daemon-reload && sudo systemctl enable --now springai
7.4 修改端口
application.yml 加 server.port: 8081,重启后访问 http://localhost:8081 验证。
八、功能实操教程
第 1 步:去 start.spring.io 选 Spring Boot 3.5.x + Spring OpenAI Starter,下载工程。
第 2 步:写 application.yml 填 OPENAI_API_KEY。
第 3 步:按 5.4 写 ChatController。
第 4 步:./mvnw spring-boot:run,浏览器访问 http://localhost:8080/chat?q=用一句话解释Spring AI。
第 5 步:按 5.5 加 @Tool 方法,再问"北京天气怎么样",观察模型自动调用 Java 函数。
第 6 步:(可选)按 5.6 切 Ollama,本地跑 qwen 模型。
九、全套报错故障排查
-
报错:
NoSuchMethodError/ClassNotFound。 原因:Spring Boot 与 Spring AI 版本不匹配。 解决:严格按 README 兼容表——Boot 4.x 配 Spring AI 2.x,Boot 3.5.x 配 Spring AI 1.1.x。 -
报错:
401 Incorrect API key。 原因:spring.ai.openai.api-key没读到。 解决:确认环境变量在 systemd 里也传了;用@Value打印一下。 -
报错:Ollama 连不上。 原因:Ollama 没起或 base-url 错。 解决:
curl http://localhost:11434/api/tags验证;确认 Ollama 允许跨域(OLLAMA_ORIGINS)。 -
报错:
@Tool方法没被调用。 原因:没在 ChatClient 里注册 tools。 解决:用.defaultTools(myTools)或.tools(myTools)显式注册。 -
报错:
./mvnw clean install编译失败。 原因:JDK 版本太低。 解决:java -version确认 17+。
十、升级、回滚与卸载
- 升级:改 pom 里 Spring AI BOM 版本号,
./mvnw clean package。 - 回滚:BOM 版本号改回旧版。
- 卸载:删工程目录即可。
十二、进阶:RAG 知识库、MCP 与可观测性
给 Spring 应用加 RAG:把 PDF / Markdown 文档用 Spring AI 的 ETL Pipeline 切分、embedding,写进 PGVector 或 Redis,然后在 ChatClient 里加 QuestionAnswerAdvisor,自动检索相关片段拼进提示词。整个过程是 Spring Bean 配置,不需要写胶水代码。
聊天记忆持久化:默认记忆在内存里,重启即丢。官方支持 JDBC / Redis / Neo4j 等持久化后端,换个 Bean 配置就能让用户跨天继续聊。
MCP 双向能力:Spring AI 既能当 MCP client 调外部 MCP server(接 Claude Desktop 的工具生态),也能把你已有的 Spring 服务(比如订单查询、库存查询)通过 MCP 暴露给 AI 客户端。用 Boot Starter 加依赖即可,不用手写协议。
可观测性:对接 Micrometer + Observation,每次 LLM 调用的 token 数、延迟、成本都能在 Grafana 里看到,企业上生产必备。
本地模型全栈:开发时用 Ollama 跑 qwen,生产切 OpenAI,业务代码零改动——这就是 Spring AI 抽象的价值。
十一、商用许可与合规风险提示
Spring AI 采用 Apache-2.0(Spring 官方项目),商用友好。
注意:
- 版本兼容性:Spring AI 还在快速迭代,2.x 与 1.1.x 不互通,生产环境锁定小版本。
- 模型费用:框架免费,OpenAI/Bedrock 按 token 计费;本地 Ollama 模型权重各有协议。
- 企业支持:Spring 官方商业支持通过 VMware/Tanzu,OSS 版无 SLA。
参考链接
- 官方 README:https://github.com/spring-projects/spring-ai
- 参考文档:https://docs.spring.io/spring-ai/reference/
- Getting Started:https://docs.spring.io/spring-ai/reference/getting-started.html
- 示例工程:https://github.com/spring-projects/spring-ai-examples