找回密码
 立即注册
首页 业界区 安全 13. Spring AI 的观测性

13. Spring AI 的观测性

廖雯华 2025-11-20 23:00:09
13. Spring AI 的观测性

@
目录

  • 13. Spring AI 的观测性

    • 观测性

      • 为什么Spring AI应用急需可观测性?

        • AI服务成本失控的痛点
        • Spring AI可观测性的价值

      • 实战演练:构建可观测的Spring AI翻译应用

        • 第一步:Spring AI项目初始化
        • 第二步:Spring AI客户端配置
        • 第三步:构建Spring AI翻译服务
        • 第四步:Spring AI翻译API测试

      • Spring AI监控指标深度解析

        • 核心指标1:Spring AI操作性能监控
        • 核心指标2:Spring AI Token使用量精准追踪



  • 最后:

观测性

为什么Spring AI应用急需可观测性?

AI服务成本失控的痛点

在企业级AI应用中,使用DeepSeek、OpenAI、Google Gemini或Azure OpenAI等服务时,成本控制是一个严峻挑战:

  • Token消耗不透明:无法精确了解每次AI调用的成本
  • 费用增长失控:大规模应用中,AI服务费用可能呈指数级增长
  • 性能瓶颈难定位:AI调用链路复杂,问题排查困难
  • 资源使用不合理:缺乏数据支撑的优化决策
Spring AI可观测性的价值

Spring AI的可观测性功能为这些痛点提供了完美解决方案:

  • 精准Token监控:实时追踪输入/输出Token消耗,精确到每次调用
  • 智能成本控制:基于使用统计制定成本优化策略
  • 深度性能分析:识别AI调用瓶颈,优化响应时间
  • 完整链路追踪:端到端记录请求在Spring AI应用中的完整流转
实战演练:构建可观测的Spring AI翻译应用

第一步:Spring AI项目初始化

在start.spring.io[1]创建Spring Boot项目,集成Spring AI核心依赖:
Maven依赖配置(Spring AI BOM管理):
  1. <dependency>
  2.   <groupId>com.alibaba.cloud.ai</groupId>
  3.   spring-ai-alibaba-starter-dashscope</artifactId>
  4. </dependency>
  5. <dependency>
  6.   <groupId>org.springframework.boot</groupId>
  7.   spring-boot-starter-actuator</artifactId>
  8. </dependency>
  9. <dependency>
  10.   <groupId>org.springframework.boot</groupId>
  11.   spring-boot-starter-web</artifactId>
  12. </dependency>
复制代码
第二步:Spring AI客户端配置

主应用类配置:
  1. @SpringBootApplication
  2. publicclassSpringAiTranslationApplication {
  3.     publicstaticvoidmain(String[] args) {
  4.         SpringApplication.run(SpringAiTranslationApplication.class, args);
  5.     }
  6.     @Bean
  7.     public ChatClient chatClient(ChatClient.Builder builder) {
  8.         return builder.build();
  9.     }
  10. }
复制代码
Spring AI配置文件:
  1. # Spring AI 可观测性配置
  2. management:
  3. endpoints:
  4.     web:
  5.       exposure:
  6.         include:"*"
  7. endpoint:
  8.     health:
  9.       show-details:always
  10. metrics:
  11.     export:
  12.       prometheus:
  13.         enabled:true
  14. spring:
  15. threads:
  16.     virtual:
  17.       enabled:true
  18. ai:
  19.     deepseek:
  20.       api-key:${DEEPSEEK_API_KEY}
  21.       chat:
  22.         options:
  23.           model:deepseek-chat
  24.           temperature: 0.8
复制代码
环境变量设置:
export DEEPSEEK_API_KEY=your-deepseek-api-key
第三步:构建Spring AI翻译服务

