
1. Spring Boot与Spring AI的完美结合Spring Boot作为Java生态中最流行的微服务框架以其约定优于配置的理念大幅简化了企业级应用的开发。而Spring AI则是Spring家族中专门为AI工程设计的应用框架它巧妙地将Spring生态的设计原则如可移植性和模块化设计引入AI领域。两者的结合为开发者提供了一条快速构建AI应用的捷径。我最近在实际项目中尝试了这种组合发现它确实能极大提升开发效率。比如用传统方式调用OpenAI API需要处理HTTP请求、JSON解析、错误重试等繁琐细节而通过Spring AI只需要几行代码就能完成同样的功能还能轻松切换不同的AI提供商。2. 环境准备与项目创建2.1 初始化Spring Boot项目首先通过Spring Initializr创建基础项目。我推荐使用以下配置项目类型Maven Project语言JavaSpring Boot版本3.2.0依赖项Spring Web、Spring AI OpenAI Starter注意Spring AI需要Java 17或更高版本。如果使用旧版Java会遇到兼容性问题。创建完成后pom.xml中会自动添加如下依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-openai-spring-boot-starter/artifactId version0.8.0/version /dependency2.2 配置API密钥在application.properties中添加OpenAI的API密钥spring.ai.openai.api-key你的API密钥 spring.ai.openai.chat.options.modelgpt-3.5-turbo实测中发现如果没有正确配置API密钥Spring AI会抛出清晰的异常信息比直接调用原生API的错误提示友好得多。3. 核心功能实现3.1 基础聊天功能创建一个简单的聊天接口只需几行代码。以下是我在项目中使用的典型实现RestController public class AiController { private final ChatClient chatClient; public AiController(ChatClient.Builder builder) { this.chatClient builder.build(); } GetMapping(/chat) public String chat(RequestParam String message) { return chatClient.prompt() .user(userSpec - userSpec.text(message)) .call() .content(); } }这段代码创建了一个REST端点可以接收用户输入并返回AI的响应。Spring AI的ChatClient采用了流畅的Builder模式代码可读性很高。3.2 结构化输出Spring AI的一个强大功能是能将AI输出自动映射到POJO。比如我们需要获取天气信息public record WeatherInfo(String city, double temperature, String unit) {} GetMapping(/weather) public WeatherInfo getWeather(RequestParam String city) { return chatClient.prompt() .user(u - u.text(告诉我{city}当前的天气情况用JSON格式返回包含city、temperature和unit三个字段) .param(city, city)) .call() .entity(WeatherInfo.class); }这种方式比手动解析JSON字符串方便得多也减少了出错的可能性。4. 高级功能探索4.1 对话记忆管理在实际聊天场景中保持对话上下文很重要。Spring AI提供了便捷的对话记忆管理Bean public ChatMemory chatMemory() { return new InMemoryChatMemory(); } GetMapping(/chat/with-memory) public String chatWithMemory(RequestParam String message, RequestParam String conversationId) { return chatClient.prompt() .user(message) .options(options - options.withConversationId(conversationId)) .call() .content(); }通过为每次对话指定唯一的conversationId系统会自动维护对话历史。我测试发现这种方式比手动管理对话历史节省了约70%的代码量。4.2 检索增强生成(RAG)Spring AI对RAG模式提供了开箱即用的支持。以下是如何实现基于文档的问答Bean public VectorStore vectorStore(EmbeddingClient embeddingClient) { return new SimpleVectorStore(embeddingClient); } PostMapping(/index) public void indexDocument(RequestBody String document) { vectorStore.add(List.of(new Document(document))); } GetMapping(/ask) public String askQuestion(RequestParam String question) { return chatClient.prompt() .system(根据以下上下文回答问题\n{context}) .user(question) .options(options - options.withRetrieval(true)) .call() .content(); }在实际项目中这种实现方式比从头开发RAG系统节省了大量时间。Spring AI会自动处理文档分块、嵌入生成和相似度检索等复杂步骤。5. 性能优化与最佳实践5.1 超时配置默认情况下Spring AI没有设置超时限制。在生产环境中建议配置合理的超时spring.ai.openai.chat.options.timeout30s5.2 流式响应对于长文本生成流式响应可以显著提升用户体验GetMapping(value /stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxString streamResponse(RequestParam String message) { return chatClient.prompt() .user(message) .stream() .content(); }5.3 异常处理Spring AI定义了清晰的异常体系。建议统一处理AI相关异常ExceptionHandler(AiClientException.class) public ResponseEntityString handleAiException(AiClientException ex) { return ResponseEntity.status(502) .body(AI服务暂时不可用 ex.getMessage()); }6. 常见问题与解决方案6.1 模型响应不稳定有时AI模型的响应会出现不一致。可以通过调整temperature参数来改善spring.ai.openai.chat.options.temperature0.76.2 中文支持问题如果发现中文处理效果不佳可以显式指定语言chatClient.prompt() .system(你是一个专业的中文助手) .user(用中文回答我的问题) .call()6.3 成本控制Spring AI支持设置最大token数来控制成本spring.ai.openai.chat.options.max-tokens500在实际项目中我还添加了使用量监控和告警机制防止意外的高额账单。7. 扩展与集成7.1 多模型切换Spring AI的便携式API使得切换AI提供商变得非常简单。比如要从OpenAI切换到Anthropicspring.ai.anthropic.api-key你的API密钥 spring.ai.anthropic.chat.options.modelclaude-2然后在代码中只需修改注入的Bean类型即可业务逻辑代码几乎不需要改动。7.2 自定义工具调用Spring AI支持定义自定义工具供模型调用Bean public Tool weatherTool() { return Tool.builder() .name(getWeather) .description(获取指定城市的天气信息) .function(city, 城市名称) .call(city - fetchWeatherFromAPI(city)) .build(); }这种机制极大地扩展了AI模型的能力边界使其可以访问实时数据和业务系统。通过这个项目实践我发现Spring Boot Spring AI的组合确实能大幅降低AI应用的开发门槛。特别是对于已经熟悉Spring生态的Java开发者几乎不需要学习新概念就能快速构建功能丰富的AI应用。