☰
2026最新版|Claude Code 接第三方模型端点完整教程(附一键脚本,四条命令验证跑通)
2026/10/1 15:35:02 网站建设 项目流程

2026最新版|Claude Code 接第三方模型端点完整教程(附一键脚本,四条命令验证跑通)

前言

这篇解决一个具体问题:把 Claude Code 的推理请求从官方端点切到第三方网关,并且确认它是真的通了,而不是"看起来装好了"。

网上大部分教程写到"填完 Base URL 和 API Key"就结束了。实际卡住人的恰恰在后面——claude --version能打印版本号,很多人就以为配置成功了,其实这只证明客户端装上了,端点通不通、密钥有没有效、模型有没有回包,一个字都没证明。

全文按这个顺序走:先判断你该用哪个脚本 → 跑脚本 → 看清它往系统里写了什么 → 桌面版图形界面的另一条路 →四条命令确认真的跑通→ 常见报错对照。所有命令都可以直接复制执行,所有数字都是本机实测。


一、环境与版本

本文所有命令在下面这个环境里实际执行过:

项目版本
操作系统Windows 10 Pro 22H2(19045)
PowerShell7.x(脚本兼容 5.1,见下文 TLS 说明)
Node.jsv24.21.0
Claude Code2.1.283
Git未安装

最后一行不是笔误。后面第六节会说到,这台机器没有 Git,claude照样跑,端到端请求照样通——Git 不是 Claude Code 的运行依赖。


二、步骤 1:先判断该用哪个脚本,别一上来就跑

打开终端,先敲这一句:

claude--version

根据输出选路径:

输出说明该用哪个脚本
打印出版本号(如2.1.283)Claude Code 已装好configure——只写配置
提示命令不存在环境是空的setup——先装依赖再写配置

很多人跳过这一步,随手抓一个"全量安装"脚本就跑,结果在已有环境上把依赖重装一遍。

好消息是configure这一支带硬检查:它做的第一件事就是在 PATH 里找claude,找不到直接抛错退出,不往下走。所以选错了也不会搞坏东西,它只是拒绝执行。反过来不成立——用setup去动一个已经配好的环境是有代价的。


三、步骤 2:执行一键脚本

情况 A:已经有 Claude Code —— 只写配置

macOS / Linux:

curl-fsSLhttps://raw.githubusercontent.com/xujfcn/crazyrouter-claude-code/main/configure.sh|bash

Windows PowerShell:

irmhttps://raw.githubusercontent.com/xujfcn/crazyrouter-claude-code/main/windows/configure.ps1|iex

情况 B:完全没有 Claude Code —— 完整安装

同一个仓库、同一个目录里还有一支完整安装脚本,把上面命令里的configure换成setup就是(setup.sh/windows/setup.ps1),它会先装 Git、Node.js、Claude Code,再写配置。

反过来别换:已经配好的环境上跑setup,依赖会被重装一遍。

执行前务必把链接在浏览器里打开看一眼内容。这跟脚本是谁写的无关,任何| bash、| iex形式的命令都该这么处理。下面这些细节就是通读源码读出来的。

顺带交代setup在 Windows 上的实现,因为这决定了老机器上能不能跑通:winget 优先,没有 winget 就回退到直接下载(Node.js 用固定版本的 LTS 安装包,Git 从官方 release 拉),并且专门为 PowerShell 5.1 开启了 TLS 1.2 / 1.3。差别就在这些回退分支上。


四、步骤 3:脚本只会问三件事

三个交互式提问,除第一项外都有默认值,回车即可:

提问是否必填实际行为
Token必填输入过程不回显,粘贴完屏幕上什么都看不见,这是正常的。空值直接报错退出
Base URL有默认值回车接受默认;会自动去掉你多打的结尾斜杠
模型有默认值回车接受默认,之后随时能改

两个读源码才知道的点:

  • Token 有格式预检(前缀是否为sk-/cr-/rk-),不匹配只打一行警告,不会拦截。看到 warning 别急着重来,先看后面有没有真的报错。
  • 脚本输出是英文的,即使你看的是中文文档。看到一屏英文属正常。

