openrouter 接入 claude code

接入与开发

讲清把 OpenRouter 当通道接进 Claude Code 的工程做法:环境变量与路由配置、超时并发、降级换源、日志与自查清单。

很多人按教程把 Claude Code 的地址改成 OpenRouter 之后,能跑起来但一上量就出问题:长任务半路断、并发一开就限流、报错看不出是通道还是模型的问题。这篇不重讲协议和客户端装法,只给落地做法——从哪里改配置、超时和并发怎么设、失败怎么降级、日志记哪几个字段、换通道后按什么顺序自查。

很多人第一次把 Claude Code 接到 OpenRouter,流程走通了、也能出结果,但一到真实项目上量就出问题:长任务跑到一半停住、并发一开就撞限流、报错分不清是通道还是模型本身。这类问题的根子通常不在客户端装没装对,而在超时、并发、降级、日志这几件事没提前定规则。这篇只讲落地做法,协议和客户端安装不重复。

先把结论摆在这:Claude Code 走 Anthropic 那一侧的协议,改法和 OpenAI 系客户端不一样,所以配置要分三项确认——base URL、鉴权变量、默认模型,别一次全改完再一起排错。下面按「值不值得接→改哪里→怎么设超时重试→并发怎么控→怎么降级→日志记什么→怎么验收→上线清单」的顺序走一遍。

先想清楚:为什么要让 Claude Code 走 OpenRouter

走一层通道是有代价的:多一跳网络、多一层配额和计费口径、多一处要排查的日志。所以在动手之前先判断自己的场景属不属于「值得」。下面这张表可以直接对照。

场景适合走 OpenRouter不适合,建议直连或另想办法
手上要按任务切多个模型适合单一模型就够,切换需求不存在
主力供应商偶发不稳,想有备份适合对数据出境有硬性要求
想用一套 Key 管多模型、统一口径适合任务强依赖某一家独有能力,换源即失效
只想省钱、想蹭免费额度要看成本结构,别当成唯一理由不愿意为多一跳延迟买单
  • 适合的场景:手上有多个模型想按任务切、单一供应商偶尔不稳、想用一套 Key 管多个模型。
  • 不适合的场景:团队对数据出境有硬要求、任务极度依赖某一家的独有能力。
  • 先明确你能接受的代价:多一跳网络延迟、多一层配额与计费口径、多一处可能需要排查的日志。
  • 动手前到 /openrouter 看当前的模型清单与调用口径,到 /official-api 对照官方直连的差别,判断这层通道值不值。
  • 如果只是想省钱或想用免费额度,先读站内 openrouter-free-model-calling 与 openrouter-usage-ranking,别把省钱当成唯一理由。

改哪几个地方:配置入口与环境变量

Claude Code 走的是 Anthropic 协议那一侧,改法和 OpenAI 系客户端不一样。最稳的做法是把 base URL、鉴权变量、默认模型三项拆开,一项一项改、一项一项验,而不是一口气改完再去看哪里报错。

base URL
指向通道侧的入口地址,别把两种协议的地址混用。
鉴权变量
通道侧发的 Key,注意变量名和客户端认的变量名是否一致。
默认模型
要写成通道侧认识的写法,大小写和分隔符对不上通常直接报模型不存在。

环境变量改完要新开一个终端会话才生效。很多人卡在「改了没用」,其实是旧 shell 里还留着老值,这种问题排查半小时都找不出原因,其实重开一个窗口就好。

  • 先把三项分开确认,别一次改完再一起排错。
  • 环境变量改完新开一个终端会话,避免旧 shell 残留旧值。
  • 模型名按通道侧写法来,大小写和分隔符对不上会报模型不存在,而不是鉴权错。
  • 具体字段名和写法到 client-setup 看客户端侧说明,到 base-url 看两套协议的差异,这篇不重复。

超时与重试:把「偶发断流」变成可预期的行为

长任务卡住,多数不是连接超时,而是读取超时。所以连接超时、读取超时、整体超时这三项要分开设,不要只写一个总超时了事。分档建议到 api-timeout-tuning 对照。

  1. 分三档设超时连接超时给短、读取超时给长、整体超时兜底。设完跑一个长上下文请求验证不会提前断。
  2. 限定重试范围只对幂等且明确是网络层的错误重试。模型侧返回的内容级错误重试只会重复烧额度。
  3. 用指数退避并设上限重试间隔按指数退避递增,加一个最大重试次数,避免一次任务卡死一整晚。
  4. 流式单独处理流式场景下断流和超时要分开判断,先看 streaming-sse-production 里那几条前置检查。

判断标准很简单:如果一次任务失败后,你没法从日志里说清是超时、限流还是内容错误,那重试策略就还没定清楚。重试不是越多越好,是「知道什么时候该放弃」才算定完。

并发与批量:别让 Claude Code 自己把配额打满

很多人并发一开就限流,是因为并发上限是拍脑袋定的。先量出你能承受的上限,再开任务。基线可以去 /tools/speed-test 跑一遍,别凭感觉设数字。

