🌟 Spring Boot AI 极速入门:解锁智能应用开发 (2025版)
摘要: 想用Spring Boot轻松集成AI能力?Spring AI 项目让你告别复杂对接!本文基于官方文档,带你快速上手Spring AI的核心概念与实战场景,助你轻松构建智能应用。
📌 一、Spring AI 是什么?
Spring AI 是 Spring 官方推出的 AI 应用开发框架,目标是将大语言模型 (LLM) 和 AI 能力无缝集成到 Spring 生态系统中。它提供了一套 简洁、统一、抽象 的 API,让你能用熟悉的 Spring 风格(如 RestTemplate
、Repository
模式)调用不同 AI 提供商的模型(如 OpenAI、Azure OpenAI、Anthropic、Hugging Face 等)。
核心价值:
- 简化集成: 无需手写 HTTP 请求、解析 JSON,Spring 帮你搞定。
- 统一抽象: 更换 AI 提供商?代码几乎不用改!
- Spring 风格: 依赖注入、AOP、Actuator… Spring 全家桶福利全享。
- 模块化设计: 按需引入文本、图像、嵌入、向量库等模块。
🧩 二、核心概念速览
Prompt
(提示): 你给 AI 模型的输入,包含你的问题、指令或上下文信息。通常是一个结构化的字符串。PromptTemplate
(提示模板): 用于动态生成Prompt
的工具。支持占位符(如{topic}
),避免硬编码。
示例:"请用简洁的语言解释一下 {topic} 的概念。"
ModelClient
(模型客户端): 核心接口!代表你与某个 AI 模型服务的连接。通过它发送Prompt
并接收响应。Spring AI 为不同提供商(OpenAiClient
,AzureOpenAiClient
等)提供了具体实现。AiResponse
/Generation
(响应): 模型返回的结果。AiResponse
通常包含一个或多个Generation
对象,每个Generation
包含模型生成的文本 (text
) 及相关元数据。OutputParser
(输出解析器): 将 AI 返回的文本 (String
) 解析成你需要的强类型对象(如POJO
,List
等)。简化结果处理。EmbeddingClient
(嵌入客户端): 用于将文本/数据转换为高维向量(Embedding)。这是实现语义搜索、RAG 的基础。VectorStore
(向量数据库): 存储和检索 Embedding 向量及其关联原始数据的抽象接口。支持 Pinecone、Milvus、Redis、PgVector 等。
🚀 三、Spring AI 能做什么?典型应用场景
场景 1:智能文本生成 (Chat & Completions)
- 用途: 自动生成营销文案、产品描述、邮件草稿、代码片段、对话聊天机器人。
- Spring AI 实现:
@RestController @RequestMapping("/ai") public class TextGenController { private final OpenAiClient openAiClient; // 注入 ModelClient (如 OpenAiClient) public TextGenController(OpenAiClient openAiClient) { this.openAiClient = openAiClient; } @GetMapping("/joke") public String getTechJoke(@RequestParam String topic) { PromptTemplate template = new PromptTemplate("给我讲一个关于 {topic} 的技术冷笑话。"); Prompt prompt = template.create(Map.of("topic", topic)); AiResponse response = openAiClient.generate(prompt); return response.getGeneration().getText(); } }
场景 2:多模态处理 (Multimodal - 图像理解/生成)
- 用途: 分析图片内容生成描述、基于文本描述生成图片(需要模型支持,如 OpenAI DALL-E)。
- Spring AI 实现 (概念):
// 假设有一个 ImageClient @Service public class ImageService { private final OpenAiImageClient imageClient; // 假设的 Image ModelClient public String describeImage(byte[] imageBytes) { ImagePrompt imagePrompt = new ImagePrompt(imageBytes, "描述这张图片的内容和氛围。"); ImageResponse response = imageClient.generate(imagePrompt); return response.getDescription(); } }
场景 3:函数调用 (Function Calling)
- 用途: 让 AI 模型根据用户请求决定调用你预先定义好的 Java 方法(函数),实现动态信息获取或执行操作(如查天气、订会议室)。
- Spring AI 实现:
@Service public class WeatherService { @FunctionDescription(name = "getCurrentWeather", description = "获取指定城市的当前天气") public Weather getCurrentWeather(@ParameterDescription(description = "城市名称,例如 '北京', '上海'") String location) { // ... 实际调用天气 API 的逻辑 ... return new Weather(...); } } // 在调用 ModelClient 时,注册你的 Function Call 工具 OpenAiClient client = ...; client.addFunctionCallback(new FunctionCallbackWrapper<>(new WeatherService(), "getCurrentWeather")); AiResponse response = client.generate(userPrompt); // AI 可能触发 getCurrentWeather 函数调用
场景 4:RAG (检索增强生成) - 结合向量数据库
- 用途: 让你的 AI 回答基于 私有知识库(公司文档、产品手册、个人笔记)的内容,避免模型胡编乱造。
- Spring AI 关键步骤:
- 使用
EmbeddingClient
将你的知识库文档转换为向量 (Embedding
)。 - 将向量和原始文本存储到
VectorStore
(如 RedisVectorStore)。 - 用户提问时,将问题也转换为向量。
- 在
VectorStore
中做相似度搜索,找到与问题最相关的文档片段。 - 将相关片段 + 用户原问题 组合成新的 Prompt 发给 LLM。
- LLM 基于这些可靠上下文生成答案。
- 使用
- 优势: 答案精准、可溯源、支持最新/私有信息。
⚙️ 四、环境搭建 (超简单!)
创建 Spring Boot 项目:
- 使用 https://start.spring.io
- 选择依赖:
Spring Web
,Spring AI
(或按需添加spring-ai-openai-spring-boot-starter
,spring-ai-azure-openai-spring-boot-starter
等具体实现)
添加依赖 (Maven 示例 - 以 OpenAI 为例):
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>{最新稳定版}</version> <!-- 替换为官方最新版本号 --> </dependency>
配置 API 密钥:
在application.properties
或application.yml
中配置:# OpenAI 示例 spring.ai.openai.api-key=你的OpenAI_API_KEY # 其他提供商如 Azure OpenAI spring.ai.azure.openai.api-key=你的Azure_OpenAI_KEY spring.ai.azure.openai.endpoint=你的Azure_OpenAI_ENDPOINT
🎯 五、动手试试!一个完整示例
// 1. 应用入口
@SpringBootApplication
public class AiDemoApplication {
public static void main(String[] args) {
SpringApplication.run(AiDemoApplication.class, args);
}
}
// 2. 服务层 - 处理AI逻辑
@Service
public class AIService {
private final OpenAiClient aiClient;
public AIService(OpenAiClient aiClient) {
this.aiClient = aiClient;
}
public String generatePoem(String subject, String style) {
PromptTemplate template = new PromptTemplate("请以{style}的风格,创作一首关于{subject}的短诗。");
Map<String, Object> variables = Map.of("subject", subject, "style", style);
Prompt prompt = template.create(variables);
AiResponse response = aiClient.generate(prompt);
return response.getGeneration().getText();
}
}
// 3. 控制器层 - 暴露HTTP API
@RestController
@RequestMapping("/api/poem")
public class PoemController {
private final AIService aiService;
public PoemController(AIService aiService) {
this.aiService = aiService;
}
@GetMapping
public String getPoem(@RequestParam String subject, @RequestParam(defaultValue = "浪漫") String style) {
return aiService.generatePoem(subject, style);
}
}
访问: GET /api/poem?subject=星空&style=科幻
💎 总结
Spring AI 极大地降低了在 Spring Boot 应用中集成 AI 能力的门槛。通过其清晰的抽象层和熟悉的 Spring 编程模型,开发者可以快速实现:
- 智能文本对话与生成
- 多模态内容理解与创作
- 动态函数调用扩展能力
- 基于 RAG 的私有知识问答
赶紧动手,用 Spring Boot + Spring AI,开启你的智能应用开发之旅吧!
参考资源:
- Spring AI 官方文档: https://docs.spring.io/spring-ai/reference/
- Spring AI GitHub: https://github.com/spring-projects/spring-ai
- Spring Initializr: https://start.spring.io (创建项目)
(本文示例代码基于 Spring AI 最新稳定版编写,请以官方文档为准)