上下文最大的那些模型:谁到得了 100 万,用起来要多少钱
目录里有 15 个条目能装下 100 万 token 及以上。它们的有效输入单价相差 80 倍,从每百万 0.050 美元到 4.00 美元,而输出上限把这批模型劈成了两半。
稀缺的不是那 100 万 token
目录里 31 个条目,有 15 个能装 100 万 token 或更多:Claude 占 9 个,Gemini 占 5 个,剩下一个 stable-gpt-6-astra 是 105 万,也是这里最大的窗口。所以按上下文大小排序,其实筛不掉多少东西。
往下一档才是真的落差:grok-4.6 和 grok-4.5 是 50 万,gpt-5.6 三兄弟 37.2 万,gpt-5.5 / gpt-5.4 / gpt-5.4-mini 是 27.2 万,claude-sonnet-4-6、stable-claude-sonnet-4-6、stable-claude-haiku-4-5 和 grok-composer-2.5-fast 都是 20 万。所以问题很少是"上哪儿找 100 万",而是这 15 个里你愿意为哪个付钱。
而这一组内部的价差大得离谱:gemini-3-flash 输入每百万 0.050 美元,stable-claude-fable-5-1 和 stable-claude-fable-5 是 4.00 美元——同样标着 100 万上下文,价格差了 80 倍。
输出上限把这批模型劈成两半
15 个里有 10 个的单次输出上限是 12.8 万 token:claude-opus-5、claude-opus-4-8、claude-opus-4-6、claude-sonnet-5 和它们各自的 stable-* 版本、两个 Fable 专用通道,以及 stable-gpt-6-astra。五个 Gemini id 则是 65,536(gemini-3.1-pro-low 是 65,535)。
这件事比看上去重要。"输入窗口很大、输出上限不高"对摘要、检索、分析类任务是完全自洽的设计——读得多,说得少。但要在一次响应里生成一份长文档或一个大 diff,它就不合适了:输入那头再宽裕,也照样撞输出的天花板。
所以第一刀不是切价格,是切你的活儿偏读还是偏写。偏读的可以直接用这份清单里便宜的那一半;偏写、而且单次要超过 65,536 token 的,就只剩下能到 12.8 万的那 10 个 id 可选。
把窗口填满要花多少钱
拿一次 90 万输入 token 的请求,乘上各自的有效输入单价:gemini-3-flash 是 0.045 美元,gemini-3.7-flash-high 和 gemini-3.6-flash-high 是 0.0675,gemini-3.8-flash 是 0.135,gemini-3.1-pro-low 是 0.18,claude-sonnet-5 是 0.27,claude-opus-5 是 0.45,stable-claude-opus-5 和 stable-gpt-6-astra 都是 1.80,两条 Fable 专用通道是 3.60。
这还只是一次。同一段前缀如果在一轮对话里反复出现,就得每轮重付一遍——大窗口从"能力"变成"固定支出",就是在这个地方。目录里这些模型的缓存读取是与新输入分开计价的,所以只有当前缀真的稳定不变时,这段重复才不必按全价输入重算。
真正的坑是把窗口当默认值而不是预算。100 万 token 的模型没有任何地方要求你必须发满 100 万,而且单价是按 token 走的:在这一组里最贵的 stable-claude-fable-5-1 上发 2 万 token,只要 0.08 美元,比 claude-sonnet-5 上一次 90 万 token 请求的 0.27 美元还低。
# gemini-3-flash: 1,000,000 ctx, 65,536 max output, $0.050 / M input
curl -sS https://token-share.app/v1/chat/completions \
-H "Authorization: Bearer $TOKEN_SHARE_KEY" \
-H "content-type: application/json" \
-d '{
"model": "gemini-3-flash",
"messages": [{"role": "user", "content": "Summarise the attached design doc in ten bullet points."}]
}' | jq '.usage'
# claude-sonnet-5: 1,000,000 ctx, 128,000 max output, $0.30 / M input
curl -sS https://token-share.app/v1/messages \
-H "x-api-key: $TOKEN_SHARE_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 4096,
"messages": [{"role": "user", "content": "Summarise the attached design doc in ten bullet points."}]
}' | jq '.usage'在这一组里怎么挑
起作用的是三栏,而且有先后:先看输出上限,65,536 还是 12.8 万——这是硬约束,直接排除一批,所以放第一位。再看路由,Gemini 系在 /v1/chat/completions,所有 Claude id 和 stable-gpt-6-astra 在 /v1/messages,这决定了换模型要改多少代码。最后才在剩下的候选里比价格。
通道是第四个考虑,而且和前三个互不相干。claude-opus-5 输入 0.50 美元、stable-claude-opus-5 输入 2.00 美元,权重相同,窗口都是 100 万 token;区别在于 stable-* 是我们自己 key 承载的专用通道,不参与池内 failover。这是路由层面的取舍,不是能力层面的。
这几栏都答不了的问题是:模型到底会不会用长上下文。窗口是"能收多少 token"的容量,不是"第 70 万个 token 上的内容会被怎么处理"的承诺。如果你的活儿吃这一点,唯一的检验办法是照你实际的规模搭一个 prompt,看答案有没有真的照顾到全部输入——在 Flash 价位的 id 上试很便宜,定下来之前值得先试。