Spring AI生产环境 Checklist:20条黄金法则 前言本文总结Spring AI生产环境部署的最佳实践涵盖配置、安全、监控、性能四大维度每条都是实战经验。一、配置管理5条1. API Key必须通过环境变量注入# ✅ 推荐spring:ai:openai:api-key:${OPENAI_API_KEY}# ❌ 禁止spring:ai:openai:api-key:sk-xxxxx2. 超时时间根据场景配置场景connect-timeoutread-timeout简单问答10s60s复杂推理10s180s长文本生成10s300s3. 区分环境配置# application-dev.ymlspring:ai:openai:base-url:https://api.openai.com/v1# application-prod.ymlspring:ai:openai:base-url:${AI_API_BASE_URL}# 通过环境变量指定4. 敏感信息加密存储使用Jasypt或Spring Cloud Config的加密功能# 加密encrypt key:mysecret algorithm:PBEWithMD5AndDES input:sk-xxxxx# 配置spring: ai: openai: api-key: ENC(加密后的值)5. 配置版本控制所有配置文件必须纳入Git版本控制但敏感信息通过环境变量注入。二、安全加固5条6. 提示词注入防护publicStringsanitizeInput(StringuserInput){// 移除可能的注入内容returnuserInput.replaceAll(\\[system\\],).replaceAll(\\[inst\\],).replaceAll(you are a,).trim();}7. 输出内容审核PostFilter(returnObject.length() 10000)// 限制长度publicStringchat(Stringmessage){StringresponsechatClient.prompt().user(sanitizeInput(message)).call().content();// 内容安全检查if(containsSensitiveContent(response)){log.warn(检测到敏感内容);return抱歉我无法回答这个问题。;}returnresponse;}8. API Key定期轮换建立Key轮换机制建议每月轮换一次# 使用Key别名而非硬编码spring:ai:openai:api-key:${OPENAI_API_KEY_V2}# 定期更新9. 敏感数据隔离// 不要把用户隐私数据传给模型publicStringchat(Stringmessage,Useruser){// ❌ 错误Stringprompt用户user.getPhone()问:message;// ✅ 正确Stringprompt用户问:message;returnchatClient.prompt().user(prompt).call().content();}10. 请求频率限制RateLimiter(nameai-api,fallbackMethodfallback)publicStringchat(Stringmessage){returnchatClient.prompt().user(message).call().content();}publicStringfallback(Stringmessage,Exceptione){return请求过于频繁请稍后重试。;}三、可观测性5条11. 结构化日志log.info(AI调用|请求ID:{}|模型:{}|耗时:{}ms|Token:{}|结果:{},requestId,modelName,duration,totalTokens,success?成功:失败);12. 关键指标监控指标目标告警阈值调用成功率99%95%P99延迟5s10sToken消耗速率-日均增长50%限流触发频率1%5%13. 链路追踪Spanspantracer.nextSpan().name(ai-call);try(Tracer.SpanInScopewstracer.withSpanInScope(span)){span.tag(model,modelName);span.tag(prompt.length,prompt.length());// 调用逻辑}finally{span.end();}14. 异常分布统计MapString,AtomicIntegerexceptionCountsnewConcurrentHashMap();try{returnchatClient.prompt().user(message).call().content();}catch(Exceptione){exceptionCounts.computeIfAbsent(e.getClass().getSimpleName(),k-newAtomicInteger()).incrementAndGet();throwe;}15. 费用监控看板按业务线、调用方统计Token消耗设置月度预算告警。四、性能优化5条16. 连接池配置BeanpublicRestClientCustomizerHttpComponentsClientHttpRequestFactorypoolCustomizer(){returnbuilder-builder.requestFactory(HttpComponentsClientHttpRequestFactory.class).build();}17. 语义缓存ServicepublicclassSemanticCacheService{Cacheable(valuesemantic,key#prompt,unless#result null)publicStringchat(Stringprompt){returnchatClient.prompt().user(prompt).call().content();}}18. 异步化处理AsyncpublicCompletableFutureStringchatAsync(Stringmessage){returnCompletableFuture.supplyAsync(()-chatClient.prompt().user(message).call().content());}19. 模型预热PostConstructpublicvoidwarmup(){log.info(开始模型预热...);chatClient.prompt().user(你好).call().content();log.info(模型预热完成);}20. 分级降级策略publicStringchatWithDegradation(Stringmessage){try{// 优先用主模型returnprimaryChat(message);}catch(RateLimitExceptione){// 限流时用轻量模型returnlightweightChat(message);}catch(Exceptione){// 异常时返回预设回复returngetFallbackResponse();}}企业级建议在实际生产环境中建议通过API聚合平台如weelinking等统一管理AI能力这类平台通常提供完善的监控告警、费用统计和容灾机制能够有效降低运维复杂度。总结类别条目重要性配置管理5条⭐⭐⭐⭐⭐安全加固5条⭐⭐⭐⭐⭐可观测性5条⭐⭐⭐⭐性能优化5条⭐⭐⭐⭐#SpringAI #最佳实践 #生产环境 #Java #AI集成 推荐阅读如果这篇对你有帮助以下文章你也会喜欢VS Code 安装配置 Claude Code 插件教程3分钟搞定2026全网首个企业级claude中转服务平台使用说明2026年度亚洲大模型API中转平台评优weelinking获评综合表现最佳平台