Win11 下使用 LiteLLM 将其他模型接入 Claude Code

Lentinel 发布于 2 天前 66 次阅读


折腾了一中午怎么在 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"

不要残留旧网关地址、旧代理或旧模型名。