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.mzph.cn/news/971484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch8.4.1升级Elasticsearch9.1.5 - 实践

Elasticsearch8.4.1升级Elasticsearch9.1.5 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

为什么大型炼钢厂(宝武、鞍钢、首钢等)都离不开时序数据库?

钢铁生产是典型的连续化工业流程 —— 从高炉炼铁的原料投入,到转炉炼钢的温度调控,再到轧钢环节的精度控制,每个工序都需依托实时数据调整操作。宝武、鞍钢、首钢等大型炼钢厂,由于生产规模大、设备数量多、工艺链…

20251120周四日记

20251120周四日记今日: 1.早上从家吃了昨天剩的山上下回学校,回来做ppt,拿钥匙。 2.中午和亮吃了饺子,回去继续做ppt,三点做完交了,开始复习DIP。期间跟牢祥聊了个想法:可以把炉石卡图做成3d显示。 3.交完ppt开…

关于 KivyMD 2.x

截至现在,KivyMD已经更新至2.3.1。然而,官方的文档仅仅更新到了1.1.1. 在此期间,KivyMD已经支持了Material Design 3 (MD Me),其控件的调用方式也有所改变。截至目前,就调用按钮来说,KivyMD v2的API如下:与官方之…

工具成瘾——黑客为何痴迷工具与AI(及如何开始用脑思考)

本文探讨黑客过度依赖自动化工具和AI的现象,指出工具外化思考的危害,提供从观察、挑战到反思的完整方法论,包含具体检查清单和90秒思考训练,帮助安全研究人员重拾独立思考能力。大多数人把工具当作宗教:神圣的清单…

完整教程:Flask入门教程——李辉 第5章: 数据库 关键知识梳理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

vscode修改terminal为conda环境

ctrl+,进入设置,搜索default terminal 然后设置为command prompt

python:crawl4ai安装

一,项目 地址: https://github.com/unclecode/crawl4ai二,通过pip安装: $ mkdir crawl4ai $ cd crawl4ai/ $ python3 -m venv venv $ source venv/bin/activate (venv) liuhongdi@liuhongdi-pc:/data/python/crawl…

洛谷 P4458

P4458标签 线段树因为查询给定的是路径长度的范围,所以对于每个长度都要维护答案。 将修改操作改为 \([1, v]\) 加 \(d\),考虑对长度为 \(len\) 的贡献(算出与长度为 \(len\) 的与 \([1, r]\) 的交集之和即可)。分…

http1.1流水线传输方式

目录核心概念:什么是流水线?流水线的关键特性和要求流水线的巨大缺陷与实践中的弃用现代替代方案:HTTP/2 的多路复用总结这是一个非常重要但又经常被误解的概念,因为它在实践中很少被使用,但理解它能帮助我们更好…

SLB及健康检查

背景: 横向扩容:水平扩容,用更多的节点来支撑更大量的请求,如:增加服务器个数纵向扩容:垂直扩容,扩展一个点的能力来支撑更大的请求,如:升级cpu和内存等 传统反向代理nginx,保活机制keepalive云产品SLB负载均…

2025贝赛思考试培训哪家专业?5大优质机构测评,覆盖全阶段备考需求

2025贝赛思考试培训哪家专业?5大优质机构测评,覆盖全阶段备考需求随着留学低龄化趋势加剧,贝赛思国际学校因优质的国际化教育资源,成为众多家庭的首选目标,其入学考试的竞争性也逐年提升。专业的贝赛思考试培训机…

2025牛客国庆集训派对day7 M C 个人题解 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

C++ 中 struct 与 class 的用法与区别

C++ 中 struct 与 class 的用法与区别Posted on 2025-11-20 22:06 steve.z 阅读(0) 评论(0) 收藏 举报C++ 中 struct 与 class 的用法与区别 1. 概述 在 C++ 中,struct 与 class 都可以用来定义用户自定义类型(…

网关上的限流器

1. nginx原生限流能力 https://blog.nginx.org/blog/rate-limiting-nginx ngx_http_limit_req_module 提供的请求限流能力必须基于某个预定义的key,eg: client Ip, request_uri, host_name, 这个限流器是基于漏桶算法。…

PyTorch 分布式训练底层原理与 DDP 实战指南

深度学习模型参数量和训练数据集的爆炸式增长,以 Llama 3.1 为例:4050 亿参数、15.6 万亿 token 的训练量,如果仅靠单 GPU可能需要数百年才能跑完,或者根本无法加载模型。 并行计算(Parallelism)通过将训练任务分…

2025年11月SAT辅导哪家强?机考适配/名师授课/定制方案的机构推荐

2025年11月SAT辅导哪家强?机考适配/名师授课/定制方案的机构推荐随着留学申请竞争的加剧,SAT成绩作为海外名校录取的核心参考指标,其重要性愈发凸显。专业的SAT辅导机构不仅能帮助学员精准定位知识薄弱点,更能通过…

07.创建型 - 抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern) 概述 产品等级结构与产品族 为了更好的理解抽象工厂, 我们这里先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构,如一个抽象形状类,其子类有矩形, 圆形等; 产品…

模型量化原理

1.制作量化校准表 激活值量化 与权重量化不同,激活值是动态变化的(随输入数据不同而变化,例如同一张图像和不同图像经过同一层的激活值分布可能差异很大)。 因此,激活值量化需要先通过 “校准(Calibration)” 步…