我实测跑过一次完整的一键命令:脚本成功下载执行,打印[OK] Claude Code detected: 2.1.283,走到 token 输入环节;因为跑在非交互子进程里,读取 token 时报错退出(退出码 1)。事后核对六个环境变量,一个都没被改动——说明脚本是"先问全、再落盘",中途退出不会留半截配置。这一点对反复重试的人很重要。

无人值守部署

服务器上不想交互,先用环境变量喂进去:

exportCRAZYROUTER_TOKEN="你的密钥"curl-fsSLhttps://raw.githubusercontent.com/xujfcn/crazyrouter-claude-code/main/configure.sh|bash

(裸机服务器上连 Claude Code 都还没有的话,同样把configure换成setup。)

这一支额外处理了一个坑:curl | bash通常跑在非登录 shell 里,找不到 npm 全局路径。脚本会主动去/usr/local/bin、~/.local/bin、~/.npm-global/bin这几个目录找claude;即使最终仍定位不到,它也会把配置写完并打印诊断信息,不会留个半截状态。


五、步骤 4:确认它往系统里写了什么

脚本改了什么必须心里有数。答案是六个用户级环境变量:

ANTHROPIC_BASE_URL 网关地址(不带 /v1) ANTHROPIC_AUTH_TOKEN 你的 token ANTHROPIC_MODEL 默认模型 CLAUDE_MODEL 默认模型 OPENAI_API_KEY 同一个 token OPENAI_BASE_URL 网关地址(带 /v1)

为什么写两套?不同工具读的是不同约定:Claude Code 走 Anthropic 那一组,其他 OpenAI 兼容客户端走后一组。写成两份,一个 token 两边都能用。

落盘位置:

  • Windows:直接写成用户级环境变量(SetEnvironmentVariable(..., 'User'))
  • macOS / Linux:写进~/.crazyrouter-claude-code.env,再往 shell 启动文件里加一行自动加载

这里有个细节值得一提:脚本选启动文件时,是按你真正的登录 shell 来选,而不是看哪个文件存在。服务器上很多人有一个用不着的.zshrc但实际用 bash,按"文件存在"判断就会写错地方。

手动配置的写法

不想用脚本完全可以手动来,效果一样。

Windows PowerShell:

[Environment]::SetEnvironmentVariable('ANTHROPIC_BASE_URL','https://api.crazyrouter.com','User')[Environment]::SetEnvironmentVariable('ANTHROPIC_AUTH_TOKEN','sk-你的密钥','User')[Environment]::SetEnvironmentVariable('ANTHROPIC_MODEL','claude-opus-4-8','User')[Environment]::SetEnvironmentVariable('CLAUDE_MODEL','claude-opus-4-8','User')[Environment]::SetEnvironmentVariable('OPENAI_API_KEY','sk-你的密钥','User')[Environment]::SetEnvironmentVariable('OPENAI_BASE_URL','https://api.crazyrouter.com/v1','User')

macOS / Linux,写进~/.zshrc或~/.bashrc:

exportANTHROPIC_BASE_URL="https://api.crazyrouter.com"exportANTHROPIC_AUTH_TOKEN="sk-你的密钥"exportANTHROPIC_MODEL="claude-opus-4-8"exportCLAUDE_MODEL="claude-opus-4-8"exportOPENAI_API_KEY="sk-你的密钥"exportOPENAI_BASE_URL="https://api.crazyrouter.com/v1"

按项目走的第三种写法

不想动全局环境变量,可以在项目根目录建.claude/settings.json,只对这个项目生效:

{"env":{"ANTHROPIC_BASE_URL":"https://api.crazyrouter.com","ANTHROPIC_AUTH_TOKEN":"sk-你的密钥","ANTHROPIC_MODEL":"claude-opus-4-8"}}

