Spring AI 入门与实践:快速构建 AI 驱动的 Java 应用
1. 什么是 Spring AISpring 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 Key3.2 创建项目使用 Spring Initializr 快速创建一个 Spring Boot 项目并添加spring-ai-openai-spring-boot-starter依赖。dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-openai-spring-boot-starter/artifactId version1.0.0-M5/version !-- 请使用最新稳定版本 -- /dependency3.3 配置 API 密钥在application.properties或application.yml中配置你的 OpenAI API 密钥spring.ai.openai.api-key${OPENAI_API_KEY}3.4 编写第一个对话服务创建一个简单的 Service 来调用 ChatGPTimport 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 FluxString streamChat(RequestParam String message) { return chatClient.prompt() .user(message) .stream() .content(); }5. 总结与最佳实践选择合适的模型供应商根据成本、性能和应用场景聊天、嵌入、图像选择。充分利用抽象层Spring AI 的抽象让你可以轻松切换底层模型避免供应商锁定。关注提示工程好的提示词是获得高质量回答的关键利用好PromptTemplate。考虑成本与速率限制在生产环境中注意 API 调用的成本和频率限制。持续关注生态发展Spring AI 仍在快速发展及时关注官方文档和版本更新。Spring AI 极大地降低了在 Java 应用中集成 AI 能力的门槛让开发者可以更专注于业务逻辑和创新。从简单的聊天机器人到复杂的 RAG 系统它都能提供强大的支持。