用Spring Boot搭建AI成本与稳定性监控看板:Token、预算、429、熔断与降级
文章摘要Spring AI 2.0已经可以通过Micrometer输出模型调用耗时与Token指标但企业要真正控制成本还需要把模型价格、业务场景、租户、预算、重试、Tool Calling和降级事件统一起来。本文实现一个轻量级AI成本与稳定性监控服务从ChatResponse读取Usage计算单次费用写入业务成本表同时用Micrometer记录低基数指标并提供租户月预算、场景成本、429、熔断和降级看板所需的数据模型与PromQL。一、最终要看哪些数据系统健康看板QPS P95/P99延迟 当前并发 错误率 429 超时 熔断 降级成本看板输入Token 输出Token 缓存读写Token 按模型成本 按租户成本 按业务场景成本 单任务平均成本 预算使用率质量辅助完成率 重试次数 工具调用次数 人工接管率二、为什么Prometheus不能单独做财务结算Prometheus适合趋势和告警但不适合最终账单指标可能有采样数据有保留期限实例重启和标签变化会影响序列不适合保存每个用户高基数记录难以做审计和追溯。推荐Micrometer → 实时监控 成本明细表 → 结算与审计三、价格配置模型publicrecordModelPrice(Stringprovider,Stringmodel,BigDecimalinputPerMillion,BigDecimaloutputPerMillion,BigDecimalcacheWritePerMillion,BigDecimalcacheReadPerMillion,LocalDateeffectiveFrom){}价格不能写死在业务代码中。配置表CREATETABLEai_model_price(idBIGINTPRIMARYKEY,providerVARCHAR(64)NOTNULL,modelVARCHAR(128)NOTNULL,input_per_millionDECIMAL(18,8)NOTNULL,output_per_millionDECIMAL(18,8)NOTNULL,cache_write_per_millionDECIMAL(18,8),cache_read_per_millionDECIMAL(18,8),effective_fromDATENOTNULL,effective_toDATE);模型价格变化后保留历史版本。四、请求上下文publicrecordAiCostContext(StringrequestId,StringtenantId,StringuserId,StringbusinessScene,StringpromptVersion,StringmodelTier){}tenantId和userId从认证上下文读取不信任前端直接传值。五、从ChatResponse读取UsageChatResponseresponsechatClient.prompt().user(message).call().chatResponse();Usageusageresponse.getMetadata().getUsage();读取longinputusage.getPromptTokens();longoutputusage.getCompletionTokens();longtotalusage.getTotalTokens();不同Provider的详细缓存Token可以通过统一Usage字段或getNativeUsage()读取。必须允许Usage为空这时标记为COST_UNKNOWN不要默认为0否则财务数据会被低估。六、成本计算器ComponentpublicclassAiCostCalculator{privatestaticfinalBigDecimalMILLIONnewBigDecimal(1000000);publicBigDecimalcalculate(UsageSnapshotusage,ModelPriceprice){BigDecimalinputCostcost(usage.inputTokens(),price.inputPerMillion());BigDecimaloutputCostcost(usage.outputTokens(),price.outputPerMillion());BigDecimalcacheWriteCostcost(usage.cacheWriteTokens(),price.cacheWritePerMillion());BigDecimalcacheReadCostcost(usage.cacheReadTokens(),price.cacheReadPerMillion());returninputCost.add(outputCost).add(cacheWriteCost).add(cacheReadCost);}privateBigDecimalcost(longtokens,BigDecimalperMillion){if(perMillionnull){returnBigDecimal.ZERO;}returnBigDecimal.valueOf(tokens).multiply(perMillion).divide(MILLION,10,RoundingMode.HALF_UP);}}七、成本明细表CREATETABLEai_usage_record(idBIGINTPRIMARYKEY,request_idVARCHAR(64)NOTNULL,tenant_idVARCHAR(64)NOTNULL,user_idVARCHAR(64),business_sceneVARCHAR(64)NOTNULL,providerVARCHAR(64)NOTNULL,modelVARCHAR(128)NOTNULL,prompt_versionVARCHAR(64),input_tokensBIGINT,output_tokensBIGINT,cache_write_tokensBIGINT,cache_read_tokensBIGINT,model_call_countINTNOTNULL,tool_call_countINTNOTNULL,retry_countINTNOTNULL,estimated_costDECIMAL(18,10),cost_statusVARCHAR(32)NOTNULL,duration_msBIGINT,result_statusVARCHAR(32)NOTNULL,created_atTIMESTAMPNOTNULL);索引CREATEINDEXidx_ai_usage_tenant_monthONai_usage_record(tenant_id,created_at);CREATEINDEXidx_ai_usage_scene_monthONai_usage_record(business_scene,created_at);八、为什么要记录model_call_count一次ChatClient请求可能包含第一次模型选择工具 第二次模型读取工具结果 第三次模型修复结构化输出最终Usage可能是累计值但为了分析效率还要记录模型轮次。指标平均每个业务请求模型调用次数如果从1.3突然上升到4.8可能发生Tool循环输出修复重试Agent规划失效。九、Micrometer低基数指标ComponentpublicclassAiMetrics{privatefinalMeterRegistryregistry;publicAiMetrics(MeterRegistryregistry){this.registryregistry;}publicvoidrecordCost(Stringscene,StringmodelTier,BigDecimalcost){registry.counter(enterprise.ai.estimated.cost,scene,scene,model_tier,modelTier).increment(cost.doubleValue());}publicvoidrecordFallback(Stringscene,Stringreason){registry.counter(enterprise.ai.fallback,scene,scene,reason,reason).increment();}}不要把userId requestId conversationId作为Meter标签。十、预算表CREATETABLEai_budget(idBIGINTPRIMARYKEY,scope_typeVARCHAR(32)NOTNULL,scope_idVARCHAR(128)NOTNULL,budget_monthCHAR(7)NOTNULL,warning_amountDECIMAL(18,2)NOTNULL,hard_limit_amountDECIMAL(18,2)NOTNULL,currencyVARCHAR(8)NOTNULL,UNIQUE(scope_type,scope_id,budget_month));范围ORGANIZATION PROJECT TENANT BUSINESS_SCENE十一、预算检查publicBudgetDecisioncheck(StringtenantId,Stringscene,BigDecimalestimatedRequestCost){BigDecimalmonthCostusageRepository.sumMonthCost(tenantId,YearMonth.now());BudgetbudgetbudgetRepository.findTenantBudget(tenantId,YearMonth.now());BigDecimalprojectedmonthCost.add(estimatedRequestCost);if(projected.compareTo(budget.hardLimitAmount())0){returnBudgetDecision.BLOCK;}if(projected.compareTo(budget.warningAmount())0){returnBudgetDecision.WARN;}returnBudgetDecision.ALLOW;}请求前只能估算调用后再用实际Usage结算。十二、预算接近上限如何降级80% → 告警 90% → 默认切换低成本模型 95% → 关闭非核心AI功能 100% → 阻止请求或转规则系统模型路由publicModelTierroute(BudgetDecisiondecision,ModelTierrequested){returnswitch(decision){caseALLOW-requested;caseWARN-requested.downgrade();caseBLOCK-ModelTier.NONE;};}十三、429看板区分rate_limit_exceeded insufficient_quota project_spend_limit指标enterprise_ai_429_total{ reasonrate_limit }不要把所有429合并否则无法判断应该等待重试 还是 立即停止并调整预算十四、熔断与降级指标resilience4j_circuitbreaker_state resilience4j_circuitbreaker_calls_seconds enterprise_ai_fallback_total enterprise_ai_degraded_request_total看板应显示当前熔断状态最近打开次数降级模型比例转人工数量被预算阻止数量。十五、核心PromQL输入Token速率sum by (gen_ai_request_model) ( rate(gen_ai_client_token_usage_total{ gen_ai_token_typeinput }[5m]) )输出Token速率sum by (gen_ai_request_model) ( rate(gen_ai_client_token_usage_total{ gen_ai_token_typeoutput }[5m]) )模型平均耗时sum(rate(gen_ai_client_operation_seconds_sum[5m])) / sum(rate(gen_ai_client_operation_seconds_count[5m]))业务降级速率sum by (scene, reason) ( rate(enterprise_ai_fallback_total[5m]) )十六、日报接口GetMapping(/internal/ai-cost/daily)publicDailyCostReportdaily(RequestParamLocalDatedate){returnreportService.build(date);}返回{date:2026-07-31,totalCost:128.43,totalRequests:45210,costPerSuccess:0.0031,topScenes:[],topTenants:[],fallbackCount:318,rateLimitCount:26}十七、看板布局建议第一行今日费用 月度费用 预算使用率 成功请求 单次成功成本第二行请求趋势 Token趋势 P95延迟 错误率第三行模型成本占比 业务场景成本 租户成本Top10第四行429 熔断 降级 重试 Tool失败十八、需要防止的统计错误1. Tool Calling只算最后一次模型会低估成本。2. Provider未返回Usage时记0应该记未知。3. 价格更新后重算历史历史记录应使用调用当时价格版本。4. Prometheus值作为账单不适合最终审计。5. 把userId作为指标标签造成高基数爆炸。总结一个可用的AI成本看板必须把Spring AI Usage 模型价格 业务上下文 预算 429 熔断 降级组织在一起。Micrometer负责实时健康和趋势数据库明细负责按租户、场景和请求进行成本结算与审计。