注意ANTHROPIC_BASE_URL只填根域名,Claude Code 会自己拼/v1/messages,手动补一个/v1上去,请求路径就变成/v1/v1/messages,这是错的。要注意的是你未必会收到报错:严格按路径路由的网关会直接回 404,宽松的网关可能照样返回 200(我实测手上这个就是),这种情况下你完全看不出来自己写错了。


六、步骤 5:桌面版图形界面(另一条路)

用 Claude Code 桌面应用的话,不碰环境变量也能配。但这个面板默认是隐藏的——在设置里怎么翻都翻不到,因为它归在开发者模式底下。

先开开发者模式:

Help → Troubleshooting → Enable Developer Mode

确认后应用会自动重启一次,左上角汉堡菜单里才会多出Developer项:

展开它,点Configure third-party inference:

进去后选左侧Connection,配好之后长这样:

逐项说明:

字段填什么注意事项
Credential kindStatic API key含义是"锁定凭据来源"——选定后只用这一个来源,不再回退到登录态或环境变量。填完发现请求还走老地址,先回来查这一项
Gateway base URL服务方给的地址图形界面不会像脚本那样帮你清理格式:结尾不带斜杠、不要自己补/v1(客户端会拼路径,多补一层变成/v1/v1/...)、不要挂查询参数
Gateway API key你的密钥粘完点右边小眼睛看一眼。从网页复制经常带一个不可见空格,报错和"密钥无效"长得一模一样
Gateway auth schemebearer或x-api-key决定密钥以Authorization: Bearer xxx还是x-api-key: xxx发出。实测这两种在该网关都返回 200,但别家网关选错就是 401
Artifact preview iframe origin留空没特殊需求走默认

最后两个按钮的顺序不能错:先点右上角 Test connection,通过了再点右下角 Apply Changes。漏掉第二个,配置不会保存。

补充一个排查方向:左侧还有Sandbox & workspace和Egress两栏,桌面版对工具流量做沙箱隔离。如果字段全填对了但 Test connection 不通,去这两栏看一眼出网白名单里有没有你的网关域名。这条本机没遇到(当前配置直接就通),列出来仅作排查参考。


七、步骤 6:四条命令确认真的跑通

这是全文最该抄走的一段。不要停在claude --version。

第 1 条:客户端装上了吗

claude--version

第 2 条:运行时在吗

node--version

第 3 条:配置真的写进去了吗

Windows PowerShell:

'ANTHROPIC_BASE_URL','ANTHROPIC_AUTH_TOKEN','ANTHROPIC_MODEL','CLAUDE_MODEL','OPENAI_API_KEY','OPENAI_BASE_URL'|ForEach-Object{"{0,-22} {1}"-f$_,[Environment]::GetEnvironmentVariable($_,'User')}

macOS / Linux:

env|grep-E'ANTHROPIC|OPENAI'

重点看两件事:六个变量都在;OPENAI_BASE_URL结尾带/v1,ANTHROPIC_BASE_URL不带。

第 4 条:端点、密钥、模型三者一起验(关键)

发一个max_tokens=16的最小请求,让模型回一个pong:

curl-shttps://api.crazyrouter.com/v1/messages\-H"Content-Type: application/json"\-H"Authorization: Bearer$ANTHROPIC_AUTH_TOKEN"\-H"anthropic-version: 2023-06-01"\-d'{ "model": "claude-opus-4-8", "max_tokens": 16, "messages": [{"role": "user", "content": "reply with: pong"}] }'

Windows PowerShell:

$token=[Environment]::GetEnvironmentVariable('ANTHROPIC_AUTH_TOKEN','User')$headers= @{'Content-Type'='application/json''Authorization'="Bearer$token"'anthropic-version'='2023-06-01'}$body= @{model ='claude-opus-4-8'max_tokens = 16 messages = @(@{role ='user';content ='reply with: pong'})}|ConvertTo-Json-Depth 5Invoke-RestMethod-Uri'https://api.crazyrouter.com/v1/messages'-Method Post-Headers$headers-Body$body

第四条才是关键。前三条全过、第四条不过的情况非常常见:密钥过期、额度用完、模型 ID 不认、代理软件把域名分流走了——全都停在这一步,而前三条一个都不会报错。