智能翻译控制器:
  1. @RestController
  2. @RequestMapping("/api/v1")
  3. @RequiredArgsConstructor
  4. @Slf4j
  5. public class SpringAiTranslationController {
  6.     private final ChatModel chatModel;
  7.     @PostMapping("/translate")
  8.     public TranslationResponse translate(@RequestBody TranslationRequest request) {
  9.         log.info("Spring AI翻译请求: {} -> {}", request.getSourceLanguage(), request.getTargetLanguage());
  10.         
  11.         String prompt= String.format(
  12.                 "作为专业翻译助手,请将以下%s文本翻译成%s,保持原文的语气和风格:\n%s",
  13.                 request.getSourceLanguage(),
  14.                 request.getTargetLanguage(),
  15.                 request.getText()
  16.         );
  17.         String translatedText= chatModel.call(prompt);
  18.         
  19.         return TranslationResponse.builder()
  20.                 .originalText(request.getText())
  21.                 .translatedText(translatedText)
  22.                 .sourceLanguage(request.getSourceLanguage())
  23.                 .targetLanguage(request.getTargetLanguage())
  24.                 .timestamp(System.currentTimeMillis())
  25.                 .build();
  26.     }
  27. }
  28. @Data
  29. @NoArgsConstructor
  30. @AllArgsConstructor
  31. @Builder
  32. class TranslationRequest {
  33.     private String text;
  34.     private String sourceLanguage;
  35.     private String targetLanguage;
  36. }
  37. @Data
  38. @NoArgsConstructor
  39. @AllArgsConstructor
  40. @Builder
  41. class TranslationResponse {
  42.     private String originalText;
  43.     private String translatedText;
  44.     private String sourceLanguage;
  45.     private String targetLanguage;
  46.     private Long timestamp;
  47. }
复制代码
第四步:Spring AI翻译API测试
  1. curl -X POST http://localhost:8080/api/v1/translate  
  2. -H "Content-Type: application/json"  
  3. -d '{
  4.   "text": "Spring AI makes AI integration incredibly simple and powerful",
  5.   "sourceLanguage": "英语",
  6.   "targetLanguage": "中文"
  7. }'
  8. # 响应示例
  9. {
  10.   "originalText": "Spring AI makes AI integration incredibly simple and powerful",
  11.   "translatedText": "Spring AI让AI集成变得极其简单而强大",
  12.   "sourceLanguage": "英语",
  13.   "targetLanguage": "中文",
  14.   "timestamp": 1704067200000
  15. }
复制代码
Spring AI监控指标深度解析

核心指标1:Spring AI操作性能监控

指标端点:/actuator/metrics/spring.ai.chat.client
  1. {
  2.   "name":"spring.ai.chat.client.operation",
  3.   "description":"Spring AI ChatClient操作性能指标",
  4.   "baseUnit":"seconds",
  5.   "measurements":[
  6.     {
  7.       "statistic":"COUNT",
  8.       "value":15
  9.     },
  10.     {
  11.       "statistic":"TOTAL_TIME",
  12.       "value":8.456780293
  13.     },
  14.     {
  15.       "statistic":"MAX",
  16.       "value":2.123904083
  17.     }
  18.   ],
  19.   "availableTags":[
  20.     {
  21.       "tag":"gen_ai.operation.name",
  22.       "values":["framework"]
  23.     },
  24.     {
  25.       "tag":"spring.ai.kind",
  26.       "values":["chat_client"]
  27.     }
  28.   ]
  29. }
复制代码
业务价值

  • 监控Spring AI翻译服务调用频次
  • 分析Spring AI响应时间分布
  • 识别Spring AI性能瓶颈
核心指标2:Spring AI Token使用量精准追踪

指标端点 /actuator/metrics/gen_ai.client.token.usage
  1. {
  2.   "name":"gen_ai.client.token.usage",
  3.   "description":"Spring AI Token使用量统计",
  4.   "measurements":[
  5.     {
  6.       "statistic":"COUNT",
  7.       "value":1250
  8.     }
  9.   ],
  10.   "availableTags":[
  11.     {
  12.       "tag":"gen_ai.response.model",
  13.       "values":["deepseek-chat"]
  14.     },
  15.     {
  16.       "tag":"gen_ai.request.model",
  17.       "values":["deepseek-chat"]
  18.     },
  19.     {
  20.       "tag":"gen_ai.token.type",
  21.       "values":[
  22.         "output",
  23.         "input",
  24.         "total"
  25.       ]
  26.     }
  27.   ]
  28. }
复制代码
成本控制价值

  • 精确计算Spring AI服务成本
  • 优化Prompt设计降低Token消耗
  • 制定基于使用量的预算策略
最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”
1.gif


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册