相关新闻

看完就会:盘点2026年巅峰之作的的降AIGC网站

看完就会:盘点2026年巅峰之作的的降AIGC网站

轻松降低论文AI率在2026年已不再是天方夜谭。以下是2026年最炸裂、实测效果显著的降AIGC网站神器,覆盖AI痕迹消除、文本改写润色、降重优化、学术合规检测四大核心场景,帮你稳妥搞定毕业论文。 一、全流程王者:一站式搞定论文全链路 这类工具…

2026/8/23 8:03:19 阅读更多 →
Spring AI遇到429或超时后为什么重复执行工具?重试边界与幂等完整排查

Spring AI遇到429或超时后为什么重复执行工具?重试边界与幂等完整排查

文章摘要 AI接口出现429、超时或连接中断后,开发者通常会增加自动重试。但在Tool Calling场景中,如果重试包裹了整个Agent流程,退款、发送邮件、创建工单、写数据库等工具可能被重复执行。更隐蔽的情况是模型请求超时,但工具其实已…

2026/8/23 8:55:21 阅读更多 →
终极图片转PDF解决方案:img2pdf无损转换完整指南

终极图片转PDF解决方案:img2pdf无损转换完整指南

终极图片转PDF解决方案:img2pdf无损转换完整指南 【免费下载链接】img2pdf mirror of https://gitlab.mister-muffin.de/josch/img2pdf for Travis and appveyor CI 项目地址: https://gitcode.com/gh_mirrors/im/img2pdf 还在为图片转PDF后的质量损失和文件…

