一句话导读:大家都在问 Claude Code 能不能接到 OpenRouter,但很少有人先算清,接上之后账单到底按哪一档模型走。 下文先写请求离开本机之后的路径和官方要求的环境变量,再把四个档位、同一笔假设用量、订阅和按量放在一起,最后才是个人开发者真正拧得动的旋钮。
请求离开本机之后走哪条路
Claude Code 对上游说的是 Anthropic Messages API。OpenRouter 提供一层兼容这套接口的入口,官方文档把它叫做 Anthropic skin:思考块和工具调用会原样转过去,费用记在你的 OpenRouter 额度上。不需要在本机再跑一个转发进程。
基址是 https://openrouter.ai/api,末尾不要加 /v1。Claude Code 自己会拼后面的路径。写成带 /v1 的地址,是这套接法里最常见的「变量都写了、请求却打到错误主机」的原因之一。
官方文档把兼容范围写得很窄:Claude Code 经 OpenRouter 只保证走 Anthropic 第一方供应商。模型选择器里可以出现别家的 id,文档同时写明 Claude Code 是按 Anthropic 模型优化的,换到其他供应商可能不正常。所以「接上 OpenRouter」不等于「把默认模型换成目录里最便宜的那一个」。便宜模型和能跑完工具调用,是两件要分开验证的事。
额度购买和 token 单价也是两笔账。OpenRouter 自己的 Claude Code 说明写的是:推理不加价,你付的是目录上的单价;买额度时另收 5.5% 手续费,最低 $0.80。手续费相对档位差是小头,后面的表会把这个比例算出来。
四行环境变量,空着的那一行不能省
官方快速开始要求把钥匙放在 ANTHROPIC_AUTH_TOKEN,并且把 ANTHROPIC_API_KEY 显式设成空字符串。前者会进 Authorization: Bearer,这是网关要的;后者会进 x-api-key,Claude Code 把它当成直连 Anthropic 的凭证。空字符串是为了阻止它退回直连。只删掉旧钥匙、不写成 ="",交互模式下仍可能沿用本机保存的登录。
export OPENROUTER_API_KEY="<your-openrouter-api-key>"
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
export ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY"
export ANTHROPIC_API_KEY=""
顺序有一个容易踩空的点:ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY" 在 shell 读到这一行时就展开。钥匙如果写在它后面,或者由稍后才注入的密钥管理器提供,令牌会变成空字符串,每个请求都是认证失败。写进 ~/.zshrc 时,先定义 OPENROUTER_API_KEY。
以前用 Anthropic 账号登录过 Claude Code 的,进会话执行一次 /logout,退出再开。官方说明缓存登录和网关凭证同时存在时,启动期会报认证冲突,表面症状常常是模型找不到,包括 openrouter/auto 这种只有 OpenRouter 才有的 id。macOS 上这份缓存在钥匙串里,名字是 Claude Code-credentials,原生安装不一定写 ~/.claude/.credentials.json。
核对用会话里的 /status。认证行应是 ANTHROPIC_AUTH_TOKEN,基址行应是 https://openrouter.ai/api。若认证行仍是 ANTHROPIC_API_KEY,或登录方式仍是 Claude 账号,变量没有进到这个进程。OpenRouter 的 Activity 页应能看到同一条请求。
项目级可以写在仓库里的 .claude/settings.local.json,不要写进 Claude Code 不读的 .env,也不要把钥匙提交进 git。这个文件进了版本库,就等于把额度钥匙交给每一个克隆。只想本机长期使用时,官方更建议放在 shell 配置里,并用系统钥匙串取出明文,而不是把 sk-or- 开头的字符串直接贴进点文件。
空钥匙和退登是两件事
/logout 只清掉缓存的 OAuth 会话。shell 里如果还留着真正的 ANTHROPIC_API_KEY,退登不会把它清掉,请求仍可能按直连 Anthropic 计费。
接不上、进程起不来、内存被打满,和这条计费路径不是同一类故障。安装和报错可以对照 Claude Code 部署报错修复。
四个档位才是单价
Claude Code 把任务分成 Fable、Opus、Sonnet、Haiku 四档,各看一个环境变量;子代理另有 CLAUDE_CODE_SUBAGENT_MODEL。OpenRouter 文档给的示例把这几档都指到 ~anthropic/claude-…-latest,子代理示例指到 Opus。那是「能选到最新别名」的写法,不是个人预算的写法。别名会跟着目录走,今天的 ~anthropic/claude-opus-latest 标价和 anthropic/claude-opus-5.5 一致,明天不必仍是这个 id。
下面这张表是 2026-10-20 从 OpenRouter 公开模型目录读到的单价,单位是美元 / 100 万 token。缓存读取是目录里的 cache read 价,只有服务商真的命中前缀缓存时才按这个数计,不是每一条输入都打折。
| 档位 | 本文钉住的 id | 输入 | 输出 | 缓存读取 | 100 万进 + 100 万出 |
|---|---|---|---|---|---|
| Fable | anthropic/claude-fable-5.1 |
$10 | $50 | $0.25 | $60 |
| Opus | anthropic/claude-opus-5.5 |
$4 | $20 | $0.20 | $24 |
| Sonnet | anthropic/claude-sonnet-5.5 |
$2 | $10 | $0.10 | $12 |
| Haiku | anthropic/claude-haiku-5.5 |
$0.10 | $0.50 | $0.01 | $0.60 |
同一天目录里,anthropic/claude-fable-5 的输入输出和 5.1 相同,都是 $10 / $50,但缓存读取是 $1,而不是 $0.25。anthropic/claude-opus-5 是另一行:$5 进、$25 出。anthropic/claude-sonnet-5 的输入输出和 5.5 相同,缓存读取是 $0.20,比 5.5 的 $0.10 贵一倍。名字里都有 Opus 或 Sonnet,账单不是同一个数。要按这篇文章的账来管预算,就把 id 钉死,不要只写 latest。
export ANTHROPIC_DEFAULT_FABLE_MODEL="anthropic/claude-fable-5.1"
export ANTHROPIC_DEFAULT_OPUS_MODEL="anthropic/claude-opus-5.5"
export ANTHROPIC_DEFAULT_SONNET_MODEL="anthropic/claude-sonnet-5.5"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="anthropic/claude-haiku-5.5"
export CLAUDE_CODE_SUBAGENT_MODEL="anthropic/claude-haiku-5.5"
最后一行是预算选择,不是官方示例。官方示例把子代理放在 Opus 上。子代理如果主要是搜文件、跑测试、写摘要,跟会话钉在同一档 Opus,等于每一条支线都按 $4 / $20 计。改到 Haiku 之前,先在 /model 里确认四档都列出来了,再看 Activity 里的模型列是不是你钉的 id。
$60 除以 $0.60 是 100 倍。这是目录价的比值,不是某一次会话的实测。token 怎么从字符折成计费单位,见 token 与单价对照。目录里其他家族这周的用量和标价,见 OpenRouter 周榜。
同一笔假设用量,档位差多少
下面不是日志里抠出来的「平均一天」。它只回答一个问题:同一笔 token,档位一换,目录价差多少。假设一个工作日送出 800 万 input token、80 万 output token,大约 10 比 1,用来表示 Agent 会反复带上上下文、真正写出来的字少得多。这一节先假设缓存读取为零。
| 整天钉在这一档 | 这一天 | 22 个这样的工作日 |
|---|---|---|
| Fable 5.1 | $120 | $2,640 |
| Opus 5.5 | $48 | $1,056 |
| Sonnet 5.5 | $24 | $528 |
| Haiku 5.5 | $1.20 | $26.40 |
| 五成 Haiku、四成 Sonnet、一成 Opus | $15 | $330 |
算法可以复核。Opus 5.5 这一天是 8 × $4 + 0.8 × $20 = $48。混合那一行按同样 800 万 / 80 万拆开:Haiku 占一半 token,是 $0.60;Sonnet 占四成,是 $9.60;Opus 占一成,是 $4.80;合计 $15。22 是大约一个月里的工作日,不是折扣,也不是套餐。
再加一个同样标明为假设的缓存:Opus 这一天若有一半 input 按缓存读取计,则 400 万 × $4 + 400 万 × $0.20 + 输出 $16 = $32.80,而不是 $48。工具输出一变,前缀就断,下一次又回到原价。不能把 $32.80 写成承诺。
买额度的 5.5% 加在这张表外面。$48 对应大约 $2.64,$330 对应大约 $18。它改变不了「整天 Fable」和「混合档」之间那 $2,310 的差。先改档位,再谈手续费。
这张表不能拿去和 Pro 的月费比谁更便宜
$48 已经高于 Pro 的月费,但 Pro 不是无限量的 Opus。表上的数是目录价乘假设 token。你的会话没有送出 800 万 input,这张表就不描述你的一天。
订阅、直连和 OpenRouter 是三张账单
Claude 定价页在 2026-10-20 仍是这些标价,不含税,并且写明套餐可以改:Pro 月付 $20,年付折合 $17(一次付 $200);Max 5x 是 $100 / 月,Max 20x 是 $200 / 月。Pro 和 Max 都包含 Claude Code,和网页、桌面、手机里的 Claude 共用用量。帮助中心写的限制是五小时会话上限加每周上限;Max 另外有 Fable 的每周上限。Max 相对 Pro 的用量倍数,写的是每个五小时会话里 5 倍或 20 倍。
这和 OpenRouter 不是同一个计量器。帮助中心写明:环境里如果设置了 ANTHROPIC_API_KEY,Claude Code 会按 API 计费,而不是扣订阅里包含的用量。接到 OpenRouter 时还要 /logout,并且把 API key 留空、改用 ANTHROPIC_AUTH_TOKEN。走通之后,请求从第一条就开始扣 OpenRouter 额度,不会去消耗 Pro 里还没用完的那一截。
因此个人开发者可以按自己卡在哪一面来选,而不是按「网关更先进」来选:
- 用量停在 Pro 或 Max 的上限里面:订阅是封顶价。$20 或 $100 花完,这个周期里多出来的会话不会按 Opus 单价继续往上加,而是触发限额。限额够用,就不必为了 OpenRouter 拆出按量。
- 每周都撞上限额,而且撞上之后你本来就会改买 API 额度:先看撞上的是不是 Fable 或 Opus。把子代理和日常改动放到 Haiku、Sonnet,往往比先升一档 Max 更直接。升档买的是更多订阅用量,不是更低的 token 单价。
- 需要一把钥匙的硬上限、按请求能看到模型列:OpenRouter 的钥匙限额和 Activity 页提供的是订阅用量条不提供的视图。你为这个视图支付目录价,外加买额度时的 5.5%。直连 Anthropic Console 的 token 单价和目录一致时,这 5.5% 就是网关本身的价差,换来的是失败转移、一把钥匙看全部请求。OpenRouter 写明推理不加价,指的是这一层,不是指它比 Pro 便宜。
Claude Code 和编辑器里的助手是不是同一笔账,见 Claude Code 与 Cursor。那篇比的是产品形态,这篇比的是接上之后的计量器。
个人开发者先拧这五个旋钮
第一,会话不要整天停在 Fable 或 Opus。 四档变量就是这个旋钮。艰难的长程推理留在 Fable,复杂修改留在 Opus,普通改动留在 Sonnet,检索和短补全留在 Haiku。钉死 id 之后,别名改价不会悄悄换掉你算过的那一档。
第二,子代理单独降档。 复制官方示例时,子代理会跟 Opus 走。一条主会话拆出三个子代理,如果每个都按 Opus 计,支线的 token 可以比你在主对话里看到的回复更贵。个人预算下,把 CLAUDE_CODE_SUBAGENT_MODEL 放到 Haiku;只有那条子任务本身就是难的推理时,再临时升档。
第三,/fast 是加价,不是省钱。 官方说明快模式最多大约 2.5 倍输出速度,价格高于对应 Opus 的普通档,而且只覆盖 Opus 4.6、4.7、4.8 和 Opus 5,不覆盖 Fable。要在 OpenRouter 上让 Claude Code 的 /fast 真正带上 speed: "fast",需要 Claude Code 2.1.96 或更新,并设置 CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1,还得把 Opus 变量钉在具体 id 上,例如 anthropic/claude-opus-5。钉在 ~anthropic/claude-opus-latest 时,/fast 可以显示已开启,请求却不带 speed,你按普通价跑、还以为自己在付快模式的钱,或者相反。更需要记住的一条:会话若停在 Fable,打开 /fast 不会把 Fable 加速,Claude Code 会把会话换到你配置的 Opus 上,之后的请求按 Opus 计费。不想为速度付溢价,就不要开这个开关。
第四,给这一把钥匙设额度上限。 OpenRouter 的钥匙可以单独封顶。个人开发者至少把 Claude Code 用的钥匙和别的实验钥匙分开,月上限按你能接受烧掉的数来写。Activity 页的模型列用来抓「今天是不是又跑到 Fable 去了」。官方仓库里的 statusline 脚本可以在会话里累加这一次的费用和缓存折扣,它每次刷新会再请求一次生成记录,长会话是慢慢补齐的,不是发票。
第五,上下文变长是输入侧的账单。 模型名末尾的 [1m] 只改变 Claude Code 对窗口的假设,避免过早压缩;OpenRouter 会在路由前去掉这个标记。窗口假设变大之后,你能送进去的前缀也变大。压缩、少读整个仓库、让稳定的前缀有机会命中缓存,省的是 input。缓存读价在表里已经比输入低一个数量级,但只有前缀没被工具输出打断时才用得上。
模型费旁边还有机器费。会话挂一整晚,编译和模拟器还在同一台 Mac 上抢内存时,账单不在 OpenRouter 里。内存怎么配,见 Claude Code 服务器内存配置。两张账单分开看,才不会把 token 超支误判成「机器太慢」。
别把非 Anthropic 模型当成默认省钱开关
选择器在设置 CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 之后会出现,官方写的是一份精选,不是整个目录,而且其中一些条目会路由到非 Anthropic 供应商。文档要求把 Anthropic 第一方放在最高优先级,并写明快模式只有第一方能提供。
一次失败的工具调用会再跑一整轮上下文。单价只有 Opus 的几十分之一,重试两次,账可以回到同一量级,结果还没写完。要把 DeepSeek 或其他家族放进编码流程,把它当成另一个工具来测,而不是当成 Claude Code 四档变量的静默替换。能力差和价格差放在一起看,见 DeepSeek V4 Flash 与 Claude Opus。
个人开发者的顺序
先确认自己还在不在订阅用量池里。还在,并且限额够用,就停在 Pro 或 Max。已经按量付费,就先拆四档和子代理,再给钥匙加月上限。最后才考虑选择器里的其他模型。
常见问题
Claude Code 接 OpenRouter,官方保证的是哪一类模型? 官方文档写的是只保证 Anthropic 第一方。选择器里的其他模型可以出现,但不在这句保证里面。
OpenRouter 会不会在 token 单价上再加一层? 它的 Claude Code 说明写的是推理不加价,单价以目录为准。加价发生在买额度时:5.5%,最低 $0.80。
Pro 订阅和按 token 哪个更便宜? 没有脱离用量的答案。用量停在 Pro(月付 $20,或年付折合 $17)或 Max($100 / $200)的限额里,订阅是封顶。接到 OpenRouter 之后,请求改走额度,不再扣那份额度里的用量。上面 $48 和 $15 是假设 token 的目录价,不是你的发票。
/fast 能省钱吗? 不能。它是更高单价换更快输出,而且只覆盖部分 Opus。停在 Fable 上打开它,会话会换到 Opus 计费。
钥匙写进 ~/.zshrc 安全吗? 能用,但是明文。点文件一旦进了仓库或粘贴板,钥匙就泄漏了。更稳的做法是从系统钥匙串读取,泄漏后在 OpenRouter 的钥匙页撤销。项目配置用 settings.local.json,不要提交。
为什么我改了基址,Activity 里还是没有请求? 先看 /status 的认证行是不是 ANTHROPIC_AUTH_TOKEN,基址是不是不带 /v1 的 https://openrouter.ai/api。旧的账号登录用 /logout 清掉。shell 里残留的 ANTHROPIC_API_KEY 要写成空字符串,只退登不够。
ZavCloud Developer Infrastructure
模型按量计费之后,机器别和编译抢
长会话、Xcode 和模拟器吃的是同一台 Mac 的内存,这笔账不在 OpenRouter 里。
独享 Mac 节点按月租,和 token 分开。