1. 为什么选择Spring AI集成Gemini大模型最近两年大模型技术发展迅猛各种AI应用层出不穷。作为Java开发者我们最熟悉的Spring生态也迎来了AI能力的加持。Spring AI这个项目让我眼前一亮它就像给Spring Boot插上了AI的翅膀让我们可以用熟悉的Java语法调用各种大模型。我实际测试过多个大模型API发现谷歌的Gemini在中文处理和多轮对话上表现尤为出色。特别是Gemini 2.5 Pro版本不仅响应速度快对技术问题的理解也很到位。最棒的是它提供了免费的调用额度对于个人开发者和小型项目完全够用。相比直接调用原生API通过Spring AI集成有三大优势开发效率高省去了自己封装HTTP客户端的麻烦代码更简洁用面向对象的方式处理对话和流式响应易于扩展一套代码可以适配不同的大模型提供商2. 环境准备与API配置2.1 获取Gemini API密钥首先需要访问谷歌AI开发者平台https://ai.google.dev用谷歌账号登录后在控制台创建一个新项目。这里有个小技巧建议项目名称加上日期后缀方便后续管理多个测试项目。创建完项目后在左侧菜单找到API密钥选项。点击创建API密钥按钮系统会生成一个以AIzaSy开头的字符串。这个密钥相当于访问Gemini的密码一定要妥善保管。我建议把它保存在项目的application.yml中而不是直接硬编码在Java文件里。注意免费额度每分钟限制5次请求开发调试时建议在代码中加入1秒的延迟避免触发限流。2.2 初始化Spring Boot项目使用Spring Initializr创建一个新项目我推荐选择以下依赖Spring WebLombok简化代码Spring AI核心依赖关键是要添加Spring AI对Gemini的支持。在pom.xml中加入dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-google-gemini-spring-boot-starter/artifactId version0.8.1/version /dependency配置application.yml示例spring: ai: google: gemini: api-key: ${GEMINI_API_KEY} model: gemini-2.5-pro chat: options: temperature: 0.7 top-p: 0.93. 核心代码实现3.1 基础对话功能实现创建一个ChatController来处理用户请求RestController RequiredArgsConstructor public class ChatController { private final ChatClient chatClient; PostMapping(/chat) public String simpleChat(RequestBody String question) { return chatClient.call(question); } }这个最简单的版本已经可以实现问答功能。但实际项目中我们需要更复杂的交互。比如添加系统角色设定public ChatResponse chatWithRole(String userInput) { SystemMessage systemMessage new SystemMessage(你是一位资深Java技术专家); UserMessage userMessage new UserMessage(userInput); Prompt prompt new Prompt(List.of(systemMessage, userMessage)); return chatClient.generate(prompt); }3.2 流式响应处理大模型生成内容可能需要较长时间流式响应可以显著提升用户体验。Spring AI提供了Flux支持GetMapping(value /stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxString streamChat(RequestParam String question) { return chatClient.stream(question) .map(ChatResponse::getOutput) .map(AssistantMessage::getText); }前端可以通过EventSource监听这个接口实现打字机效果。我在项目中实测流式响应比普通接口快2-3秒就能看到首字返回。4. 高级功能与优化技巧4.1 多轮对话管理实际对话需要维护上下文这里分享我的实现方案Service public class ChatService { private final ListMessage history new ArrayList(); public FluxString multiTurnChat(String userInput) { history.add(new UserMessage(userInput)); Prompt prompt new Prompt(history); return chatClient.stream(prompt) .doOnNext(response - { history.add(response.getOutput()); }) .map(response - response.getOutput().getText()); } }关键点使用成员变量保存对话历史每次交互都带上全部历史记录注意控制history大小避免token超限4.2 性能调优建议经过多次测试我总结了这些优化经验超时设置默认超时可能不够spring: ai: google: gemini: client: connect-timeout: 30s read-timeout: 60s重试机制应对API偶尔不稳定Retryable(maxAttempts 3, backoff Backoff(delay 1000)) public ChatResponse reliableChat(String input) { //... }缓存常用回答对固定问题可以缓存结果4.3 异常处理实践大模型API调用可能遇到各种异常完善的错误处理很重要ExceptionHandler(ApiException.class) public ResponseEntityErrorResponse handleApiException(ApiException ex) { if(ex.getStatusCode() 429) { return ResponseEntity.status(429) .body(new ErrorResponse(请求过于频繁请稍后再试)); } // 其他错误处理... }特别要注意速率限制429错误建议在前端也做相应提示。
【AI】Spring AI 实战:零基础集成谷歌 Gemini 大模型实现智能对话系统
1. 为什么选择Spring AI集成Gemini大模型最近两年大模型技术发展迅猛各种AI应用层出不穷。作为Java开发者我们最熟悉的Spring生态也迎来了AI能力的加持。Spring AI这个项目让我眼前一亮它就像给Spring Boot插上了AI的翅膀让我们可以用熟悉的Java语法调用各种大模型。我实际测试过多个大模型API发现谷歌的Gemini在中文处理和多轮对话上表现尤为出色。特别是Gemini 2.5 Pro版本不仅响应速度快对技术问题的理解也很到位。最棒的是它提供了免费的调用额度对于个人开发者和小型项目完全够用。相比直接调用原生API通过Spring AI集成有三大优势开发效率高省去了自己封装HTTP客户端的麻烦代码更简洁用面向对象的方式处理对话和流式响应易于扩展一套代码可以适配不同的大模型提供商2. 环境准备与API配置2.1 获取Gemini API密钥首先需要访问谷歌AI开发者平台https://ai.google.dev用谷歌账号登录后在控制台创建一个新项目。这里有个小技巧建议项目名称加上日期后缀方便后续管理多个测试项目。创建完项目后在左侧菜单找到API密钥选项。点击创建API密钥按钮系统会生成一个以AIzaSy开头的字符串。这个密钥相当于访问Gemini的密码一定要妥善保管。我建议把它保存在项目的application.yml中而不是直接硬编码在Java文件里。注意免费额度每分钟限制5次请求开发调试时建议在代码中加入1秒的延迟避免触发限流。2.2 初始化Spring Boot项目使用Spring Initializr创建一个新项目我推荐选择以下依赖Spring WebLombok简化代码Spring AI核心依赖关键是要添加Spring AI对Gemini的支持。在pom.xml中加入dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-google-gemini-spring-boot-starter/artifactId version0.8.1/version /dependency配置application.yml示例spring: ai: google: gemini: api-key: ${GEMINI_API_KEY} model: gemini-2.5-pro chat: options: temperature: 0.7 top-p: 0.93. 核心代码实现3.1 基础对话功能实现创建一个ChatController来处理用户请求RestController RequiredArgsConstructor public class ChatController { private final ChatClient chatClient; PostMapping(/chat) public String simpleChat(RequestBody String question) { return chatClient.call(question); } }这个最简单的版本已经可以实现问答功能。但实际项目中我们需要更复杂的交互。比如添加系统角色设定public ChatResponse chatWithRole(String userInput) { SystemMessage systemMessage new SystemMessage(你是一位资深Java技术专家); UserMessage userMessage new UserMessage(userInput); Prompt prompt new Prompt(List.of(systemMessage, userMessage)); return chatClient.generate(prompt); }3.2 流式响应处理大模型生成内容可能需要较长时间流式响应可以显著提升用户体验。Spring AI提供了Flux支持GetMapping(value /stream, produces MediaType.TEXT_EVENT_STREAM_VALUE) public FluxString streamChat(RequestParam String question) { return chatClient.stream(question) .map(ChatResponse::getOutput) .map(AssistantMessage::getText); }前端可以通过EventSource监听这个接口实现打字机效果。我在项目中实测流式响应比普通接口快2-3秒就能看到首字返回。4. 高级功能与优化技巧4.1 多轮对话管理实际对话需要维护上下文这里分享我的实现方案Service public class ChatService { private final ListMessage history new ArrayList(); public FluxString multiTurnChat(String userInput) { history.add(new UserMessage(userInput)); Prompt prompt new Prompt(history); return chatClient.stream(prompt) .doOnNext(response - { history.add(response.getOutput()); }) .map(response - response.getOutput().getText()); } }关键点使用成员变量保存对话历史每次交互都带上全部历史记录注意控制history大小避免token超限4.2 性能调优建议经过多次测试我总结了这些优化经验超时设置默认超时可能不够spring: ai: google: gemini: client: connect-timeout: 30s read-timeout: 60s重试机制应对API偶尔不稳定Retryable(maxAttempts 3, backoff Backoff(delay 1000)) public ChatResponse reliableChat(String input) { //... }缓存常用回答对固定问题可以缓存结果4.3 异常处理实践大模型API调用可能遇到各种异常完善的错误处理很重要ExceptionHandler(ApiException.class) public ResponseEntityErrorResponse handleApiException(ApiException ex) { if(ex.getStatusCode() 429) { return ResponseEntity.status(429) .body(new ErrorResponse(请求过于频繁请稍后再试)); } // 其他错误处理... }特别要注意速率限制429错误建议在前端也做相应提示。