字节笔记本
2026年8月28日
openrouter/auto 给 Claude Code 当路由
Claude Code 默认打 Anthropic。接到 OpenRouter 之后,可以把各档模型槽位写成 openrouter/auto:每次请求先按任务类型分类,再按过去 7 天社区真实花费选模型,路由本身不另收费。官方说明在 Auto Router 和 Claude Code 接入。
先把请求打到 OpenRouter
openrouter/auto 是模型 slug,不是代理。Claude Code 还是走 Anthropic Messages 协议,只是 ANTHROPIC_BASE_URL 指到 OpenRouter 的 Anthropic Skin。本地不用再挂 claude-code-router 这类翻译层。
密钥从 openrouter.ai/settings/keys 拿,前缀一般是 sk-or-。写进 ~/.zshrc 或 ~/.bashrc:
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=""
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1四条容易踩:
- Base URL 是
https://openrouter.ai/api,不要加/v1。 ANTHROPIC_API_KEY必须写成空字符串。不设的话,Claude Code 可能拿旧的 Anthropic 控制台密钥当x-api-key,请求又打回 Anthropic。ANTHROPIC_AUTH_TOKEN="$OPENROUTER_API_KEY"在 source 时展开。密钥必须写在这行前面,否则 token 是空的,看起来像密钥坏了。- 不要把这三项丢进项目
.env。原生安装的 Claude Code 不读普通.env。
只想对某一个仓库生效,写项目根目录的 .claude/settings.local.json,不要提交密钥:
{
"env": {
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
"ANTHROPIC_AUTH_TOKEN": "<your-openrouter-api-key>",
"ANTHROPIC_API_KEY": "",
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1"
}
}以前用 Anthropic 账号登录过,先在会话里跑 /logout,退出再开 claude。缓存的 OAuth 会盖住环境变量,报错经常写成 openrouter/auto 找不到。macOS 原生安装把会话放在钥匙串 Claude Code-credentials,/logout 之后还在就删这条再启动。
进会话跑 /status,应看到:
Auth token: ANTHROPIC_AUTH_TOKEN
Anthropic base URL: https://openrouter.ai/apiAuth token 写的是 ANTHROPIC_API_KEY,或登录方式仍是 Claude 账号,说明环境没进这次进程。重载 shell,再开一次 claude。Activity 面板几秒内会有请求。
模型槽位改成 openrouter/auto
Claude Code 按任务档位选模型:Fable、Opus、Sonnet、Haiku,外加子代理。要让自动路由接管,每个槽位都写 openrouter/auto,漏一个就会悄悄走默认 Haiku / Sonnet:
export ANTHROPIC_DEFAULT_FABLE_MODEL="openrouter/auto"
export ANTHROPIC_DEFAULT_OPUS_MODEL="openrouter/auto"
export ANTHROPIC_DEFAULT_SONNET_MODEL="openrouter/auto"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="openrouter/auto"
export CLAUDE_CODE_SUBAGENT_MODEL="openrouter/auto"同一组也可以写进 settings.local.json 的 env。改完重启 Claude Code,打开 /model 看各档是不是都指向 auto。
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 会打开网关模型列表。列表是精选,不是全站目录,而且可能出现非 Anthropic 条目。要用 auto,直接钉槽位,不要靠列表点选。
auto 实际怎么选
路由器把提示分成大约 30 种任务,比如 code:debugging、agent:multi_step_planning、qa_knowledge。对每种任务,它看过去 7 天社区在这类工作上的花费占比,再按你的成本档和模型限制筛一遍,主选加备用。分类或排行暂时不可用时,会落到默认集合,不会因为路由自己挂了就 500。
响应里的 model 字段是真正接住这次请求的模型,例如 anthropic/claude-sonnet-4.5。多轮对话会尽量粘在同一模型和同一供应商上:你可以传 session_id,不传就按消息指纹认会话。任务类型变了,更合适的模型仍可能顶上来。
路由不另收费。你付的是选中模型的标价。OpenRouter 充值另有手续费,跟 auto 无关。要卡单次上限,继续用 provider.max_price。
想看这次被标成哪种任务,请求头加 X-OpenRouter-Metadata: enabled,管道里会带 data.task_type。Claude Code 自己不会加这个头,排查时用 curl 或 SDK 复现同一句提示即可。
用通配符把候选锁死
不设限制时,auto 会看该任务类型下所有上榜模型。Claude Code 吃的是 Anthropic 请求语义,官方只保证 Anthropic 第一方供应商。auto 如果选到别家,工具调用和 thinking 块可能 silently 变差,看起来像「Claude Code 坏了」。
账号级限制写在工作区的 Routing 页。Auto Router 那一段可以存允许的模型和成本偏好,对 openrouter/auto 和 openrouter/auto-beta 都生效。Claude Code 发不出 plugins 字段,所以通配符主要靠这里,而不是请求体。
通配规则:
| 写法 | 匹配 |
|---|---|
anthropic/* | 所有 Anthropic 模型 |
openai/gpt-5* | GPT-5 一族 |
google/* | 所有 Google 模型 |
openai/gpt-5.1 | 精确匹配 |
*/claude-* | 任意供应商、名字里带 claude |
给 Claude Code 用时,允许列表先写成 anthropic/*。还要排除某几个,用同一套通配写 excluded_models,排除在允许之后生效。筛完一个都不剩,接口回 404:No models match your request and model restrictions。
自己调 API 时,限制可以写在单次请求里:
{
"model": "openrouter/auto",
"messages": [{ "role": "user", "content": "把这段函数拆成可测的小块" }],
"plugins": [
{
"id": "auto-router",
"allowed_models": ["anthropic/*"],
"cost_tier": "high"
}
]
}cost_tier 是 low、medium、high、xhigh、max。它是一条带子,不是天花板:比这档便宜的和更贵的都会被拿掉。不设时,行为接近 low。旧参数 cost_quality_tradeoff 还能用,两个一起传时以 cost_tier 为准。
请求里写了同一字段,会盖掉账号默认值。页面上如果打开了「禁止覆盖」,账号设置就是最终值。
openrouter/auto-beta 是新行为的提前轨道。插件 id 必须写成 auto-beta-router,写 auto-router 会被收下但静默忽略。Claude Code 槽位继续用 openrouter/auto 即可,除非你明确要试 beta。
什么时候不要用 auto
需要每次同一条路径可复现,就钉死模型。官方现在给 Claude Code 的稳妥写法是 ~author/model-latest 别名,永远解析到该系列最新版:
export ANTHROPIC_DEFAULT_OPUS_MODEL="~anthropic/claude-opus-latest"
export ANTHROPIC_DEFAULT_SONNET_MODEL="~anthropic/claude-sonnet-latest"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="~anthropic/claude-haiku-latest"
export CLAUDE_CODE_SUBAGENT_MODEL="~anthropic/claude-opus-latest"/fast 只对具体的 Opus 版本生效(4.6 / 4.7 / 4.8 / 5)。槽位如果是 openrouter/auto 或 ~anthropic/claude-opus-latest,界面可能显示 Fast mode ON,请求里却没有 speed: "fast"。真要快档,把 Opus 槽位钉成 anthropic/claude-opus-5 这类具体 id,并设 CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1(Claude Code ≥ 2.1.96)。
非 Anthropic 模型可以出现在网关列表里,但 Claude Code 不保证工具调用和 thinking 能跑完。想省钱,用 auto 加 anthropic/* 和偏低的 cost_tier,比直接换一家模型更不容易把会话打崩。
常见故障
openrouter/auto 报 model not found,多半是凭证冲突,不是 slug 写错。两种情况分开看:
- 以前用 Anthropic 账号登录过:
/logout,退出进程,再开claude。 - shell 里还留着真的
ANTHROPIC_API_KEY:/logout清不掉环境变量。把该变量改成"",重载 shell,再用/status确认走的是ANTHROPIC_AUTH_TOKEN。
鉴权失败先看密钥是不是写在 ANTHROPIC_AUTH_TOKEN 里,以及 OPENROUTER_API_KEY 是否定义在它前面。ANTHROPIC_API_KEY 里如果是控制台密钥,Claude Code 会当直连 Anthropic。
请求发出去了但模型不是你想的,打开 Activity 看实际 model。允许列表太宽,或 Routing 页没存 anthropic/*,auto 会按市场花费选,不一定落在 Claude。
落地检查
/status显示 token 是ANTHROPIC_AUTH_TOKEN,base URL 是https://openrouter.ai/api。- 五个模型槽位都写成
openrouter/auto,或你有意钉死的具体 Anthropic id。 - Routing 页允许列表至少有
anthropic/*,成本档和你的预算一致。 - Activity 里能看到请求,
model落在 Anthropic 家族。 - 密钥只在本机环境或
settings.local.json,没有进 git。
接好之后,Claude Code 还是原来的会话和工具循环。变的是:每一档任务先经过市场指数,再落到当下最常被为这类工作付钱的模型。