大型代码库用什么模型:什么时候是上下文说了算

目录里有 14 个 id 支持 100 万 token,GPT 6 Astra Stable 更是 105 万。把 100 万窗口填满一次,Gemini 3 Flash 收 0.050 美元,Astra 收 2.00 美元——而且每次请求都收。

上下文一共分五档

20 万一档:Claude Sonnet 4.6、Sonnet 4.6 Stable、Haiku 4.5 Stable、Grok Composer 2.5 Fast。27.2 万一档:GPT 5.5、5.4、5.4 Mini。37.2 万一档:GPT 5.6 的 Sol、Terra、Luna。50 万一档:Grok 4.6 和 4.5。

最上面那档是 100 万,人很多:Claude Fable 5 Stable 和 Fable 5.1 Stable、Opus 5 及其 stable 通道、Opus 4.8 及其 stable 通道、Opus 4.6、Sonnet 5 及其 stable 通道,再加上全部五个 Gemini——3.8 Flash、3.7 Flash、3.6 Flash、3 Flash、3.1 Pro。只有一个 id 更高:GPT 6 Astra Stable,105 万。

输出上限的排序和上下文并不一致。100 万上下文的 Claude 和 GPT 5.6 系列最多输出 12.8 万 token;Gemini 全系是 65,536(3.1 Pro 是 65,535);Grok 4.6 / 4.5 是 65,536;20 万的 Claude 和较老的 GPT 是 64,000;Grok Composer 2.5 Fast 只有 32,768。既要读大仓库又要写大改动的任务,两头都会被卡。

大窗口是容量不是记忆力,而且填多少就付多少

除了 Grok,窗口填多满,单价都不变。一次性塞进 100 万输入 token:Gemini 3 Flash 0.050 美元(官方 $0.50/M 的 0.1 倍)、Gemini 3.7 Flash 0.075 美元、Claude Sonnet 5 0.30 美元、Claude Opus 5 0.50 美元、GPT 6 Astra Stable 2.00 美元($10/M 的 0.2 倍)。Grok 4.6 根本接不下这一单——窗口只到 50 万——而且它的输入价 $0.40/M($2/M 的 0.2 倍)在单次 prompt 达到 20 万 token 时就翻倍成 $0.80/M。

关键在「每次请求」这四个字,这也是最容易被忽略的地方。一段对话二十轮、每轮都把同样那 100 万 token 重贴一遍,就是为两千万输入 token 付费:Claude Opus 5 上 10 美元,GPT 6 Astra Stable 上 40 美元——而在人看来,这只是「同一个仓库,问了二十个问题」。

能改变这条曲线的有两个杠杆。提示词缓存把确实重复的前缀(system prompt、对话反复引用的那几个文件)在后续轮次按缓存读取计费,而不是按新输入。检索更直接:把真正相关的 3 万 token 发过去,胜过把可能相关的 90 万发过去,在上面每一个单价固定的 id 上都便宜 30 倍。

先量仓库大小,再按消费者单价算一次请求的价钱。
export TOKEN_SHARE_KEY="<your-pool-api-key>"

# Rough sizing: bytes / 4 is a usable first approximation for source code.
TOKENS=$(git ls-files '*.ts' '*.tsx' '*.go' '*.py' \
  | xargs wc -c | awk 'END { print int($1 / 4) }')
echo "approx input tokens: $TOKENS"

# Consumer rates are quoted per MILLION tokens.
# claude-sonnet-5: 0.1x of $3/M official = $0.30/M consumer.
awk -v t="$TOKENS" 'BEGIN { printf "one request: $%.4f\n", t / 1000000 * 0.30 }'

# The authoritative count is the one the gateway reports back.
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": 1024,
    "messages": [{"role": "user", "content": "Summarise the module layout."}]
  }' | jq '.usage'

价格和余量是两条线

窗口最大的不是单价最便宜的,单价最便宜的也不是窗口最小的。Gemini 3 Flash 是 100 万窗口配上目录里最低的消费者输入价 $0.050/M。GPT 6 Astra Stable 是最大的 105 万窗口配 $2.00/M——那是 Gemini 的 40 倍,来自 $10/M 官方价乘 0.2 倍率。

Grok 4.6 价格夹在两者之间,窗口却比两者都小:50 万窗口、$0.40/M,单次 prompt 到 20 万 token 起变成 $0.80/M。Claude Sonnet 5 是 100 万配 $0.30/M,Opus 5 同样窗口配 $0.50/M。所以「我要大窗口」只能把范围缩到 15 个 id,价格上什么也没决定。

表格答不了的问题是:在你的材料上,模型能不能用好窗口的远端。这个可以测——在一份真实的 50 万 token 负载里,把你要的事实放在 80% 深度的位置,然后提问,看它捞不捞得出来。一定要用自己的文件测,人造的大海捞针题说明不了模型怎么处理你的代码。

负载很大时的接口形态

100 万上下文的 Claude 和 GPT 6 Astra Stable 走 /v1/messages,用 x-api-key 加 anthropic-version: 2023-06-01。Gemini 和 Grok 走 /v1/chat/completions,用 Authorization: Bearer。GPT 5.6 系列和 5.x 那几个走 /v1/responses,同样是 bearer。

大请求恰恰是最该开 streaming 的场景:50 万 token 的 prompt 在吐出第一个 token 之前要处理一段时间,不开流式的客户端看上去会像卡死,其实只是在干活。

每个响应都会带 usage,把它记下来。网关记的那个数才是计费依据,拿它和自己的估算对一对,仓库级别的 prompt 就不会到月底才给你惊喜。

常见问题

是不是每次把整个仓库发过去就行了?
发了就按发了收,而且每次请求都收。100 万输入 token 在 Gemini 3 Flash 上是 0.050 美元、Claude Opus 5 上是 0.50 美元,单看不多;但二十轮下来,Opus 5 上就是 10 美元,模型用没用上都一样。按任务需要发,把真正重复的前缀做缓存,大窗口留给「确实没法靠检索判断哪些重要」的场景。
就为多出来的 5 万 token,GPT 6 Astra Stable 值吗?
多出来的窗口相对 100 万只是 5%,而消费者输入价是 $2.00/M,对比 Claude Sonnet 5 的 $0.30/M——你实际在为价差和那条专用 stable 通道买单。如果负载 100 万 token 装得下,那 5 万不构成选它的理由。
超出上下文窗口会怎样?
请求会被拒绝,而不是悄悄截断——所以超限的任务是直接停下,而不是拿着残缺的视野继续给你答案。发之前先量一下负载大小;长循环要在触顶之前主动总结或丢弃旧内容。