任务类型并发建议失败处理
单文件小改动可以适度并发失败单条重试即可
批量改代码、批量生成测试分批排队,不要一次全起加失败重投队列
跨文件重构低并发或串行失败后限制在降级通道之外处理
长上下文分析低并发,拉长间隔优先排队等主通道恢复
  • 批量任务要分批排队,加一个失败重投队列,不要让所有子任务同时起。
  • 触发限流后的处理顺序:先降并发、再拉长间隔、最后才考虑换通道。
  • 直接换通道会把问题带到新通道上,等于把一个没定位的问题复制了一遍。
  • 退避与排队的具体档位参考 429-concurrency-backoff 与 batch-concurrency-throttle-guide。

降级与换源:主通道抖了怎么接着干活

降级能救急,但前提是先把「什么算失败到需要换源」定义清楚。规则要写死在配置里,不能靠人临时判断,否则同一批任务两个人跑出两种结果。

  • 定义失败条件:连续多次同类错误、超过时长阈值、还是特定错误码,三选一或组合。
  • 降级目标要提前验证过可用,临时抓一个没用过的模型接上去,结果往往是把任务写坏而不是写不完。
  • 换源后模型能力可能变弱,涉及重构、跨文件改动的任务要限制在降级通道上跑,宁可排队等主通道恢复。
  • 多通道编排思路见 multi-model-routing-fallback,这里只强调判断条件要可量化。

日志记哪几个字段:出问题能复盘

日志不是记得越多越好,是记对字段。下面这几项能覆盖大多数「慢」和「贵」的归因,缺一项排查时就得多猜一轮。

字段作用备注
时间戳对齐问题发生的时间点必备
请求模型名确认实际打到哪个模型必备
通道标识区分主通道还是降级必备
耗时区分连接慢还是读取慢必备
是否流式流式和非流式故障模式不同建议
错误类型归类失败原因必备
重试次数判断是偶发还是持续建议

请求体只记摘要和长度,不要把完整代码上下文落盘,团队协作场景下这是数据风险。拿这些字段做一个小看板,按天看失败率和平均耗时,趋势比单次报错更能说明问题。字段清单可以对着 api-log-fields-replay 里的口径抄,保持一致后面好横向比。

换通道后的验收顺序:五步走一遍再上量

换通道或者改配置之后,别直接上量。按下面五步走一遍,每一步都留一条可复现的命令或脚本,之后每次改配置重跑一遍,比人肉点一遍靠谱得多。

  1. 单请求连通性发一个最短请求,确认能拿到返回,验证鉴权和 base URL。
  2. 带工具调用的请求Claude Code 常用工具调用,这一步通不过后面都白搭。
  3. 长上下文请求故意给一个较大的上下文,验证读取超时设得够不够。
  4. 流式输出跑一次流式,确认断流和超时能区分开。
  5. 并发压一小批开一小批并发,看限流和退避有没有按预期触发。

验收不过时按「鉴权→模型名→网络→配额」的顺序查,别一上来就怀疑模型能力。排错顺序的细节可以看 relay-connectivity-verification 和 401/403 那两篇,这里不展开。判断标准是:每一步都能重跑,且失败时能定位到具体一项配置,而不是「整体不行」。

上线前对照清单

把下面四组逐条过一遍,四条都打勾再上量。这份清单的价值不在全面,在于让你每次改完配置都有个固定动作,不用凭记忆。

  • 配置:base URL、鉴权、默认模型三项在干净终端里验证通过。
  • 稳定性:超时分档、重试上限、退避策略、降级条件都已写进配置而非文档。
  • 成本:知道这批任务大概的量级,到 /tools/model-cost-calculator 与 /usage 核一遍口径。
  • 可观测:日志字段齐全,能回答「上一次失败是什么原因」。
下一步如果你正准备把 Claude Code 接到 OpenRouter,先去 /openrouter 看当前模型清单与调用口径,再去 /tools/speed-test 量一遍你这边的并发基线,两个数字对上了再动配置,能省掉大半排查时间。

常见问题

改完配置 Claude Code 还是连不上,先查什么?

按鉴权、模型名、网络、配额这个顺序查。多数情况是环境变量没在新终端生效,或者模型名写法不对。先跑一条最简单的单请求,不要带着完整任务排查。

走 OpenRouter 会不会比直连慢很多?

多一跳通常会增加一点延迟,但感知明显与否取决于你原来的网络路径和节点。建议先用 /tools/speed-test 量出自己的基线,再和直连对比,别用感觉判断。

并发应该设多少?

没有通用数字。先看通道侧给你的配额口径,再用一小批任务试探,从低往高加,观察失败率和耗时拐点。触发限流就退回上一档,不要把并发当成越大越快。

降级到别的模型,代码质量会不会变差?

会,而且不同任务差别很大。建议只让降级通道承接格式整理、注释补全、小范围修改这类容错高的活;重构、跨模块改动留在主通道,宁可排队。

怎么确认问题是出在通道还是模型?

同一个提示词换一条通道跑一遍,看错误是否复现。错误跟着提示词走更可能是模型或请求内容问题,换通道就好了基本是通道侧的事。日志里记好通道标识才好做这个对比。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。