这类问题我又碰上了一次。给长文档问答开了 1M 上下文 beta,请求头带 context-1m-2025-08-07,账单里同一模型的输入单价变成普通上下文的两倍,但只有一部分请求变贵。

第一反应是「输入长度按 token 统计 不按字符」,验证下来不成立。

这类报错背后常见的原因有几处,逐个排除就行。超过 200k 的输入按长上下文档计价;beta 头只在部分服务端节点生效;缓存命中的部分仍按原价扣。

从响应 usage 里取输入 token 数

python -c "import json;print(json.load(open('resp.json'))['usage'])"

随后按 200k 分界统计两档请求数

python bill_split.py --log calls.jsonl --threshold 200000

接着对比开启前后的单价

python -c "print({'normal':3.0,'long':6.0})"

末了用超长文档复测一次确认档位

curl https://api.anthropic.com/v1/messages -H "x-api-key: $ANTHROPIC_API_KEY" -H "anthropic-version: 2023-06-01" -H "anthropic-beta: context-1m-2025-08-07" -d @long.json

怎么算真的好了,看的是同一批现象。长上下文请求的单价与文档一致,普通请求仍按原价,拆分后两类金额都能对上。

beta 头要显式带上才走长上下文通道,漏带时超长输入会直接报错而不是降级,别把它当可选参数。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189