大促预算最先该核对的,往往不是模型选型,而是单位:报价按千Token还是百万Token,输入与输出是否同价,缓存和重试怎样计费。一个小数点错误,乘上峰值请求量后就会放大成明显偏差。
这是一份双11之前的教学预案,没有真实客户大促数据,也没有把未来的11月活动写成已发生。以下价格仅为演算假设,不是任何供应商现价;采购时应使用实际合同与账单规则。
一次任务可能包含多次调用
假设输入每千Token0.05元,输出每千Token0.10元。2700个输入Token的费用是0.135元,400个输出Token是0.04元,一次调用合计0.175元。若失败后又调用一次,失败调用可能也有费用,不能只按最后那条成功回答计算。
图中Retries表示追加调用产生的账目;若输入、输出Token已经汇总了全部尝试,就不能再加一次“重试费”。
用十进制数让单位显式出现
下面按调用记录汇总教学任务费用,字段分别保存输入、输出Token。真实接入还需区分缓存输入、推理Token、批处理和不同模型,不能默认都按这两项价格收费。
from decimal import Decimal as D rates = {"input_per_1000": D("0.05"), "output_per_1000": D("0.10")} calls = [{"task": "t1", "input": 2700, "output": 400}, {"task": "t1", "input": 500, "output": 100}] def cost(row): if row["input"] < 0 or row["output"] < 0: raise ValueError("negative tokens") return (D(row["input"])*rates["input_per_1000"] +D(row["output"])*rates["output_per_1000"])/D(1000) assert cost(calls[0]) == D("0.175") total = sum((cost(x) for x in calls), D(0)) assert total == D("0.210") print("hypothetical yuan per task including both calls", total)AWS在10月21日的Agent可观测性文章中,把成本归因映射到Agent、请求、模型和Region。这里值得借鉴的是可追溯的维度设计,本文没有部署它的EKS方案,也没有复制厂商性能数据。官方文章
阈值要对应一种可以执行的动作
| 情况 | 可以事先约定的响应 |
|---|---|
| 单任务超预算 | 停止后续自动调用,保留已完成结果 |
| 重试频繁 | 暂停该路径,转人工或只读说明 |
| 旗舰路径拥堵 | 对适合的任务用经评估的备用路径 |
| 资料不足 | 明确无法确认,不为完成率反复生成 |
| 总预算接近上限 | 限流、关闭低优先级任务并告知负责人 |
降级不能只验证便宜,还要检查错答、越权、延迟和人工负担。核心任务是否允许切换模型,应提前经过回归;不能在流量到来后随机挑一个型号。
Google Cloud10月22日将细粒度Token与成本治理列为本季计划preview能力之一。它提供了方向参考,但未来预告不是当前可用性或我们项目的交付保证。发布说明
一份能用的预算预案应连着账本、报警和停止动作。本文只运行了费用算术,没有真实计费调用、峰值压测或大促复盘。