Spring AI 入门与实践:快速构建 AI 驱动的 Java 应用
·
1. 什么是 Spring AI?
Spring AI 是 Spring 官方推出的一个项目,旨在将生成式 AI 能力无缝集成到 Spring 生态系统中。它提供了一套统一的 API 和抽象,让 Java 开发者能够轻松地在应用中调用各种大语言模型(如 OpenAI GPT、Anthropic Claude、Google Gemini 等)、嵌入模型和图像生成模型,而无需关心底层供应商的 API 差异。
其核心目标是:简化 AI 集成,提升开发效率。
2. 核心概念与模块
Spring AI 主要围绕以下几个核心模块构建:
- Chat Client:用于与大语言模型(LLM)进行对话式交互。
- Embedding Client:用于将文本转换为向量(嵌入),是构建 RAG(检索增强生成)应用的基础。
- Image Client:用于调用图像生成模型(如 DALL-E、Stable Diffusion)。
- Prompt Templates:提供强大的提示词模板功能,支持变量替换和结构化输出。
- Output Parsers:将模型的非结构化文本输出解析为 Java 对象(如 JSON、List 等)。
- Vector Stores:集成多种向量数据库(如 Pinecone、Redis、PGVector),用于存储和检索嵌入向量。
3. 快速开始:你的第一个 Spring AI 应用
3.1 环境准备
确保你的开发环境满足以下条件:
- JDK 17 或更高版本
- Maven 3.6+ 或 Gradle 7.x+
- 一个可用的 AI 模型 API 密钥(例如 OpenAI API Key)
3.2 创建项目
使用 Spring Initializr 快速创建一个 Spring Boot 项目,并添加 spring-ai-openai-spring-boot-starter 依赖。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>1.0.0-M5</version> <!-- 请使用最新稳定版本 -->
</dependency>
3.3 配置 API 密钥
在 application.properties 或 application.yml 中配置你的 OpenAI API 密钥:
spring.ai.openai.api-key=${OPENAI_API_KEY}
3.4 编写第一个对话服务
创建一个简单的 Service 来调用 ChatGPT:
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.stereotype.Service;
@Service
public class ChatService {
private final ChatClient chatClient;
public ChatService(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
public String chat(String message) {
return chatClient.prompt()
.user(message)
.call()
.content();
}
}
3.5 创建控制器并测试
创建一个 REST 控制器来暴露聊天接口:
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/ai")
public class ChatController {
private final ChatService chatService;
public ChatController(ChatService chatService) {
this.chatService = chatService;
}
@PostMapping("/chat")
public String chat(@RequestBody String message) {
return chatService.chat(message);
}
}
启动应用后,你可以通过 POST 请求 /ai/chat 与 AI 对话。
4. 进阶功能与实践
4.1 使用提示词模板
Spring AI 的提示词模板支持变量和结构化指令,让提示管理更清晰。
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;
// 定义模板
String template = """
你是一位专业的{role}。
请用{style}风格,回答以下问题:
{question}
""";
PromptTemplate promptTemplate = new PromptTemplate(template);
Prompt prompt = promptTemplate.create(Map.of(
"role", "Java 架构师",
"style", "简洁明了",
"question", "如何设计一个高可用的微服务系统?"
));
String response = chatClient.prompt(prompt).call().content();
4.2 构建 RAG 应用
结合 Embedding Client 和 Vector Store,可以轻松构建知识库问答系统。
- 文档加载与分块:使用 Spring AI 的文档加载器读取 PDF、Word 等文件,并进行文本分块。
- 生成嵌入并存储:为每个文本块生成向量,并存入向量数据库。
- 检索与生成:用户提问时,先检索相关文本块,再将其作为上下文提供给 LLM 生成答案。
4.3 流式响应
对于长文本生成,使用流式响应可以提升用户体验。
@GetMapping("/stream")
public Flux<String> streamChat(@RequestParam String message) {
return chatClient.prompt()
.user(message)
.stream()
.content();
}
5. 总结与最佳实践
- 选择合适的模型供应商:根据成本、性能和应用场景(聊天、嵌入、图像)选择。
- 充分利用抽象层:Spring AI 的抽象让你可以轻松切换底层模型,避免供应商锁定。
- 关注提示工程:好的提示词是获得高质量回答的关键,利用好
PromptTemplate。 - 考虑成本与速率限制:在生产环境中,注意 API 调用的成本和频率限制。
- 持续关注生态发展:Spring AI 仍在快速发展,及时关注官方文档和版本更新。
Spring AI 极大地降低了在 Java 应用中集成 AI 能力的门槛,让开发者可以更专注于业务逻辑和创新。从简单的聊天机器人到复杂的 RAG 系统,它都能提供强大的支持。
更多推荐


所有评论(0)