折腾了一中午怎么在 Win11 的 Claude Code 中用 OpenAI 的 API,网上的教程良莠不齐,方法也不一样,有的是纯拿 AI 瞎编的,有的还要搞什么 Azure 什么 CC Switch 的,不是不行,但是太麻烦了。不得不说 A÷ 搞得这个玩意儿是真难用啊。多数模型提供商,如 GLM、MIMO 之类的会提供适用于 Anthropic 的配置方法和链接,但是 ChatGPT 目前没有,搞起来会麻烦很多。
前置条件:
1. 安装了 Windows 11 的电脑
2. Python,建议 3.10 / 3.11 / 3.12
3. Claude Code CLI
4. 已有一个 OpenAI 兼容接口,例如:https://ai.saurlax.com/v1/chat/completions
5. 已确认该接口支持的、你要用的模型名,例如 gpt-5.4
最终效果:
Claude Code CLI
↓
http://127.0.0.1:4000/v1/messages
↓
LiteLLM 本地代理
↓
https://ai.saurlax.com/v1/chat/completions
↓
实际模型:gpt-5.4
对 Claude Code 暴露的模型名:
claude-opus-4-7
实际调用的上游模型:
gpt-5.4
一、安装 LiteLLM
打开 PowerShell,创建项目目录:
mkdir $HOME\litellm-proxy
cd $HOME\litellm-proxy
创建 Python 虚拟环境:
python -m venv .venv
激活虚拟环境:
.\.venv\Scripts\Activate.ps1
安装 LiteLLM Proxy:
pip install "litellm[proxy]"
验证安装:
.\.venv\Scripts\litellm.exe --version
二、设置环境变量
这里使用两个环境变量:
SAURLAX_API_KEY:上游 OpenAI 兼容接口的 API Key (名字随便,我是因为用了 ai.saurlax.com 提供的 API 所以起这个名字,下同)
LITELLM_MASTER_KEY:本地 LiteLLM 的访问密码
设置为当前用户永久环境变量:
[Environment]::SetEnvironmentVariable("SAURLAX_API_KEY", "sk-xxxxxxx", "User")
[Environment]::SetEnvironmentVariable("LITELLM_MASTER_KEY", "sk123456", "User")
设置完成后,关闭当前 PowerShell,重新打开。
检查是否生效:
echo $env:SAURLAX_API_KEY
echo $env:LITELLM_MASTER_KEY
三、测试上游接口
在正式配置 LiteLLM 前,建议先确认上游接口本身可用,本步非必须,但是建议测一下,防止后续各种奇葩问题。
PowerShell 下建议使用 Invoke-RestMethod,不要直接用 curl.exe -d 写多行 JSON,不然会各种报错。
$headers = @{
Authorization = "Bearer sk-xxxxxxx"
"Content-Type" = "application/json"
}
$body = @{
model = "gpt-5.4"
messages = @(
@{
role = "user"
content = "你好"
}
)
} | ConvertTo-Json -Depth 10 -Compress
Invoke-RestMethod `
-Uri "https://ai.saurlax.com/v1/chat/completions" `
-Method Post `
-Headers $headers `
-Body $body
如果返回中包含类似下面内容,说明上游接口正常:
model: gpt-5.4
object: chat.completion
四、创建 LiteLLM 配置文件
上游完整接口地址是:
https://ai.saurlax.com/v1/chat/completions
但在 LiteLLM 配置里,api_base 只用写到 /v1:
https://ai.saurlax.com/v1
不要写完整的 /chat/completions,否则 LiteLLM 会重复拼接接口路径。
在 PowerShell 中执行:
cd $HOME\litellm-proxy
$config = @"
model_list:
- model_name: claude-opus-4-7 # Claude Code 看到的名字
litellm_params:
model: openai/gpt-5.4 # 上游实际收到的模型
api_key: os.environ/SAURLAX_API_KEY
api_base: https://ai.saurlax.com/v1
litellm_settings:
num_retries: 3
request_timeout: 600
drop_params: true
"@
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText("$HOME\litellm-proxy\config.yaml", $config, $utf8NoBom)
这里使用 UTF-8 无 BOM 写入,避免 Windows PowerShell 写出的配置文件首行带 BOM,导致 model_list 读取异常。如果你的 config.yaml 一直无法被正常读取,可以拖进 010 Editor 看一眼开头的 hex 是不是有怪东西。正常开头应该是 6D 6F 64 65 6C 5F 6C 69 73 74,对应文本 model_list。如果开头是 EF BB BF,说明文件带 BOM,需要重新用上面的无 BOM 方式写入。
最终配置文件内容如下:
model_list:
- model_name: claude-opus-4-7
litellm_params:
model: openai/gpt-5.4
api_key: os.environ/SAURLAX_API_KEY
api_base: https://ai.saurlax.com/v1
litellm_settings:
num_retries: 3
request_timeout: 600
drop_params: true
五、启动 LiteLLM
进入 LiteLLM 目录并激活虚拟环境:
cd $HOME\litellm-proxy
.\.venv\Scripts\Activate.ps1
在终端中启动 LiteLLM:
.\.venv\Scripts\litellm.exe --config ".\config.yaml" --port 4000 --detailed_debug
看到类似下面内容说明启动成功:
Uvicorn running on http://0.0.0.0:4000
这个终端窗口不要关闭。LiteLLM 会在这个窗口中持续运行。
六、测试 LiteLLM 的 OpenAI 兼容接口
新开一个 PowerShell,执行:
$headers = @{
Authorization = "Bearer sk123456"
"Content-Type" = "application/json"
}
$body = @{
model = "claude-opus-4-7"
messages = @(
@{
role = "user"
content = "你好"
}
)
} | ConvertTo-Json -Depth 10 -Compress
Invoke-RestMethod `
-Uri "http://localhost:4000/v1/chat/completions" `
-Method Post `
-Headers $headers `
-Body $body
如果返回中显示:
model: claude-opus-4-7
object: chat.completion
说明 OpenAI 兼容接口已经正常。
此时实际链路是:
请求模型:claude-opus-4-7
↓
LiteLLM 映射
↓
实际模型:openai/gpt-5.4
↓
上游接口:https://ai.saurlax.com/v1/chat/completions
七、测试 Claude Code 使用的 Anthropic Messages 接口
Claude Code 默认不是走 /v1/chat/completions,而是走 Anthropic Messages 风格接口:
/v1/messages
因此还需要测试:
$headers = @{
Authorization = "Bearer sk123456"
"Content-Type" = "application/json"
"anthropic-version" = "2023-06-01"
}
$body = @{
model = "claude-opus-4-7"
max_tokens = 100
messages = @(
@{
role = "user"
content = "你好"
}
)
} | ConvertTo-Json -Depth 10 -Compress
Invoke-RestMethod `
-Uri "http://localhost:4000/v1/messages" `
-Method Post `
-Headers $headers `
-Body $body
如果返回类似下面内容,说明 Claude Code 需要的接口也已经通了:
type: message
role: assistant
model: claude-opus-4-7
content: Hello! How can I help?
还是那句话,测试步骤非必须,但是鉴于我搞了一中午才搞明白,我觉得测一测挺好的。
八、配置 Claude Code
Claude Code 的全局配置文件位置为:
C:\Users\你的用户名\.claude\settings.json
以上路径是 Windows 默认的当前用户路径,如果你用第三方工具改过位置可能就不一样了。
用记事本打开:
notepad $HOME\.claude\settings.json
修改为:
{
"env": {
"ANTHROPIC_BASE_URL": "http://127.0.0.1:4000",
"ANTHROPIC_AUTH_TOKEN": "sk123456",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
},
"hasCompletedOnboarding": true,
"model": "claude-opus-4-7"
}
其中:
"ANTHROPIC_BASE_URL": "http://127.0.0.1:4000"
不要写成:
"ANTHROPIC_BASE_URL": "http://127.0.0.1:4000/v1"
Claude Code 会自动拼接 /v1/messages。
如果原配置中存在旧的 ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_API_KEY、HTTP_PROXY、HTTPS_PROXY 或旧 model 等等等等,建议全部删除,避免 Claude Code 继续走旧配置。最终只保留当前 LiteLLM 相关配置即可。
九、清理 Claude Code 模型缓存
执行:
Remove-Item "$HOME\.claude\cache\gateway-models.json" -Force -ErrorAction SilentlyContinue
十、启动 Claude Code
确保 LiteLLM 窗口还在运行。
然后新开 PowerShell,进入项目目录:
cd C:\Users\Lentinel\Documents\GitHub\Local-Data-Alchemist
启动 Claude Code:
claude --model claude-opus-4-7
进入 Claude Code 后,可以先测试一句:
你好
同时观察 LiteLLM 窗口。如果 LiteLLM 窗口出现请求日志,说明 Claude Code 已经成功走本地 LiteLLM。
十一、日常使用流程
后续每次使用时,只需要两步。
第一步,启动 LiteLLM:
cd $HOME\litellm-proxy
.\.venv\Scripts\Activate.ps1
.\.venv\Scripts\litellm.exe --config ".\config.yaml" --port 4000
保持该窗口不要关闭。
第二步,新开 PowerShell 启动 Claude Code:
cd C:\Users\Lentinel\Documents\GitHub\Local-Data-Alchemist
claude --model claude-opus-4-7
十二、配置汇总
LiteLLM 配置文件
路径:
C:\Users\你的用户名\litellm-proxy\config.yaml
内容:
model_list:
- model_name: claude-opus-4-7
litellm_params:
model: openai/gpt-5.4
api_key: os.environ/SAURLAX_API_KEY
api_base: https://ai.saurlax.com/v1
litellm_settings:
num_retries: 3
request_timeout: 600
drop_params: true
Claude Code 配置文件
路径:
C:\Users\你的用户名\.claude\settings.json
内容:
{
"env": {
"ANTHROPIC_BASE_URL": "http://127.0.0.1:4000",
"ANTHROPIC_AUTH_TOKEN": "sk123456",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
},
"hasCompletedOnboarding": true,
"model": "claude-opus-4-7"
}
十三、踩中的坑
1. api_base 不要写完整接口
错误写法:
api_base: https://ai.saurlax.com/v1/chat/completions
正确写法:
api_base: https://ai.saurlax.com/v1
2. Windows 下建议使用 Invoke-RestMethod
PowerShell 中直接使用 curl.exe -d '{...}' 传多行 JSON,容易出现神秘的 JSON 格式错误。
推荐写法:
$body = @{
model = "gpt-5.4"
messages = @(
@{
role = "user"
content = "你好"
}
)
} | ConvertTo-Json -Depth 10 -Compress
然后用:
Invoke-RestMethod
3. 配置文件建议使用 UTF-8 无 BOM
Windows PowerShell 写 YAML 时,建议使用:
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText("config.yaml", $config, $utf8NoBom)
避免配置文件首行带 BOM,导致 model_list 读取异常。
4. Claude Code 使用的是 /v1/messages
测试 Claude Code 链路时,不要只测:
/v1/chat/completions
还要测:
/v1/messages
5. Claude Code 全局配置会影响实际请求地址
如果 Claude Code 一直没有走本地 LiteLLM,需要检查:
C:\Users\你的用户名\.claude\settings.json
重点确认:
"ANTHROPIC_BASE_URL": "http://127.0.0.1:4000"
以及:
"model": "claude-opus-4-7"
不要残留旧网关地址、旧代理或旧模型名。
Comments NOTHING