日期:2026-07-31
大模型在我们这边上线一段时间后,财务找过来说费用对不上:月底账单涨了一大截,但没人说得清钱花哪了。我们复盘也懵——哪个应用、哪个部门、哪类请求烧 token 最多,全靠猜;某个应用半夜跑批把 GPU 占满,影响了白天在线服务,出事才知道。底座有 Prometheus 监控吞吐延迟,但那是"机器视角",不是"业务视角"。我们缺的是一层把 token、成本、业务归属串起来的可观测。于是我们在私有化底座上补了这套埋点与归因。
我们在网关和底座推理服务之间统一埋点:每一次调用都带上应用 ID、部门、用户、模型名、请求类型,并记录 input/output token 数、延迟、是否命中缓存。数据进时序库后,做三层视图。第一层"成本归因":按应用/部门/用户/模型任意维度下钻,谁烧钱一眼看清。第二层"用量异常":对每类请求的 token 分布建基线,突发暴增或畸形长请求实时告警。第三层"成本—效果联动":把 token 成本和业务指标(如问答解决率)放一起看,识别"贵但没用"的调用。看板对技术和管理都开放,月底直接出归因报表。
挑战一是埋点统一且不侵入业务。我们在网关层做统一拦截,调用方无感,所有请求自动带业务上下文(从网关鉴权信息里取应用/部门),底座只需上报 token 数,避免每个业务自己埋。
挑战二是多维度成本归因的口径。token 单价按模型不同而异,我们建"模型单价表",归因时实时计价,部门间分摊有统一规则,避免因口径不一致扯皮。
挑战三是异常用量检测。我们对每类请求建 token 中位数的滚动基线,偏离超过阈值(如 3 倍)即告警,并区分"合理突增(活动)"和"异常(死循环/畸形 prompt)",后者直接联动网关限流。
上线约两个月的脱敏示意值:成本归因覆盖率(可追溯到的调用占比)从约 0 提升到约 98%;首次归因就定位到一个测试应用半夜跑批占了约 31% 的月 token,治理后当月费用环比降约 22%;异常用量从"出事后才发现"变成平均约 8 分钟内告警;top 3 应用占了总成本的约 57%,据此推动它们做缓存和提示词压缩,单位效果成本下降约 18%。
大模型的可观测,埋点是地基,归因才是价值。第一,埋点放网关层统一做,业务无感、口径一致,别让每个应用自己报。第二,成本归因要先定单价表和分摊规则,口径不清的归因只会引发新争论。第三,异常检测看"偏离基线"而非"超阈值",不同请求类型的正常量差十倍,统一阈值必然误报。第四,把成本和效果放一起看,单纯压成本可能压掉有效调用,我们要找的是"贵且无效"。我们把这套埋点+归因做成了底座标配,新业务接入即自动可观测。
大模型上线后"钱花哪了"说不清,这件事本身就说明可观测缺位。我们补的这层不是机器视角的吞吐延迟,而是业务视角的 token 与成本归因。埋点放网关层统一做,业务方无感、口径一致,不用每个应用自己报,这是能推开的提前提。
成本归因要先定单价表和分摊规则。不同模型 token 单价差很多,归因时实时计价、部门间分摊有统一规则,才能避免"费用对不上"引发的扯皮。我们第一次归因就定位到一个测试应用半夜跑批占了三成月 token,治理后当月费用明显降下来。
异常检测看"偏离基线"而非"超阈值"。不同请求类型的正常量能差十倍,统一阈值必然误报或漏报。我们对每类请求建 token 中位数的滚动基线,偏离超阈值即告警,还能区分合理突增和畸形死循环,后者直接联动网关限流。
把成本和效果放一起看,是我们后来加的关键一刀。单纯压成本可能压掉有效调用,我们要找的是"贵且无效"的那部分。按应用下钻出归因报表后,管理层第一次能回答"这笔大模型预算值不值",可观测的价值才算真正兑现。
说句实在话,可观测这套东西,前期没人觉得紧急,出事后才知要命。我们建议所有准备把大模型搬进生产的企业,上线第一天就把埋点和归因配上,别等账单爆了、故障发了才补课。归因报表不只为省钱,更让技术团队第一次能用业务语言和管理层对话——这笔沟通成本的下降,往往比省下的 token 更值钱。
再啰嗦一句关于组织层面的事。可观测不是技术团队的私房菜,它应该是全员都能看懂的仪表盘。我们把成本归因看板对管理层开放后,最明显的变化是预算讨论从拍脑袋变成看数据,哪个应用该加预算、哪个该优化,一目了然。技术团队也少了背锅,以前费用超了先怀疑我们没管好,现在归因报表一拉,责任清清楚楚。可观测的价值,一半在省钱,一半在让技术和管理说同一种语言。
案例片段(已脱敏): ```
成本归因与异常告警(伪代码节选)
span = gateway.intercept(req) # 网关统一拦截 span.ctx = {app, dept, user, model} # 从鉴权取业务上下文 usage = inference.report_tokens(req) # 底座上报 token cost = usage.tokens * price_table[model] # 实时计价 ledger.append(span.ctx, cost, usage) baseline = rolling_median(model, req_type) if usage.tokens > 3 * baseline: # 偏离基线告警 alert(f'anomaly:{app}:{req_type}', action='throttle_if_malformed') ``` 月底按 app/dept 下钻直接出归因报表,费用去向不再靠猜。