我把bearer和x-api-key两种认证头各发了一次真实请求,在这个网关上两种都返回 200 并拿到pong,说明它同时接收两种头。但这不是普遍情况,换到别家网关选错就是 401。


八、常见报错与解决

报错 1:配置完了,终端还是提示claude: command not found

原因:环境变量只对新开的进程生效,你在旧窗口里验证。

解决:Windows 把 PowerShell 完全关掉重开(不是新开标签页,是关掉整个窗口);macOS / Linux 新开一个终端,或者:

source~/.crazyrouter-claude-code.env

在旧窗口里看到"命令不存在"是预期结果,不是配置失败。脚本执行完打印的第一条 Next step 就是 “Open a NEW PowerShell window”,但这行字很容易被一屏英文盖过去。

报错 2:请求返回 404

原因:Base URL 多补了一层/v1。

ANTHROPIC_BASE_URL只填根域名,Claude Code 会自己拼/v1/messages。你手动补上去就变成https://api.crazyrouter.com/v1/v1/messages,这个写法本身就是错的。但反过来提醒一句:不是所有网关都会给你 404。严格按路径路由的会直接报 404,宽松的可能照样返回 200(我实测手上这个就是)。所以看到 404 要想到这一条,没看到 404 也不代表你写对了——还是以读回来的值为准。

排查:

[Environment]::GetEnvironmentVariable('ANTHROPIC_BASE_URL','User')

输出不应该包含/v1。

反过来,OPENAI_BASE_URL必须带/v1——这两个是不对称的,手动配置的人很容易统一成同一种写法,然后出现"Claude Code 通了、别的工具却连不上"或者反过来的诡异现象——多半是 404,但具体报什么错要看网关怎么路由。这不是文档写错,是两套协议的路径约定本来就不一样。

报错 3:返回 401 / 提示密钥无效

三个可能,按顺序排查:

  1. 认证头选错了。bearer和x-api-key传递方式不同,选错的报错和密钥错误几乎一致,很难从报错反推。照服务方文档来。
  2. 密钥尾部有不可见空格。从网页复制经常带上,肉眼看不出来。重新粘一次,桌面版点小眼睛核对。
  3. 密钥没被读到。在脚本或子进程里,$env:ANTHROPIC_AUTH_TOKEN可能是空的。改成显式读用户级:
[Environment]::GetEnvironmentVariable('ANTHROPIC_AUTH_TOKEN','User')

我自己就在这里踩过一次——子进程里取不到值,端点返回"未提供令牌",看起来像密钥失效,实际是作用域问题。

报错 4:端点地址带了查询参数

很多人是从某个分享链接里复制的地址,尾巴上挂着?utm_source=xxx之类。在浏览器里没事,填进接口端点轻则被忽略,重则校验不过。端点地址必须是干净的。

报错 5:Git 安装失败,是不是要重来

不用。本机 Git未安装,claude跑得好好的,第四条端到端请求也通。Git 不是 Claude Code 的运行依赖,setup脚本装它是为了你之后用得上。看到 Git 装失败先别推翻重来,接着往下验证。

报错 6:桌面版 Test connection 不通,但字段都对

去左侧Sandbox & workspace和Egress两栏,看出网白名单里有没有你的网关域名。桌面版对工具流量做沙箱隔离。(本机未复现,仅作排查方向。)


九、总结

整套流程的特点是每一步都不难,但错了不知道错在哪。真正值钱的不是配置步骤,而是第七节那四条验证命令——把"装上了"和"跑通了"分开确认。

三条最容易踩的:

  1. 两个 Base URL 不对称:ANTHROPIC_BASE_URL不带/v1,OPENAI_BASE_URL带
  2. 配置写完必须新开终端窗口,旧窗口里验证必然失败
  3. 端点地址不要带任何查询参数

换机器、新同事入职,把第七节那四条命令跑一遍再说别的,能省掉大量无头绪的排查时间。有卡住的地方欢迎在评论区交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询