2026/8/23 8:53:29 阅读更多 →

最新新闻

如何检测GPT系统提示词泄露:TheBigPromptLibrary实用提取方法全清单

如何检测GPT系统提示词泄露:TheBigPromptLibrary实用提取方法全清单

如何检测GPT系统提示词泄露:TheBigPromptLibrary实用提取方法全清单 【免费下载链接】TheBigPromptLibrary A collection of prompts, system prompts and LLM instructions 项目地址: https://gitcode.com/gh_mirrors/the/TheBigPromptLibrary TheBigPrompt…

2026/8/24 9:08:22 阅读更多 →
Unified-MAS:从领域描述到智能体网络自动生成的技术架构与实践

Unified-MAS:从领域描述到智能体网络自动生成的技术架构与实践

1. 项目缘起:从“组装”到“生成”的智能体进化最近在折腾多智能体系统(Multi-Agent System, MAS)的时候,我遇到了一个挺普遍但又很棘手的问题:想快速搭建一个针对特定业务场景的智能体协作流程,比如一个电…

2026/8/24 9:08:22 阅读更多 →
ExpandableTextView 源码逐行精讲:400 行代码如何实现完整展开收起交互

ExpandableTextView 源码逐行精讲:400 行代码如何实现完整展开收起交互

ExpandableTextView 源码逐行精讲:400 行代码如何实现完整展开收起交互 【免费下载链接】ExpandableTextView Android TextView that can expand and collapse. 项目地址: https://gitcode.com/gh_mirrors/expand/ExpandableTextView ExpandableTextView 是一…

2026/8/24 9:08:22 阅读更多 →
HackingToolkit信息收集实战教程:Nmap、RED HAWK与ReconSpider的OSINT侦察完全指南

HackingToolkit信息收集实战教程:Nmap、RED HAWK与ReconSpider的OSINT侦察完全指南

HackingToolkit信息收集实战教程:Nmap、RED HAWK与ReconSpider的OSINT侦察完全指南 【免费下载链接】hackingtoolkit ALL IN ONE Hacking Tool For Hackers, Penetration Tester and Cybersecurity. New Version Beginner to Advanced Tool. This Tool is made for …

2026/8/24 9:08:22 阅读更多 →
贝叶斯与动机性推理融合:构建更智能、更适应性的AI决策智能体

贝叶斯与动机性推理融合:构建更智能、更适应性的AI决策智能体

1. 从“理性”到“有偏”:AI智能体推理范式的演进在AI领域,我们常常追求构建“绝对理性”的智能体——一个能像理想中的科学家一样,基于所有可用证据,通过贝叶斯定理不断更新信念,最终无限逼近真相的完美存在。这听起来…

2026/8/24 9:08:22 阅读更多 →
拆解Pyrlang核心架构:Node、Rex、NetKernel与Asyncio事件循环如何协同工作(全图景)

拆解Pyrlang核心架构:Node、Rex、NetKernel与Asyncio事件循环如何协同工作(全图景)

拆解Pyrlang核心架构:Node、Rex、NetKernel与Asyncio事件循环如何协同工作(全图景) 【免费下载链接】Pyrlang Erlang node implemented in Python 3.5 (Asyncio-based) 项目地址: https://gitcode.com/gh_mirrors/py/Pyrlang Pyrlang …

2026/8/24 9:07:22 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →