摘要:8月31日是多家厂商模型变更的集中生效日------Claude Sonnet 5 输入输出价格各涨50%、分词器变更让代码token膨胀10-35%;GPT-5.4/5.4 mini退出Codex;Kimi K2.5与moonshot-v1同日停服。本文基于公开定价与迁移公告,给出成本重算方法、token膨胀实测口径和迁移清单,适合正在用这几家API的开发者对照自查。
上周五晚上,我照常跑了下项目的API成本日报,数字不太对劲。翻了一圈公告才发现,接下来两周要出的事比我预想的多:8月31日一天之内,Claude涨价、GPT-5.4退出Codex、Kimi K2.5退役,三件事撞在同一天。10月24日DeepSeek的deepseek-chat和deepseek-reasoner也要废弃。
这不是新闻汇编。这篇文章只干一件事:帮你算清楚迁移前后账单会怎么变,以及哪些坑要在动手前知道。
1. 背景与痛点:为什么8月31日是个坎
把已公布的变更排在一起看:
| 生效日期 | 变更 | 对开发者的直接影响 |
|---|---|---|
| 8月31日 | Claude Sonnet 5:输入 2→3/M tokens,输出 10→15/M | 同量调用成本+50% |
| 8月31日 | Sonnet 5 分词器变更 | 代码类文本token数+10~35%,实际涨幅可能超50% |
| 8月31日 | GPT-5.4 / GPT-5.4 mini 退出 Codex | Codex登录态不可用,API密钥方式保留 |
| 8月31日 | kimi-k2.5、moonshot-v1 停止服务 | 必须迁移至 kimi-k3 |
| 10月24日 | deepseek-chat / deepseek-reasoner 废弃 | 需提前迁移到新版端点 |
| ~11月21日 | GPT-5.6 Sol 促销价结束 | 4/20 回调至 5/30 |
痛点集中在两处。
一是成本不是线性上涨。Claude名义涨50%,但分词器变了------你的代码在旧分词器下100万token,新分词器可能切成110万到135万。价格乘1.5,token量再乘1.1~1.35,实际账单涨幅在65%到100%之间。只看公告里的"2→3"会严重低估。
二是迁移窗口比想象中短。Kimi K2.5月底停服,如果你的代码里硬编码了模型名,8月31日之后请求会直接报错。周一早上收到一堆报警再去查,不如提前一周列清单。
2. 技术原理:token膨胀是怎么吃掉预算的
先说清楚分词器变更是什么。大模型计费按token不按字符,同一段代码,不同分词器的切分结果不一样。
flowchart LR
A[你的代码文本] --> B{分词器版本}
| B -->|旧版| C[100万 tokens] |
| B -->|新版| D[110万~135万 tokens] |
C --> E[100万 × $2 = $2000 /M 输入]
D --> F[110万~135万 × $3 = $3300~$4050 /M 输入]
E --> G[实际涨幅 65%~103%]
F --> G
注意一点:10-35%这个膨胀区间主要出现在代码和结构化文本上(缩进、驼峰命名、符号多,新分词器切得更碎),自然语言文本膨胀相对小。所以受害最重的是把Claude挂在自动化代码流水线上的团队------流水线里90%的token都是代码。
这也意味着一个实用的结论:迁移前必须用自己的真实payload实测token数,不能拿官方膨胀区间直接套。下面第4节给实测脚本。
3. 环境准备:迁移自查清单
动手前先确认现状。三样东西:当前API用量基线、硬编码的模型名清单、回滚预案。
# 1. 拉取近30天各模型调用量(以OpenAI兼容接口为例,各家后台路径类似)
# 重点看:每模型请求数、输入token总量、输出token总量
# 2. 全局搜索硬编码模型名,一个都不能漏
grep -rn "kimi-k2.5\|moonshot-v1" --include="*.py" --include="*.ts" --include="*.yaml" .
grep -rn "claude-sonnet-5\|gpt-5.4" --include="*.py" --include="*.ts" --include="*.yaml" .
# 3. 确认配置中心/环境变量里是否也藏着模型名
grep -rn "MODEL" .env* config/ 2>/dev/null
grep结果建议落成一张表:文件路径、出现次数、调用场景(对话/代码/批处理)。我上次做迁移时漏了一个测试脚本里的旧模型名,凌晨的定时任务全挂------这种蠢事希望你不要经历第二遍。
4. 实战实现:token膨胀实测与成本重算
4.1 用真实payload测token膨胀
别用"hello world"测,用你生产环境里最大的那种请求体。以Anthropic的count_tokens接口为例(Python 3.10+,SDK为 anthropic 0.40+):
import anthropic
client = anthropic.Anthropic() # 需环境变量 ANTHROPIC_API_KEY
# system + 一段典型生产代码请求,替换成你的真实payload
payload = {
"model": "claude-sonnet-5",
"system": "你是代码审查助手,输出JSON格式的审查意见。",
"messages": [{
"role": "user",
"content": open("sample_real_request.json", encoding="utf-8").read()
}]
}
# 新分词器下的token数
resp = client.messages.count_tokens(**payload)
print(f"当前分词器: {resp.input_tokens} tokens")
拿这个数和你账单里8月的实际token数对比,膨胀比例就出来了。如果你的账单系统只记字符数不记token数,现在是补上这个字段的时候------不然以后每次调价你都得靠猜。
4.2 成本重算脚本
def calc_cost(input_m: float, output_m: float,
in_price: float, out_price: float,
inflate_ratio: float = 1.0) -> tuple[float, float]:
"""按百万token计价计算月成本。inflate_ratio为token膨胀系数,如1.2"""
input_m *= inflate_ratio
old = input_m * in_price[0] + output_m * out_price[0]
new = input_m * in_price[1] + output_m * out_price[1]
return old, new
# Claude Sonnet 5:输入$2→$3,输出$10→$15
# 假设月消耗输入80M、输出20M,代码场景膨胀按1.25估
old, new = calc_cost(80, 20, (2, 3), (10, 15), 1.25)
print(f"月成本: ${old:.0f} → ${new:.0f}(涨幅 {(new/old-1)*100:.0f}%)")
# 输出: 月成本: $360 → $675(涨幅 88%)
88%,不是公告里写的50%。差额来自token膨胀。数字放到管理层面前之前,先自己跑一遍这个脚本。
4.3 Kimi迁移:最小改动路径
Kimi K2.5→K3在OpenAI兼容接口层面改动很小,主要是模型名:
# 迁移前
response = client.chat.completions.create(
model="kimi-k2.5",
messages=messages
)
# 迁移后(接口不变,模型名换成k3)
response = client.chat.completions.create(
model="kimi-k3",
messages=messages
)
但有两点容易踩坑:一是K3的上下文长度和输出上限与K2.5不同,长文档场景先测截断;二是temperature等参数的默认值可能有差异,生成质量的回归测试别省。我建议拿20条历史真实请求做A/B对比,人工过一遍再切流量。
5. 效果验证:迁移前后对照
迁移完成后,用这张表验收(示例数字为上面脚本的推算结果):
| 指标 | 迁移前(8月) | 迁移后(9月预估) | 变化 |
|---|---|---|---|
| Claude月成本(80M入/20M出) | $360 | $675 | +88%(含1.25膨胀系数) |
| Kimi调用可用性 | 8/31后报错 | kimi-k3正常 | 故障清零 |
| 定时任务成功率 | 依赖模型名硬编码 | 配置中心统一管理 | 模型退役不再炸 |
| token计费可见性 | 账单事后看 | 请求级token落库 | 调价当天能预警 |
验收标准建议定死两条:全量请求无model not found类报错 、9月第一周成本落在预估区间±10%内。第二条不达标,说明膨胀系数估错了,回去重测。
6. 踩坑记录
- 坑1:只算价格不算token膨胀。公告的50%涨幅是下限不是均值,代码密集场景实际65%~100%。实测为准。
- 坑2:模型名散落在测试脚本和定时任务里。生产代码改了,凌晨cron里的旧名字照样炸。grep要覆盖全仓库加配置中心。
- 坑3:迁移当天切100%流量。K2.5→K3这种"小迁移"也建议灰度:先切10%流量跑一天,看报错率和生成质量,再放量。
- 坑4:忘了11月还有GPT-5.6 Sol促销回调。现在按4/20做的预算,11月下旬会跳到5/30,提前跟财务打招呼,别到时候背锅。
- 坑5:DeepSeek的10月24日当作"还很远"。10月有国庆假期,实际可用的迁移窗口比日历上少一周。9月顺手一起做掉。
7. 总结与展望
这次8月31日的集中变更,本质是行业从"烧钱换规模"转向"正常化定价"的一个切片。对开发者来说,能做的事很朴素:把token计量做进自己的监控、把模型名收进配置、把每次迁移当灰度发布来做。这三个习惯建立起来,以后再遇到调价退役潮,就是改两行配置的事,而不是一次救火。
留个问题:你们的API账单里,token数是请求级落库的,还是月底看厂商报表才知道的?如果是后者,这次的Claude涨价就是补课的最好理由。评论区聊聊你的迁移方案------尤其是K2.5迁K3之后生成质量有没有肉眼可见的变化,我这边样本还不够多。