一、 Spring AI 概述
1. Spring AI 简介
Spring AI 提供了统一的 API,让开发者可以方便地在 Spring Boot 项目中调用 AI 服务,支持文本生成、图像生成、聊天、嵌入等能力。

核心优势:
- 屏蔽不同 AI 平台的差异
- 提供统一的编程模型
- 与 Spring Boot 无缝集成
2. 快速入门
2.1 添加依赖
假设你要集成 OpenAI,可以在 pom.xml 中添加:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.0</version>
</dependency>
其他平台如百度文心、阿里通义等也有对应 starter。
2.2 配置 API 密钥
在 application.yml 或 application.properties 中配置:
spring:
ai:
openai:
api-key: sk-xxx
base-url: https://api.openai.com/v1
2.3 编写代码示例
文本生成:
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.prompt.Prompt;
import org.springframework.ai.prompt.PromptTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/ai")
public class AiController {
@Autowired
private OpenAiChatClient chatClient;
@GetMapping("/chat")
public String chat(@RequestParam String message) {
Prompt prompt = new Prompt(message);
return chatClient.call(prompt).getResult().getOutput();
}
}
使用 PromptTemplate:
PromptTemplate template = new PromptTemplate("请用中文回答:{question}");
Prompt prompt = template.create(Map.of("question", "什么是Spring AI?"));
String answer = chatClient.call(prompt).getResult().getOutput();
3. 常用场景
- 智能问答/客服机器人:集成聊天接口,实现自动回复。
- 内容生成:自动生成文章、摘要、代码等。
- 文本分析:情感分析、关键词提取、分类等。
- 图像生成:调用 AI 绘图模型生成图片。
- 嵌入/向量检索:用于知识库问答、语义搜索等场景。
4. 最佳实践建议
- 安全管理 API Key:使用环境变量或专用配置中心存储密钥。
- 合理设置超时和重试机制:避免因网络或服务故障导致请求失败。
- 限流与监控:防止滥用 API,及时发现异常流量。
- Prompt 设计:根据业务场景合理设计提示词,提升 AI 生成质量。
- 异常处理:对 AI 服务异常返回进行友好处理,提升用户体验。
5. 进阶功能
- 多模型切换:Spring AI 支持配置多个模型,动态切换使用。
- 自定义 Prompt 组件:可扩展 PromptTemplate,提高灵活性。
- 与 Spring Data/Flow/Batch 集成:可用于数据处理、流程编排等场景。
6. 官方资源
二、Spring AI 主要功能详解
1. 统一集成主流 AI 服务商
Spring AI 支持对接多个主流 AI 平台,包括:
- OpenAI(如 ChatGPT、GPT-4)
- Azure OpenAI
- Hugging Face
- 百度文心一言
- 阿里通义千问
- Google Gemini
- 其他逐步扩展的 AI 服务
开发者只需更换配置或依赖即可切换底层模型,无需修改业务代码。
2. 统一的 API 编程模型
Spring AI 提供了统一的接口和抽象类,开发者可以用一致的方式调用不同 AI 服务,包括:
- 文本生成(Completion)
- 聊天对话(Chat)
- 图像生成(Image Generation)
- 文本嵌入(Embeddings)
- 文件/知识库问答(Retrieval Augmented Generation,RAG)
示例:
Prompt prompt = new Prompt("请用中文介绍Spring AI的主要功能。");
String result = chatClient.call(prompt).getResult().getOutput();
3. Prompt 管理与模板化
Spring AI 支持 PromptTemplate,可以灵活构建提示词,适用于复杂场景和参数化需求。
PromptTemplate template = new PromptTemplate("请用中文介绍:{topic}");
Prompt prompt = template.create(Map.of("topic", "Spring AI"));
4. 与 Spring 生态无缝集成
- 支持 Spring Boot 自动配置
- 与 Spring Web、Spring Data、Spring Flow 等深度集成
- 支持通过依赖注入、REST API 暴露 AI 服务
5. RAG(检索增强生成)能力
Spring AI 提供 RAG 组件,支持将数据库、文档、知识库等结构化/非结构化数据与大模型结合,实现更精准的问答和信息检索。
6. 多模型/多服务切换
支持在同一个应用中配置和使用多个 AI 服务,实现灵活切换和负载均衡。
7. 流式响应与异步处理
Spring AI 支持流式输出(如 ChatGPT 的逐步生成),以及异步调用,提升用户体验和系统性能。
8. 安全、监控和扩展性
- 支持 API Key 管理与安全配置
- 支持限流、异常处理
- 可扩展性强,方便定制和二次开发
总结
Spring AI 的主要功能就是让 Java/Spring 开发者可以以最简单、最一致的方式集成和使用主流 AI 能力,并且充分利用 Spring 生态的优势,实现高效、安全、可扩展的 AI 应用开发。
三、完整开发示例
1、项目准备
1.1 新建 Spring Boot 项目
可以用 IDEA 或 Spring Initializr 创建一个 Spring Boot 项目,选择依赖:
- Spring Web
- Spring AI OpenAI Starter
1.2 添加依赖
pom.xml 示例:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.0</version>
</dependency>
版本号请参考 Spring AI 官网。
2、配置 OpenAI API Key
application.yml 或 application.properties:
spring:
ai:
openai:
api-key: sk-xxx # 你的 OpenAI 密钥
base-url: https://api.openai.com/v1
3、核心代码开发
3.1 创建聊天接口
ChatController.java
package com.example.chatbot;
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.prompt.Prompt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/chat")
public class ChatController {
@Autowired
private OpenAiChatClient chatClient;
@PostMapping
public String chat(@RequestBody ChatRequest request) {
Prompt prompt = new Prompt(request.getMessage());
return chatClient.call(prompt).getResult().getOutput();
}
}
// 请求体模型
class ChatRequest {
private String message;
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
}
3.2 可选:使用 PromptTemplate 优化提示词
如果需要更复杂的提示词,可以这样:
import org.springframework.ai.prompt.PromptTemplate;
@PostMapping("/template")
public String chatWithTemplate(@RequestBody ChatRequest request) {
PromptTemplate template = new PromptTemplate("你是一名AI助手,请用中文回答:{question}");
Prompt prompt = template.create(Map.of("question", request.getMessage()));
return chatClient.call(prompt).getResult().getOutput();
}
4、前端测试
可以用 Postman 或 curl 测试接口:
curl -X POST http://localhost:8080/chat \
-H "Content-Type: application/json" \
-d '{"message":"什么是Spring AI?"}'
返回结果类似:
"Spring AI 是由 Spring 团队推出的用于集成主流大模型的 Java 框架……"
5、进阶功能(可选)
5.1 聊天上下文管理
如需多轮对话,可以维护一个会话历史列表,将历史消息拼接到 prompt 里。
5.2 流式响应
Spring AI 支持流式输出,可参考官方文档实现前端逐步展示回答。
5.3 多模型支持
如需支持多个 AI 服务,只需添加对应 starter 和配置,代码层面可以注入不同的 chatClient。
6、完整目录结构示例
src/
├── main/
│ ├── java/
│ │ └── com/example/chatbot/
│ │ ├── ChatController.java
│ │ └── ChatRequest.java
│ └── resources/
│ └── application.yml
7、常见问题与建议
- API Key安全:生产环境请勿硬编码密钥,建议用环境变量或配置中心。
- 异常处理:建议对 chatClient 的异常做统一捕获和处理,提升用户体验。
- 限流防刷:可用 Spring Boot Actuator 监控接口调用量,防止滥用。、
创作不易,点赞关注,持续更新~~~

2万+

被折叠的 条评论
为什么被折叠?



