当前位置: 首页 > news >正文

13. Spring AI 的观测性 - Rainbow

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管理):

<!--百炼-->
<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency> 
<!-- Spring Boot Actuator 监控 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--web-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

第二步:Spring AI客户端配置

主应用类配置:

@SpringBootApplication
publicclassSpringAiTranslationApplication {publicstaticvoidmain(String[] args) {SpringApplication.run(SpringAiTranslationApplication.class, args);}@Beanpublic ChatClient chatClient(ChatClient.Builder builder) {return builder.build();}
}

Spring AI配置文件:

# Spring AI 可观测性配置
management:
endpoints:web:exposure:include:"*"
endpoint:health:show-details:always
metrics:export:prometheus:enabled:truespring:
threads:virtual:enabled:true
ai:deepseek:api-key:${DEEPSEEK_API_KEY}chat:options:model:deepseek-chattemperature: 0.8

环境变量设置:

export DEEPSEEK_API_KEY=your-deepseek-api-key

第三步:构建Spring AI翻译服务

智能翻译控制器:

@RestController
@RequestMapping("/api/v1")
@RequiredArgsConstructor
@Slf4j
public class SpringAiTranslationController {private final ChatModel chatModel;@PostMapping("/translate")public TranslationResponse translate(@RequestBody TranslationRequest request) {log.info("Spring AI翻译请求: {} -> {}", request.getSourceLanguage(), request.getTargetLanguage());String prompt= String.format("作为专业翻译助手,请将以下%s文本翻译成%s,保持原文的语气和风格:\n%s",request.getSourceLanguage(),request.getTargetLanguage(),request.getText());String translatedText= chatModel.call(prompt);return TranslationResponse.builder().originalText(request.getText()).translatedText(translatedText).sourceLanguage(request.getSourceLanguage()).targetLanguage(request.getTargetLanguage()).timestamp(System.currentTimeMillis()).build();}
}@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
class TranslationRequest {private String text;private String sourceLanguage;private String targetLanguage;
}@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
class TranslationResponse {private String originalText;private String translatedText;private String sourceLanguage;private String targetLanguage;private Long timestamp;
}

第四步:Spring AI翻译API测试

curl -X POST http://localhost:8080/api/v1/translate  
-H "Content-Type: application/json"  
-d '{"text": "Spring AI makes AI integration incredibly simple and powerful","sourceLanguage": "英语","targetLanguage": "中文"
}'# 响应示例
{"originalText": "Spring AI makes AI integration incredibly simple and powerful","translatedText": "Spring AI让AI集成变得极其简单而强大","sourceLanguage": "英语","targetLanguage": "中文","timestamp": 1704067200000
}

Spring AI监控指标深度解析

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

指标端点:/actuator/metrics/spring.ai.chat.client

{"name":"spring.ai.chat.client.operation","description":"Spring AI ChatClient操作性能指标","baseUnit":"seconds","measurements":[{"statistic":"COUNT","value":15},{"statistic":"TOTAL_TIME","value":8.456780293},{"statistic":"MAX","value":2.123904083}],"availableTags":[{"tag":"gen_ai.operation.name","values":["framework"]},{"tag":"spring.ai.kind","values":["chat_client"]}]
}

业务价值

  • 监控Spring AI翻译服务调用频次
  • 分析Spring AI响应时间分布
  • 识别Spring AI性能瓶颈

核心指标2:Spring AI Token使用量精准追踪

指标端点 /actuator/metrics/gen_ai.client.token.usage

{"name":"gen_ai.client.token.usage","description":"Spring AI Token使用量统计","measurements":[{"statistic":"COUNT","value":1250}],"availableTags":[{"tag":"gen_ai.response.model","values":["deepseek-chat"]},{"tag":"gen_ai.request.model","values":["deepseek-chat"]},{"tag":"gen_ai.token.type","values":["output","input","total"]}]
}

成本控制价值

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

最后:

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

在这里插入图片描述

http://www.jsqmd.com/news/46011/

相关文章:

  • Elasticsearch8.4.1升级Elasticsearch9.1.5 - 实践
  • 为什么大型炼钢厂(宝武、鞍钢、首钢等)都离不开时序数据库?
  • 第一次随笔测试
  • 20251120周四日记
  • 关于 KivyMD 2.x
  • 工具成瘾——黑客为何痴迷工具与AI(及如何开始用脑思考)
  • 完整教程:Flask入门教程——李辉 第5章: 数据库 关键知识梳理
  • vscode修改terminal为conda环境
  • python:crawl4ai安装
  • 洛谷 P4458
  • http1.1流水线传输方式
  • SLB及健康检查
  • 2025贝赛思考试培训哪家专业?5大优质机构测评,覆盖全阶段备考需求
  • 2025牛客国庆集训派对day7 M C 个人题解 - 教程
  • C++ 中 struct 与 class 的用法与区别
  • PyTorch 分布式训练底层原理与 DDP 实战指南
  • 2025年11月SAT辅导哪家强?机考适配/名师授课/定制方案的机构推荐
  • 07.创建型 - 抽象工厂模式(Abstract Factory Pattern)
  • 模型量化原理
  • 日总结 29
  • AI浪潮下的行业变革:从气象到游戏,我们学到了什么
  • 2025.11.19 C 题解
  • 2025.11.20
  • 【比赛记录】2025CSP+NOIP 冲刺模拟赛合集Ⅵ
  • 智能座舱项目管理中多团队协作的创新之道 - 指南
  • 自指自洽,普世的逻辑,特别的因果
  • 3 分钟上手 SightAI:在你熟悉的工具里直接调用顶级大模型 - sight
  • 聚焦SAT高分核心需求:2025年值得信赖的5大辅导机构,覆盖全阶段备考
  • 2025.11.20博客
  • 2025.11.19 D 题解