AI 成本体检(token-cost-audit)
把「AI 这个月怎么又花了这么多」变成一份能直接开会的数据:钱分在哪、单位成本多少、换模型省多少、自托管划不划算、先动哪一刀。
何时使用
触发:
- 「AI 成本太高」「token 账单怎么看」「这个月 API 花了多少」
- 「OpenRouter / LiteLLM / Helicone 的用量怎么分析」「Claude Code 账单」
- 「换 DeepSeek / GLM / 小模型能省多少,会掉多少能力」
- 「自托管划不划算」「多少量级自己买卡才值」
- 季度预算、向老板解释 AI 投入产出
不触发:
- 只想看某家厂商的定价页、模型排行榜——那是资讯,不是体检
- 要评测模型本身的能力(跑 MMLU / SWE-bench 这类)——本技能只做钱和量的账
- 优化云账单里非 AI 部分(EC2、对象存储、带宽)
- 需要会计口径的正式财务处理(资本化、摊销政策)
先讲清三个前提,否则账一定算错
- 标价支出 ≠ 实际成本。 缓存命中、批处理折扣、免费额度、包月订阅、赠送额度都会让账单偏离「token 数 × 单价」。两个常用参照:OpenRouter 上中国模型贡献约 65% 的 token 用量却只对应 29% 的标价支出;DeepSeek 约占 32% 用量、6% 支出。只看单价表会得出完全错误的结论,必须先回到自己的实际账单。
- token 单价不能横向比,要比「完成同一个任务的成本」。 便宜模型的输出可能更长、重试更多、上下文塞得更满,实际成本能翻倍;贵模型一次做对,反而更省。所以第三列永远是「每任务成本」,不是「每百万 token 价格」。
- 省下来的钱有一部分会变成人审成本。 换低一档模型,返工率与审阅时间会上去。算节省时必须同时给出「需要人工复核的比例」,否则方案推下去会被工程团队推翻。
步骤
0. 拿数据(10 分钟,决定后面全部质量)
三种来源,按可得性挑一种,优先第一种:
| 来源 | 拿到什么 | 取数方式 |
|---|---|---|
| 网关日志(最好) | 每次调用的模型、token、延迟、调用方、任务标签 | LiteLLM / Helicone / 自建网关导出 CSV 或 JSONL;没有任务标签就先用 metadata 里的应用名 |
| 厂商账单 | 按天、按模型的用量与金额 | Anthropic / OpenAI / 火山 / 阿里云后台导出账单 CSV |
| OpenRouter activity | 按模型、按 key 的用量与花费 | Settings → Activity → Export,得到逐条记录 |
最小字段表(缺哪个补哪个,缺太多就先补埋点再谈优化):
timestamp,model,team,project,task_type,input_tokens,output_tokens,cache_read_tokens,cost_usd,tasks
2026-11-01T10:00:00Z,claude-haiku-5.5,platform,checkout,code_review,12000,1800,9000,0.0041,1
cost_usd 有就直接用(最准);没有就让脚本按价格表估算,并在报告里标明「估算」。
tasks 是这一行对应的业务量(一个任务 / 一个 PR / 一次会话),没有单位经济学就只能算到「每百万 token」。
检查点: 拿到至少 14 天、覆盖 80% 以上花费的明细。一周的数据会被发布周期带偏。
1. 体检(一条命令)
python3 scripts/cost_audit.py --input usage.csv --prices prices.json --group-by team,task_type,model
输出六段:总账(token / 金额 / 混合单价 / 缓存命中率)、四维分账、Top 消耗点、单位经济学、异常项(单行超均值 10 倍、缓存命中率低于 20%、同任务型号混用)、缺失价格清单。
检查点: 总账金额与你财务看到的账单差异 < 5%,否则先对齐口径(时区、含税、赠送额度)。
2. 分账:找到真正的那 20%
看三张表,不要看总量:
- 按团队:谁在烧钱,是不是和他的产出匹配
- 按任务类型:通常 60–80% 的花费集中在 1–2 类任务(长上下文代码审查、Agent 循环、批量摘要)
- 按模型:有没有人拿旗舰模型做分类、打标签、格式化这种小活
检查点: 能说出「Top 3 消耗点各占多少百分比、归谁负责」。
3. 单位经济学(唯一能和业务对话的口径)
按 references/unit-economics.md 的四个公式算:每任务成本、每 PR 成本、每活跃用户成本、每千行代码成本。
一句话结论必须长这样:「代码审查每个 PR 平均 0.42 美元,其中 71% 花在把整个仓库塞进上下文」——不是「本月花了 3800 美元」。
检查点: 有一个可以按月对比、可以设目标值的单位指标。
4. 换模型模拟
python3 scripts/cost_audit.py --input usage.csv --prices prices.json --switch-to glm-5.3-flash,deepseek-v4-flash
输出每个候选模型的「节省额 / 节省比例 / 单价降幅」。之后必须手工补两列,脚本给不了:
| 补什么 | 怎么估 |
|---|---|
| 能力档位差 | 拿自己 30–50 条真实任务做 A/B,记录「一次通过率」 |
| 人审增量 | 一次通过率每降 10 个点,约等于 10% 的产出需要人工返工;乘以人力小时成本 |
净节省 = 模型省下的钱 − 返工人力成本 − 迁移改造成本(一次性)。 三者里最容易漏掉第三项。
检查点: 每个候选模型都有一句「省 X%、需要多审 Y%、净收益正/负」。
5. 自托管 TCO 与盈亏平衡点
python3 scripts/cost_audit.py --input usage.csv --self-host gpu_hour=2.4,gpus=8,utilization=0.55,ops_month=3000
算的是:月固定成本 ÷ (当前混合单价 − 自托管单 token 变动成本) = 盈亏平衡月 token 量。低于这个量,自托管一定更贵。
别忘的项:闲置率(真实利用率常年在 40–60%)、模型更新换代带来的重训与迁移、值班人力、以及「自托管后你会同时支持三种模型」的复杂度。参照 references/unit-economics.md 里的 TCO 清单。
检查点: 明确写出「当前用量是平衡点的几倍」,而不是「自托管更便宜」。
6. 优化清单(按 ROI 排序,先做前三)
| 手段 | 典型节省 | 代价 | 什么时候不做 |
|---|---|---|---|
| 上下文瘦身(只给相关文件,不全库塞) | 30–60% | 要写检索 | 任务真的需要全局理解 |
| 缓存命中(提示词前缀稳定 + 开启 prompt cache) | 20–50% | 提示词要重构 | 提示词本来就每次不同 |
| 模型级联(小模型先跑,失败升级) | 25–45% | 多一跳延迟 | 延迟敏感场景 |
| 批处理 / 离线队列(走 batch 折扣) | 40–50% | 不能实时 | 交互式产品 |
| 重试治理(指数退避 + 失败原因分类) | 5–20% | 要改客户端 | 失败率本来就低 |
| 订阅制 vs 按量(重度用户走包月) | 因人不一 | 管理成本 | 用量波动大 |
检查点: 清单里每条都有「预计省多少钱/月」和「谁来做」,没有无主项。
7. 出报告与三档方案
报告结构:一页结论 → 总账 → 分账三张表 → 单位经济学 → 换模型对比 → 自托管结论 → 优化清单 → 附录(口径与数据来源)。
三档方案,让决策者选,不要只给一档:
- 保守:只做上下文瘦身 + 缓存 + 重试治理,模型不动。风险最低,通常能省 25–40%。
- 平衡:保守 + 把 2–3 类低风险任务(分类、摘要、格式化)迁到小模型。省 40–60%。
- 激进:平衡 + 主力编码/推理迁到国产或开源模型 + 评估自托管。省 60% 以上,需配 A/B 与回滚。
灰度迁移:按团队或任务类型分批(一次不超过 20% 流量)→ 每周看「一次通过率 / 人审时长 / 单位成本」三个数 → 连续两周不劣化才扩量。回滚开关必须在第一天就做好。
五个高频坑
| 现象 | 原因 | 修法 |
|---|---|---|
| 算出来比账单低很多 | 漏了缓存写入、图片/音频计费、失败重试也计费 | 用账单金额校准,别用 token × 单价 |
| 换了便宜模型,总成本没降 | 输出变长 + 重试变多 + 上下文塞更满 | 比「每任务成本」,不比单价 |
| 分账到不了团队 | 日志里没有调用方标识 | 先在网关加 team/key 标签,两周后再算 |
| 自托管算得很便宜 | 按 100% 利用率算的 | 用真实利用率(40–60%)重算 |
| 方案推下去被工程反对 | 只报了省的钱,没报返工与人审 | 每个方案都带「人审增量」一列 |
什么算做好了
- 总账与财务账单差异 < 5%,口径写清楚(含不含税、含不含赠送额度)
- 能说出 Top 3 消耗点及其占比
- 至少一个单位指标可月度对比(如每 PR 成本)
- 每个换模型候选都有「省多少 / 多审多少 / 净收益」三个数
- 自托管结论是「平衡点倍数」,不是一个形容词
- 三档方案都有回滚方式与负责人
硬约束
- 只用真实账单校准,不拿公开单价表当结论;价格表必须标日期,超过 30 天先复核
- 单价对比一律换算成「每完成一个业务任务的成本」再比
- 任何节省数字必须同时给出人审增量,禁止只报好消息
- 不外传用户的用量明细与账单;报告中出现客户名、项目名时先脱敏
- 不承诺具体节省比例,只给区间与前提条件