解锁 Claude Code 新玩法:接入 ChatGPT,模型自由切换

随着现在claude code封号严重,gpt-5.4的效果也还不错,奥特曼的封禁也没有Claude那么严重,并且GPT现在还有很多低价

  1. 咸鱼Team拼车-几块钱的拼车号拉上5个小号可以用几天,最近封号有点严重
  2. 教育版
  3. Plus直冲
    但是我已经习惯了 Claude Code 这一整套 coding workflow,不换工具,直接把底层模型切到 ChatGPT / GPT-5.4,此教程采用CLIProxyAPI方式进行处理,还可以使用Sub2api(比较重,适合中转站部署,我个人单机跑就用CPA了)

Claude Code 原生走的是 Anthropic 协议,所以你需要一个中间层,把它的请求接住,再转发到 OpenAI / Codex 线路上。现在最常见、也最好用的一套方案,就是:

  • CLIProxyAPI:本地代理层,负责协议转换、账号托管、统一对外暴露接口

这篇文章不讲空话,直接带你把整条链路跑起来。

测试环境:

  • Windows 10/11
  • PowerShell
  • Claude Code 2.x

基本链路

链路是这样:

  1. Claude Code 继续按 Anthropic 协议发请求
  2. CLIProxyAPI 在本地接住请求
  3. CLIProxyAPI 再把请求转发到 OpenAI / Codex 登录态
  4. 返回结果,再伪装成 Claude 兼容响应回给 Claude Code

所以真正要配的重点有三个:

  • CLIProxyAPI 跑起来
  • Codex OAuth 登录成功
  • ANTHROPIC_BASE_URL 指到本地代理

在这里插入图片描述|697


简单介绍一下CPA

CPA主要是指后端代理CLIProxyAPI,基于管理的方便性和实时观测,我这里也引入了CPA-Dashboard 这个前端管理面板是可以不安装的,CPA官方也提供了面板,但是感觉没那么好用

CPA你可以简单把它理解成:

给各种 AI CLI 客户端做一个统一的本地网关。

它能做什么?

  • 把不同上游统一成兼容接口
  • 托管多种 provider 的登录态
  • 给本地客户端一个固定的 Base URL
  • 支持账号切换、日志、部分配额查看、可视化管理

这篇文章就是让 Claude Code 继续“以为”自己在请求 Anthropic,实际上底层走的是你已经登录好的 OpenAI / Codex。


开始前,先准备这几样东西

建议你先确认下面这些条件都满足:

  • Claude Code 本身已经能正常启动
  • 你有一个可用的 OpenAI / Codex 登录态
  • PowerShell 能正常执行命令
  • 这些端口没有被占用:831714555000

这几个端口分别是:

  • 8317:CLIProxyAPI 默认服务端口
  • 1455:Codex OAuth 本地回调端口
  • 5000:CPA-Dashboard 默认 Web 端口

如果你是在远程服务器上折腾,后面还要考虑端口转发。


5 步把 Claude Code 接入 GPT


第 1 步:下载 CLIProxyAPI,准备配置文件

先去这两个地址:

下载以后是一个压缩包,进行解压放到你的常用目录,解压以后有下面的文件

在这里插入图片描述

config.example.yaml复制出来改为 config.yaml,先写最小可跑配置,其他内容忽略就可以:

1
2
3
4
5
6
7
8
port: 8317
auth-dir: C:/cli-proxy-api/
api-keys:
- sk-local-cpa

remote-management:
allow-remote: true
secret-key: "abc123"

这三个字段的作用很简单:

  • port:本地代理监听端口
  • auth-dir:保存 OAuth 登录态的目录
  • api-keys:本地客户端访问 CLIProxyAPI 时要带的 Key
  • remote-management控制台登录配置
    • allow-remote默认是false 如果想等界面改为true
    • secret-key就是对应的密码,管理密钥。若填写明文,启动时会自动哈希后生效。"$2a$10$FwrQR5eyFDz.24Xg4byK5OnfkZ/8lamfnxR1qUKLTpX5FlqjemErK"

这里这个 sk-local-cpa 不是 OpenAI 官方 Key。

它只是你自己给本地代理设的访问口令,后面 Claude Code 会拿这个值去访问 CLIProxyAPI。


第 2 步:启动 CLIProxyAPI 代理服务

windows 源码 go语言构建

还是在 CLIProxyAPI 目录执行:

1
.\cli-proxy-api.exe --config .\config.yaml

在这里插入图片描述

macOS brew构建

1
2
brew install cliproxyapi
brew services start cliproxyapi

使用 Homebrew 安装并通过 brew services 运行时,默认配置文件路径是 $(brew --prefix)/etc/cliproxyapi.conf(Apple Silicon 常见为 /opt/homebrew/etc/cliproxyapi.conf,Intel 常见为 /usr/local/etc/cliproxyapi.conf)。 如果你希望继续使用 ~/.cli-proxy-api/config.yaml 作为主配置,可将默认路径软链接到该文件:

1
2
3
4
brew services stop cliproxyapi
mv "$(brew --prefix)/etc/cliproxyapi.conf" "$(brew --prefix)/etc/cliproxyapi.conf.bak"
ln -s ~/.cli-proxy-api/config.yaml "$(brew --prefix)/etc/cliproxyapi.conf"
brew services start cliproxyapi

常用命令

命令 用途
./CLIProxyAPI 启动代理服务器(默认模式)
./CLIProxyAPI -config /path/to/config.yaml 使用自定义配置路径启动
./CLIProxyAPI -login 认证 Google 账户以使用 Gemini
./CLIProxyAPI -claude-login 通过 OAuth 认证 Claude
./CLIProxyAPI -codex-login 通过 OAuth 认证 Codex
./CLIProxyAPI -qwen-login 通过 OAuth 认证 Qwen
./CLIProxyAPI -tui 启动终端管理 UI
./CLIProxyAPI -tui -standalone 启动带有嵌入式服务器的 TUI
./CLIProxyAPI -debug -config ./config.yaml 启用调试日志并指定配置文件启动

正常情况下,它会监听:

1
http://127.0.0.1:8317

如果你只是想先确认服务起来了没有,可以在另一个 PowerShell 窗口执行:

1
curl http://127.0.0.1:8317/

只要能拿到页面响应,说明代理基本跑起来了。

这一步建议你不要跳,先确认代理活着,再去接 Claude Code。

你也可以直接在浏览器打开http://127.0.0.1:8317/management.html,进入他的控制台界面,第一次登录会需要你输入密码,密码是配置文件中配置的

页面内容

在这里插入图片描述


第 3 步:先完成 OpenAI / Codex 登录

在命令行中进入 CLIProxyAPI 目录,执行:

1
.\cli-proxy-api.exe --codex-login
1
cliproxyapi --codex-login

如果你不想自动弹浏览器,也可以这样:

1
.\cli-proxy-api.exe --codex-login --no-browser
1
cliproxyapi --codex-login --no-browser

它会给你一个登录链接,浏览器打开后按提示完成 OAuth。
在这里插入图片描述|290

选择你的GPT账号进行登录,然后进行授权操作,最后会提示你授权成功
在这里插入图片描述|329

这里注意两件事:

  1. Codex OAuth 的本地回调端口是 1455
  2. 如果你在远程机器上运行 CLIProxyAPI,需要做端口转发,否则登录回调接不回来

登录成功后,认证信息会写入你配置的 auth-dir 目录。

如果这一步没成功,后面所有步骤都不用继续。

界面配置
如果你不想使用命令行,可以在CPA自带的管理界面进行身份认证,这时候你需要提前执行第3步,运行起来CPA 然后访问http://127.0.0.1:8317/management.html

在这里插入图片描述

在浏览器中打开对应链接,还是使用你的gpt账号登录,登录成功以后,复制完整 URL 并提交到这里,然后点击提交回调URL完成认证。

认证成功以后可以在配额管理查看自己的账号信息
在这里插入图片描述|331


如果认证失败修改修改cliproxyapi的配置文件config.yaml中的vpn代理urlproxy-url="127.0.0.1:7890"
327

第 4 步:把 Claude Code 的上游改到本地 CLIProxyAPI

这一段是整篇教程里最关键的一步。

Claude Code 认的是 Anthropic 相关环境变量,所以你要做的不是配 OpenAI 变量,而是让 Anthropic 变量指向本地代理。

修改Claude Code 配置

如果你已经安装了CC Switch 直接在CCS 增加一个供应商即可,也可以修改claude code 的配置文件settings.json

在这里插入图片描述

配置对应的模型,注意API格式和认证字段不要选错了
在这里插入图片描述

参考的配置如下,如果你没有CC Switch 直接修改配置文件settings.json ,一般在C盘你的用户目录的.claude(Windows)

1
2
3
4
5
6
7
8
9
10
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-local-cpa",
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8317",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "gpt-5.4(medium)",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "gpt-5.4(high)",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "gpt-5.4(medium)",
"ANTHROPIC_MODEL": "gpt-5.4(medium)"
}
}
  • ANTHROPIC_AUTH_TOKEN 是你自己的配置文件中配置的api-keys不是secret-keys,不要写错了

附上目前支持的模型(Plus订阅 20260329)
在这里插入图片描述


第 5 步:验证

直接打开你的Claude Code (如果已经存在则需要重新打开)

比如直接问一句:

1
请先不要改代码,只告诉我你当前使用的模型路由和 reasoning effort。

在这里插入图片描述

到这里你的Claude Code 就可以使用GPT的最新模型了

注意事项

  • CLIProxyAPI 后台运行不要关闭
  • 代理软件不要关闭,否则没有办法请求OpenAI
  • GPT需要有额度

如果你想类似于中转站的用法,可以自己从远程服务器进行部署,不用每次自己本机启动对应的应用
服务器部署建议使用docker部署或者官方提供的一键部署脚本
Linux 一键部署 curl -fsSL https://raw.githubusercontent.com/brokechubb/cliproxyapi-installer/refs/heads/master/cliproxyapi-installer | bash
Docker 部署 docker run --rm -p 8317:8317 -v /path/to/your/config.yaml:/CLIProxyAPI/config.yaml -v /path/to/your/auth-dir:/root/.cli-proxy-api eceasy/cli-proxy-api:latest

最新资讯,关注公众号【AI早班车】

配置文件的中文对应说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
# 服务器绑定主机/接口,默认空字符串同时绑定 IPv4/IPv6。
# 使用 "127.0.0.1" 或 "localhost" 可限制仅本机访问。
host: ""

# 服务器端口
port: 8317

# TLS 设置:启用后使用提供的证书与私钥监听 HTTPS。
tls:
enable: false
cert: ""
key: ""

# 管理 API 设置
remote-management:
# 是否允许远程(非 localhost)访问管理接口。
# 为 false 时仅允许 localhost,仍需管理密钥。
allow-remote: false

# 管理密钥。若填写明文,启动时会自动哈希后生效。
# 所有管理请求(包括本地)都需要该密钥。
# 留空则完全禁用管理 API(所有 /v0/management 路由返回 404)。
secret-key: ""

# 为 true 时禁用内置管理面板资源下载与路由。
disable-control-panel: false

# 管理面板的 GitHub 仓库,可填写仓库 URL 或 releases API URL。
panel-github-repository: "https://github.com/router-for-me/Cli-Proxy-API-Management-Center"

# 认证目录(支持 ~ 展开为主目录)
auth-dir: "~/.cli-proxy-api"

# 用于请求认证的 API 密钥
api-keys:
- "your-api-key-1"
- "your-api-key-2"
- "your-api-key-3"

# 是否启用调试日志
debug: false

# 为 true 时禁用高开销 HTTP 中间件以降低高并发下的内存占用
commercial-mode: false

# 为 true 时将应用日志写入滚动文件而非 stdout
logging-to-file: false

# 日志目录的最大总大小(MB);超过后会删除最旧的日志。0 表示不限制。
logs-max-total-size-mb: 0

# 为 false 时禁用内存用量统计聚合
usage-statistics-enabled: false

# 代理地址。支持 socks5/http/https,例如 socks5://user:pass@192.168.1.1:1080/
proxy-url: ""

# 为 true 时,无前缀模型请求只会匹配无前缀凭据(除非前缀与模型名相同)。
force-model-prefix: false

# 请求重试次数;当响应码为 403/408/500/502/503/504 时重试。
request-retry: 3

# 冷却中的凭据等待的最长时间(秒),超过则触发重试。
max-retry-interval: 30

# 配额超限时的处理
quota-exceeded:
switch-project: true # 配额超限时是否自动切换其他项目
switch-preview-model: true # 配额超限时是否自动切换预览模型

# 多凭据匹配时的路由策略
routing:
strategy: "round-robin" # 轮询(默认)或 fill-first

# 是否为 WebSocket API (/v1/ws) 启用认证
ws-auth: false

# 当 > 0 时,为非流式响应每隔 N 秒发送空行以防止空闲超时
nonstream-keepalive-interval: 0

# 当为 true 时,为 Codex API 请求启用官方 Codex 指令注入
# 当为 false(默认)时,CodexInstructionsForModel 立即返回而不修改
codex-instructions-enabled: false

# 流式传输行为(SSE keep-alive 与安全启动重试)
streaming:
keepalive-seconds: 15 # 默认:0(禁用);≤0 关闭 keep-alive。
bootstrap-retries: 1 # 默认:0(禁用);首字节前的重试次数。

# Gemini API 密钥
gemini-api-key:
- api-key: "AIzaSy...01"
prefix: "test" # 可选:需要以 "test/gemini-3-pro-preview" 访问
base-url: "https://generativelanguage.googleapis.com"
headers:
X-Custom-Header: "custom-value"
proxy-url: "socks5://proxy.example.com:1080"
models:
- name: "gemini-2.5-flash" # 上游模型名
alias: "gemini-flash" # 客户端别名
excluded-models:
- "gemini-2.5-pro" # 精确排除
- "gemini-2.5-*" # 前缀通配
- "*-preview" # 后缀通配
- "*flash*" # 子串通配
- api-key: "AIzaSy...02"

# Codex API 密钥
codex-api-key:
- api-key: "sk-atSM..."
prefix: "test" # 可选:需以 "test/gpt-5-codex" 访问
base-url: "https://www.example.com" # 自定义 Codex 端点
headers:
X-Custom-Header: "custom-value"
proxy-url: "socks5://proxy.example.com:1080" # 可选:单独代理
models:
- name: "gpt-5-codex" # 上游模型名
alias: "codex-latest" # 客户端别名
excluded-models:
- "gpt-5.1" # 精确排除
- "gpt-5-*" # 前缀通配
- "*-mini" # 后缀通配
- "*codex*" # 子串通配

# Claude API 密钥
claude-api-key:
- api-key: "sk-atSM..." # 使用官方 Claude API 时无需 base-url
- api-key: "sk-atSM..."
prefix: "test" # 可选:需以 "test/claude-sonnet-latest" 访问
base-url: "https://www.example.com" # 自定义 Claude 端点
headers:
X-Custom-Header: "custom-value"
proxy-url: "socks5://proxy.example.com:1080" # 可选:单独代理
models:
- name: "claude-3-5-sonnet-20241022" # 上游模型名
alias: "claude-sonnet-latest" # 客户端别名
excluded-models:
- "claude-opus-4-5-20251101" # 精确排除
- "claude-3-*" # 前缀通配
- "*-thinking" # 后缀通配
- "*haiku*" # 子串通配
cloak: # 可选:为非 Claude Code 客户端进行请求伪装
mode: "auto" # "auto"(默认):仅当客户端不是 Claude Code 时伪装
# "always":始终应用伪装
# "never":从不应用伪装
strict-mode: false # false(默认):将 Claude Code 提示前置到用户系统消息
# true:删除所有用户系统消息,仅保留 Claude Code 提示
sensitive-words: # 可选:用零宽字符混淆的词汇
- "API"
- "proxy"

# OpenAI 兼容提供商
openai-compatibility:
- name: "openrouter" # 提供商名称,用于 UA 等
prefix: "test" # 可选:需以 "test/kimi-k2" 访问
base-url: "https://openrouter.ai/api/v1" # 提供商基础 URL
headers:
X-Custom-Header: "custom-value"
api-key-entries:
- api-key: "sk-or-v1-...b780"
proxy-url: "socks5://proxy.example.com:1080" # 可选:单独代理
- api-key: "sk-or-v1-...b781" # 无代理
models: # 提供商支持的模型
- name: "moonshotai/kimi-k2:free" # 上游模型名
alias: "kimi-k2" # 客户端别名

# Amp 集成
ampcode:
# Amp CLI OAuth 与管理功能的上游地址
upstream-url: "https://ampcode.com"
# 可选:覆盖 Amp 上游 API Key(否则使用环境变量或文件)
upstream-api-key: ""
# 按客户端的上游 API Key 映射
# 将顶层 api-keys 中的客户端密钥映射到不同的 Amp 上游密钥。
# 若未匹配到则回退到 upstream-api-key。
upstream-api-keys:
- upstream-api-key: "amp_key_for_team_a" # 供这些客户端使用的上游密钥
api-keys: # 使用该上游密钥的客户端密钥
- "your-api-key-1"
- "your-api-key-2"
- upstream-api-key: "amp_key_for_team_b"
api-keys:
- "your-api-key-3"
# 是否将 Amp 管理路由 (/api/auth, /api/user 等) 仅限 localhost(默认 false)
restrict-management-to-localhost: false
# 是否在检查本地 API 密钥前强制执行模型映射(默认 false)
force-model-mappings: false
# Amp 模型映射:当请求的模型不可用时路由到本地可用模型
# 适用于 Amp CLI 请求不可用模型(如 Claude Opus 4.5)但本地有相似模型的情况
model-mappings:
- from: "claude-opus-4-5-20251101" # Amp 请求的模型
to: "gemini-claude-opus-4-5-thinking" # 路由到的可用模型
- from: "claude-sonnet-4-5-20250929"
to: "gemini-claude-sonnet-4-5-thinking"
- from: "claude-haiku-4-5-20251001"
to: "gemini-2.5-flash"

# 全局 OAuth 模型名称别名(按渠道)
# 这些别名同时用于模型列表和请求路由的模型 ID 重命名。
# 支持的渠道:gemini-cli、vertex、aistudio、antigravity、claude、codex、qwen、iflow。
# 注意:别名不适用于 gemini-api-key、codex-api-key、claude-api-key、openai-compatibility、vertex-api-key 或 ampcode。
# 您可以使用不同的别名重复相同的名称,以暴露多个客户端模型名称。
oauth-model-alias:
antigravity:
- name: "rev19-uic3-1p"
alias: "gemini-2.5-computer-use-preview-10-2025"
- name: "gemini-3-pro-image"
alias: "gemini-3-pro-image-preview"
- name: "gemini-3-pro-high"
alias: "gemini-3-pro-preview"
- name: "gemini-3-flash"
alias: "gemini-3-flash-preview"
- name: "claude-sonnet-4-5"
alias: "gemini-claude-sonnet-4-5"
- name: "claude-sonnet-4-5-thinking"
alias: "gemini-claude-sonnet-4-5-thinking"
- name: "claude-opus-4-5-thinking"
alias: "gemini-claude-opus-4-5-thinking"

# OAuth 提供商的模型排除列表
oauth-excluded-models:
gemini-cli:
- "gemini-2.5-pro" # 精确排除
- "gemini-2.5-*" # 前缀通配
- "*-preview" # 后缀通配
- "*flash*" # 子串通配
vertex:
- "gemini-3-pro-preview"
aistudio:
- "gemini-3-pro-preview"
antigravity:
- "gemini-3-pro-preview"
claude:
- "claude-3-5-haiku-20241022"
codex:
- "gpt-5-codex-mini"
qwen:
- "vision-model"
iflow:
- "tstars2.0"

# 可选的 payload 配置
payload:
default: # 默认规则仅在 payload 中缺少参数时设置
- models:
- name: "gemini-2.5-pro" # 支持通配符(如 "gemini-*")
protocol: "gemini" # 将规则限制为特定协议,选项:openai、gemini、claude、codex、antigravity
params: # JSON 路径(gjson/sjson 语法)-> 值
"generationConfig.thinkingConfig.thinkingBudget": 32768
default-raw: # 默认原始规则在缺少时使用原始 JSON 设置参数(必须是有效的 JSON)
- models:
- name: "gemini-2.5-pro" # 支持通配符(如 "gemini-*")
protocol: "gemini" # 将规则限制为特定协议,选项:openai、gemini、claude、codex、antigravity
params: # JSON 路径(gjson/sjson 语法)-> 原始 JSON 值(字符串按原样使用,必须是有效的 JSON)
"generationConfig.responseJsonSchema": "{\"type\":\"object\",\"properties\":{\"answer\":{\"type\":\"string\"}}}"
override: # 覆盖规则总是设置参数,覆盖任何现有值
- models:
- name: "gpt-*" # 支持通配符(如 "gpt-*")
protocol: "codex" # 将规则限制为特定协议,选项:openai、gemini、claude、codex、antigravity
params: # JSON 路径(gjson/sjson 语法)-> 值
"reasoning.effort": "high"
override-raw: # 覆盖原始规则总是使用原始 JSON 设置参数(必须是有效的 JSON)
- models:
- name: "gpt-*" # 支持通配符(如 "gpt-*")
protocol: "codex" # 将规则限制为特定协议,选项:openai、gemini、claude、codex、antigravity
params: # JSON 路径(gjson/sjson 语法)-> 原始 JSON 值(字符串按原样使用,必须是有效的 JSON)
"response_format": "{\"type\":\"json_schema\",\"json_schema\":{\"name\":\"answer\",\"schema\":{\"type\":\"object\"}}}"
filter: # 过滤规则从 payload 中删除指定的参数
- models:
- name: "gemini-2.5-pro" # 支持通配符(如 "gemini-*")
protocol: "gemini" # 将规则限制为特定协议,选项:openai、gemini、claude、codex、antigravity
params: # 要从 payload 中删除的 JSON 路径(gjson/sjson 语法)
- "generationConfig.thinkingConfig.thinkingBudget"
- "generationConfig.responseJsonSchema"

claude指令

命令 解释 使用场景
/clear 清空上下文 需要重新开始,感觉AI无法解决问题了
/compact 压缩对话 重开对话,但是不要丢掉之前的记忆
/cost 花费 max不需要看,API用户可以看到
/logout /login 登出 登陆 切换账号
/model 切换模型 200刀可以使用opus模型,100刀没有选择
/status 状态 查看当前claude code的状态
/doctor 检测 检测claude code安装状态
shift+tab 模式切换 ⏵⏵accept edits on ⏸ plan mode on 正常模式

Yolo模式:权限放开

claude --dangerously-skip-permissions进入Yolo模式,此时claude拥有更高权限,shfit+tab调整模式,灵活切换权限细粒度。

CLAUDE.md: 全局记忆核心

  • 建初始CLAUDE.md
  • 对话长度接近溢出时运行/compact续命
  • 达到里程碑时要求Claude Code根据进度更新CLAUDE.md
  • 循环整个过程直到结束
    CLAUDE.md是一个持续发挥作用的全局变量。
    CLAUDE.md注意事项:
  • 文件不要太长,CC默认会读这个文件
  • 会话为省事,说CLAUDE.md时CC也可以懂
  • 官方的’#'进文档据GPT说有个bug不稳定
  • 文件里适合放提醒事项

会话管理:避免失控,高效推进

1. 随时暂停与回滚

  • ESC暂停当前操作,思路跑偏、跑的慢
  • ESC两次可回退到历史对话节点(注意无redo功能,回退前确认)
  • 代码不满意?直说“会滚到上次代码”,Claude会自动恢复之前版本

2. 应对历史溢出

当会话提示"Context left until auto-compact: 3%",说明历史记录快满了。此时会自动触发压缩(约150秒),也可手动用/compact命令续命,避免对话中断。

3. 恢复与查看历史

  • claude -c直接进入上次对话
  • claude -r选择历史会话恢复,适合中途退出后继续工作

资源监控与批量任务:把控节奏不浪费

  1. 实时监控token用量
    想知道每天/每小时消耗多少资源?运行npx ccusage@latest查看按天用量,或npx ccusage blocks --live实时监控消耗速度。若速度过快,可手动处理git commit等token的操作,避免超额。
  2. 批量任务高效处理
    需要执行几十个重复任务用脚本式用法:
  • 把任务按行写入TASK.md(一行一个任务)
  • 运行命令:cat TASK.md | while IFS= read -r line; do echo $line; claude -p "$line" --debug; done可加timeout防止单个任务卡死,同时用--allowedTools "Edit"限制权限,避免意外操作。注意不要并发执行,否则可能触发限额封禁。

Claude Desktop配置CLIPROXYAPI

下面给你一套 macOS(Apple Silicon M3)+ Nginx + CLIProxyAPI + Claude Desktop 的完整可用方案。

目标:

1
Claude Desktop    ↓ HTTPShttps://claude.local    ↓ Nginxhttp://127.0.0.1:8317    ↓CLIProxyAPI

这是目前在 macOS 上最稳定的本地方案。


一、整体思路

Claude Desktop 不接受:

1
http://127.0.0.1:8317

它要求:

  • HTTPS
  • 有效证书
  • Anthropic Messages API 格式

所以:

1
CLIProxyAPI (HTTP)→ Nginx HTTPS→ Claude Desktop

二、安装 Homebrew(如果没装)

终端:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

M3 芯片默认路径:

1
/opt/homebrew

验证:

1
brew -v

三、安装 Nginx

1
brew install nginx

启动:

1
brew services start nginx

验证:

1
curl http://127.0.0.1:8080

如果看到:

1
Welcome to nginx!

说明成功。


四、安装 mkcert(本地 HTTPS 证书)

macOS 本地 HTTPS 最稳方案。‌mkcert‌ 是一个用于生成本地受信任 SSL/TLS 证书的开源工具,由 Filippo Valsorda 开发,支持跨平台(Windows、macOS、Linux)‌‌。Firefox ‌不使用系统根证书存储‌,而是使用自己的 NSS 证书数据库,nss是由 Mozilla 开发的一套安全库,广泛用于 Firefox 浏览器和其他应用中处理 SSL/TLS 加密‌‌。

安装:

1
brew install mkcertbrew install nss

初始化本地 CA:

1
mkcert -install

你会看到:

1
The local CA is now installed in the system trust store!

五、创建本地域名

编辑 hosts:

1
sudo nano /etc/hosts

添加:

1
127.0.0.1 claude.local

保存:

1
Control + OEnterControl + X

测试:

1
ping claude.local

应该解析:

1
127.0.0.1

六、生成 HTTPS 证书

创建目录:

1
mkdir -p ~/nginx-certscd ~/nginx-certs

生成:

1
mkcert claude.local

得到:

1
claude.local.pemclaude.local-key.pem

七、配置 Nginx

Homebrew Nginx 配置目录:

1
/opt/homebrew/etc/nginx/

编辑:

1
nano /opt/homebrew/etc/nginx/nginx.conf

删除原来的 server 部分。

加入:

1
events {}http {    server {        listen 443 ssl;        server_name claude.local;        ssl_certificate /Users/你的用户名/nginx-certs/claude.local.pem;        ssl_certificate_key /Users/你的用户名/nginx-certs/claude.local-key.pem;        location / {            proxy_pass http://127.0.0.1:8317;            proxy_http_version 1.1;            proxy_set_header Host $host;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_set_header X-Forwarded-Proto https;            proxy_buffering off;            proxy_read_timeout 3600s;            proxy_send_timeout 3600s;        }    }}

⚠️ 替换:

1
你的用户名

例如:

1
/Users/chauchyliu/nginx-certs/

八、检查 Nginx 配置

1
nginx -t

如果看到:

1
syntax is oktest is successful

重启:

1
brew services restart nginx

九、测试 HTTPS

浏览器打开:

1
https://claude.local

应该:

  • 没有证书错误
  • 能看到 CLIProxyAPI 返回

或者:

1
curl https://claude.local/v1/models

如果是自签本地证书但已 trust,不需要 -k


十、启动 CLIProxyAPI

例如:

1
cliproxyapi

或者:

1
python main.py

确认:

1
curl http://127.0.0.1:8317/v1/models

正常返回模型列表。


十一、配置 Claude Desktop

开启开发模式:

1
Help→ Troubleshooting→ Enable Developer Mode

重启 Claude Desktop。

然后:

1
Developer→ Configure Third-Party Inference

填写:

项目 内容
Gateway URL https://claude.local
API Key CLIProxyAPI key
Auth Scheme Bearer

⚠️ 注意:

不要写:

1
https://claude.local/v1

只写:

1
https://claude.local

十二、验证是否成功

Claude Desktop 输入:

1
你好,请告诉我你当前的模型名称

如果走通:

  • 会由 CLIProxyAPI 转发
  • Claude Desktop 不再使用官方 API

十三、排错(macOS 最常见)

1. 443 被占用

查看:

1
sudo lsof -i :443

如果是 AirPlay:

1
系统设置→ 通用→ AirDrop 与接力→ 关闭 AirPlay Receiver

2. nginx: permission denied

macOS 有时限制 443。

解决:

1
sudo brew services restart nginx

或者改成:

1
listen 8443 ssl;

然后:

1
https://claude.local:8443

3. Claude Desktop 不信任证书

重新:

1
mkcert -install

然后重启 Claude Desktop。


4. Claude Desktop 仍报 API 错误

先测试:

1
curl https://claude.local/v1/messages \  -H "Authorization: Bearer sk-xxx" \  -H "anthropic-version: 2023-06-01" \  -H "content-type: application/json" \  -d '{    "model":"claude-sonnet-4-5",    "max_tokens":100,    "messages":[{"role":"user","content":"hi"}]  }'

如果 curl 不通:

不是 Claude Desktop 的问题。


十四、推荐的最终结构(最稳)

推荐:

1
Claude Desktop    ↓Nginx HTTPS    ↓CLIProxyAPI    ↓Claude Code OAuth

这是目前 macOS M 系列最稳定的本地 Gateway 方案。

不使用系统nginx

可以,macOS 上非常推荐你使用“用户级 Nginx”,不要用:

1
brew services start nginx

因为:

  • 会注册系统 LaunchAgent
  • 容易遇到 443 权限
  • 会和系统 AirPlay 冲突
  • 配置目录容易混乱
  • Claude Desktop 调试不方便

推荐方式:

1
用户目录运行 nginx→ 非 root→ 自定义配置→ 自定义端口→ 完全独立

这是 M3/macOS 上最干净的方案。


一、推荐目录结构

建议:

1
~/workspace/nginx/├── conf/│   └── nginx.conf├── logs/├── certs/└── run/

创建:

1
mkdir -p ~/workspace/nginx/{conf,logs,certs,run}

四、创建用户自己的 nginx.conf

创建:

1
nano ~/workspace/nginx/conf/nginx.conf

完整内容:

1
worker_processes  1;events {    worker_connections 1024;}http {    include       mime.types;    default_type  application/octet-stream;    sendfile on;    keepalive_timeout 65;    access_log /Users/你的用户名/workspace/nginx/logs/access.log;    error_log  /Users/你的用户名/workspace/nginx/logs/error.log;    server {        listen 8443 ssl;        server_name claude.local;        ssl_certificate     /Users/你的用户名/workspace/nginx/certs/claude.local.pem;        ssl_certificate_key /Users/你的用户名/workspace/nginx/certs/claude.local-key.pem;        ssl_protocols TLSv1.2 TLSv1.3;        location / {            proxy_pass http://127.0.0.1:8317;            proxy_http_version 1.1;            proxy_set_header Host $host;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_set_header X-Forwarded-Proto https;            proxy_buffering off;            proxy_read_timeout 3600s;            proxy_send_timeout 3600s;        }    }}

⚠️ 替换:

1
你的用户名

例如:

1
/Users/chauchyliu/

五、解决 mime.types 问题

Homebrew nginx 的 mime.types 在:

1
/opt/homebrew/etc/nginx/mime.types

所以修改:

1
include mime.types;

改成:

1
include /opt/homebrew/etc/nginx/mime.types;

最终:

1
include /opt/homebrew/etc/nginx/mime.types;

六、启动用户自己的 nginx

不要用 system service。

直接:

1
/opt/homebrew/bin/nginx \  -p ~/workspace/nginx \  -c conf/nginx.conf

参数解释:

参数 作用
-p nginx 工作目录
-c 指定配置

七、验证 nginx

查看:

1
ps aux | grep nginx

测试:

1
curl https://claude.local:8443/v1/models

如果证书已经 trust:

  • 不需要 -k

应该返回 CLIProxyAPI 模型列表。


八、Claude Desktop 配置

填写:

1
Gateway URL:https://claude.local:8443

⚠️ 注意:

因为我们不是 443:

必须写端口。


九、停止 nginx

1
/opt/homebrew/bin/nginx \  -p ~/workspace/nginx \  -c conf/nginx.conf \  -s stop

十、重载配置

修改配置后:

1
/opt/homebrew/bin/nginx \  -p ~/workspace/nginx \  -c conf/nginx.conf \  -s reload

十一、查看日志

访问日志:

1
tail -f ~/workspace/nginx/logs/access.log

错误日志:

1
tail -f ~/workspace/nginx/logs/error.log

Claude Desktop 连不上时非常有用。


十二、推荐的最终结构(M3 最稳)

推荐:

1
Claude Desktop    ↓ HTTPS :8443用户级 nginx    ↓ HTTPCLIProxyAPI :8317    ↓Claude Code OAuth

优点:

  • 不需要 root
  • 不污染系统 nginx
  • 不占用 443
  • 不和 AirPlay 冲突
  • 可以多个代理共存
  • Claude Desktop 最稳定
  • macOS M3 最推荐方案

这是现在 Apple Silicon 上最干净的本地反代结构。

curl https://claude.local:8443/v1/models ─╯ curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to claude.local:8443

已思考若干秒

这个错误通常表示:8443 端口有进程在监听,但它没有正常提供 TLS/HTTPS,或者 Nginx 没有按 SSL 配置启动。

按下面顺序排查。

1. 先看 8443 到底是谁在监听

1
lsof -nP -iTCP:8443 -sTCP:LISTEN

如果不是 nginx,先停掉那个进程。


2. 检查 Nginx 配置是否真的启用了 ssl

执行:

1
/opt/homebrew/bin/nginx \  -p ~/workspace/nginx \  -c conf/nginx.conf \  -t

如果报错,把错误贴出来。

你的 server 必须类似这样:

1
server {    listen 8443 ssl;    server_name claude.local;    ssl_certificate     /Users/你的用户名/workspace/nginx/certs/claude.local.pem;    ssl_certificate_key /Users/你的用户名/workspace/nginx/certs/claude.local-key.pem;    location / {        proxy_pass http://127.0.0.1:8317;        proxy_http_version 1.1;        proxy_set_header Host $host;        proxy_set_header X-Forwarded-Proto https;        proxy_buffering off;    }}

重点是这一行必须有 ssl

1
listen 8443 ssl;

3. 重启用户级 Nginx

1
/opt/homebrew/bin/nginx \  -p ~/workspace/nginx \  -c conf/nginx.conf \  -s stop

如果提示没有运行,没关系。

重新启动:

1
/opt/homebrew/bin/nginx \  -p ~/workspace/nginx \  -c conf/nginx.conf

4. 看错误日志

1
cat ~/workspace/nginx/logs/error.log

如果有类似:

1
cannot load certificatepermission deniedBIO_new_file failed

说明证书路径或权限不对。


5. 先用 OpenSSL 测 TLS

1
openssl s_client -connect claude.local:8443 -servername claude.local

正常的话会看到证书信息。

如果还是立刻断开,说明 Nginx 没有正确提供 HTTPS。


6. 确认 CLIProxyAPI 本身正常

1
curl http://127.0.0.1:8317/v1/models

如果这个也不通,先启动 CLIProxyAPI。


7. 最常见修复版 nginx.conf

把你的配置先替换成这个,记得改用户名:

1
worker_processes 1;events {    worker_connections 1024;}http {    include /opt/homebrew/etc/nginx/mime.types;    default_type application/octet-stream;    access_log /Users/你的用户名/workspace/nginx/logs/access.log;    error_log  /Users/你的用户名/workspace/nginx/logs/error.log debug;    server {        listen 8443 ssl;        server_name claude.local;        ssl_certificate     /Users/你的用户名/workspace/nginx/certs/claude.local.pem;        ssl_certificate_key /Users/你的用户名/workspace/nginx/certs/claude.local-key.pem;        ssl_protocols TLSv1.2 TLSv1.3;        location / {            proxy_pass http://127.0.0.1:8317;            proxy_http_version 1.1;            proxy_set_header Host $host;            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_set_header X-Forwarded-Proto https;            proxy_buffering off;            proxy_read_timeout 3600s;            proxy_send_timeout 3600s;        }    }}

然后:

1
/opt/homebrew/bin/nginx -p ~/workspace/nginx -c conf/nginx.conf -t/opt/homebrew/bin/nginx -p ~/workspace/nginx -c conf/nginx.conf -s stop/opt/homebrew/bin/nginx -p ~/workspace/nginx -c conf/nginx.confcurl -v https://claude.local:8443/v1/models

最可能的问题是:listen 8443; 少了 ssl,或者 Nginx 实际加载的不是你改的那个配置文件。

curl -vk https://claude.local:8443/v1/models \ -H “Authorization: Bearer sk-local-cpa” * Uses proxy env variable https_proxy == ‘http://127.0.0.1:7890’ * Trying 127.0.0.1:7890… * Connected to 127.0.0.1 (127.0.0.1) port 7890 * CONNECT tunnel: HTTP/1.1 negotiated * allocate connect buffer * Establish HTTP proxy tunnel to claude.local:8443 > CONNECT claude.local:8443 HTTP/1.1 > Host: claude.local:8443 > User-Agent: curl/8.5.0 > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 Connection established < * CONNECT phase completed * CONNECT tunnel established, response 200 * ALPN: curl offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to claude.local:8443 * Closing connection curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to claude.local:8443

问题找到了:你的 curl 走了代理。

关键日志:

1
Uses proxy env variable https_proxy == 'http://127.0.0.1:7890'CONNECT claude.local:8443

它没有直连本机 Nginx,而是先走了 127.0.0.1:7890 代理,所以 TLS 被代理干扰了。

直接绕过代理测试

执行:

1
curl --noproxy '*' -vk https://claude.local:8443/v1/models \  -H "Authorization: Bearer sk-local-cpa"

或者:

1
NO_PROXY=claude.local,127.0.0.1,localhost curl -vk https://claude.local:8443/v1/models \  -H "Authorization: Bearer sk-local-cpa"

永久修复

在你的 shell 配置里加入:

1
export NO_PROXY="localhost,127.0.0.1,::1,claude.local"export no_proxy="localhost,127.0.0.1,::1,claude.local"

如果你用 zsh:

1
nano ~/.zshrc

加入后:

1
source ~/.zshrc

再测试

1
curl --noproxy '*' -vk https://claude.local:8443/v1/models \  -H "Authorization: Bearer sk-local-cpa"

这次应该会直接连:

1
Trying 127.0.0.1:8443

而不是:

1
Trying 127.0.0.1:7890

我需要用代理怎么半

你这种场景应该:

1
外网请求走代理本地 localhost / claude.local 不走代理

这是标准做法。

你不能让:

1
https://claude.local:8443

也走 Clash/Surge/V2Ray 代理,否则:

  • CONNECT tunnel
  • 自签 TLS
  • 本地域名
  • mkcert CA

会全部冲突。

正确方案:配置 NO_PROXY

保留:

1
https_proxy=http://127.0.0.1:7890

同时增加:

1
export NO_PROXY="localhost,127.0.0.1,::1,claude.local"export no_proxy="localhost,127.0.0.1,::1,claude.local"

macOS(zsh)永久配置

编辑:

1
nano ~/.zshrc

加入:

1
export https_proxy=http://127.0.0.1:7890export http_proxy=http://127.0.0.1:7890export NO_PROXY="localhost,127.0.0.1,::1,claude.local"export no_proxy="localhost,127.0.0.1,::1,claude.local"

生效:

1
source ~/.zshrc

验证是否成功

执行:

1
env | grep -i proxy

应该看到:

1
https_proxy=http://127.0.0.1:7890NO_PROXY=localhost,127.0.0.1,::1,claude.local

再测试

1
curl -vk https://claude.local:8443/v1/models \  -H "Authorization: Bearer sk-local-cpa"

这次应该:

1
Trying 127.0.0.1:8443

而不是:

1
Trying 127.0.0.1:7890

如果你用 Clash Verge / Mihomo / Surge

更推荐:

在代理软件里增加直连规则

例如 Clash:

1
rules:  - DOMAIN,claude.local,DIRECT  - DOMAIN-SUFFIX,local,DIRECT  - IP-CIDR,127.0.0.0/8,DIRECT

或者 Surge:

1
[Rule]DOMAIN,claude.local,DIRECTIP-CIDR,127.0.0.0/8,DIRECT

这是最稳的。

为什么必须这样

因为:

1
claude.local → 本机 nginx → 本机 CLIProxyAPI

本来是:

1
本机回环通信

你现在却:

1
先发给代理代理再 CONNECT 回本机

TLS 会非常容易炸。

Claude Desktop 后续也一样

Claude Desktop 本身:

  • 可以继续全局走代理
  • claude.local 必须 DIRECT

否则:

1
Third-Party Gateway

也会 TLS 握手失败。

如果你用 Clash Verge / Mihomo

打开配置 YAML。

增加规则:

1
2
3
4
rules:  
- DOMAIN,claude.local,DIRECT
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT

放在:

1
MATCH

之前。

例如:

1
2
3
4
5
rules:
- DOMAIN,claude.local,DIRECT
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- MATCH,Proxy

然后:

1
Reload Profile

最推荐结构(你现在应该这样)

1
Claude Desktop    ↓(系统代理)Clash/Surge    ↓ rulesclaude.local → DIRECT其它域名 → Proxy

这样:

1
Claude Desktop → claude.local

会:

1
直连本机 nginx

而:

1
Claude 官方服务GitHubOAuth

继续走代理。

这是目前 macOS 上最稳的方式。

Your provider setup needs a fix Some required fields are missing or malformed. Open Setup to finish configuring it. Details message: Invalid custom3p enterprise config: inferenceModels: configured model “gpt-5.5” is not an Anthropic model. Gateway deployments require an Anthropic model from the provider catalog — expected a gateway model route referencing an Anthropic model (e.g. claude-sonnet-4-5, anthropic/claude-*). Name routes to match the underlying model. failingField: inferenceModels checkedAt: 2026-05-12T09:08:09.815Z

这个报错说明:Claude Desktop Gateway 只能配置 Anthropic 模型名,不能填:

1
gpt-5.5

它要求模型名像:

1
claude-sonnet-4-5anthropic/claude-*

所以你要做的是:把 CLIProxyAPI 里的路由名伪装成 Anthropic 模型名

你应该在 Claude Desktop 填

不要填:

1
gpt-5.5

改成:

1
claude-sonnet-4-5

或:

1
anthropic/claude-sonnet-4-5

但 CLIProxyAPI 也必须认识这个名字

你现在 CLIProxyAPI 报过:

1
unknown provider for model claude-gpt5.5

所以需要在 CLIProxyAPI 配置里加模型别名,例如:

1
model_aliases:  claude-sonnet-4-5: gpt-5.5

或者类似格式,取决于 CLIProxyAPI 的配置项名称。

核心目标是:

1
Claude Desktop 发送:claude-sonnet-4-5CLIProxyAPI 内部转到:gpt-5.5

最终链路

1
Claude Desktop  model: claude-sonnet-4-5      ↓Nginx      ↓CLIProxyAPI  alias claude-sonnet-4-5 → gpt-5.5

先临时测试

你可以直接 curl:

1
curl --noproxy '*' -k https://claude.local:8443/v1/messages \  -H "Authorization: Bearer sk-local-cpa" \  -H "Content-Type: application/json" \  -d '{    "model": "claude-sonnet-4-5",    "max_tokens": 100,    "messages": [      {"role": "user", "content": "hi"}    ]  }'

如果还是:

1
unknown provider for model claude-sonnet-4-5

就说明 CLIProxyAPI 没有这个别名,需要加 alias。

重点结论

Claude Desktop 这一层:

1
必须填 Anthropic 风格模型名

CLIProxyAPI 这一层:

1
必须把这个 Anthropic 风格模型名映射到真实后端模型

否则 Claude Desktop 配置检查永远不会通过。

我想用下面的api-key, 这个key和其他key的区别是什么,claude会调哪一个 api-keys: #本地客户端访问 CLIProxyAPI 时要带的 Key - “sk-local-cpa”

你这里的:

1
2
api-keys:
- "sk-local-cpa"

不是上游模型厂商的 Key。

它只是:

1
CLIProxyAPI 自己的本地鉴权 Key

也就是:

1
谁可以访问你的 CLIProxyAPI

它的作用

当你请求:

1
http://127.0.0.1:8317

或者:

1
https://claude.local:8443

时必须带:

1
Authorization: Bearer sk-local-cpa

否则:

1
{"error":"Missing API key"}

它和真正模型 Key 的区别

你配置里通常会同时存在:

1. 本地访问 Key(你现在这个)

1
2
api-keys:
- "sk-local-cpa"

作用:

1
保护 CLIProxyAPI

客户端:

  • Claude Desktop
  • curl
  • OpenWebUI
  • Cherry Studio

访问时用它。


2. 上游 Provider Key(真正花钱的)

例如:

1
2
openai-api-key:
- api-key: "sk-openai-xxxxx"

或者:

1
2
anthropic-api-key:
- api-key: "sk-ant-xxxxx"

或者:

1
2
openrouter-api-key:
- api-key: "sk-or-xxxxx"

作用:

1
CLIProxyAPI 调 OpenAI / Anthropic / Gemini 时使用

真正扣费的是这些。


Claude Desktop 实际会调哪一个

Claude Desktop:

1
只知道 sk-local-cpa

流程:

1
Claude Desktop    ↓ Authorization: Bearer sk-local-cpaCLIProxyAPI    ↓ 根据 model alias选择 provider    ↓使用真正 provider api-key

例如:

1
2
3
4
5
openai-api-key:
- api-key: "sk-openai-real"
models:
- name: "gpt-5.5"
alias: "claude-sonnet-4-5"

那么:

1
Claude Desktop  model=claude-sonnet-4-5  key=sk-local-cpa

CLIProxyAPI 会:

1
自动转成:OpenAImodel=gpt-5.5  key=sk-openai-real

你可以理解成

sk-local-cpa

是:

1
你家大门钥匙

sk-openai-real

是:

1
CLIProxyAPI 去 OpenAI 付款的银行卡

Claude Desktop 不会直接接触真正 OpenAI Key

它永远只看到:

1
sk-local-cpa

这也是 CLIProxyAPI 的核心价值:

1
统一代理统一鉴权统一路由隐藏真实 provider key

最终完整结构

1
2
3
4
5
6
7
8
9
10
Claude Desktop
key: sk-local-cpa
model: claude-sonnet-4-5

CLIProxyAPI
↓alias
gpt-5.5

OpenAI API
key: sk-openai-real

你的最终目标配置

你应该:

Claude Desktop

填:

1
2
3
4
API Key:
sk-local-cpa
Model:
claude-sonnet-4-5

CLIProxyAPI

配置:

1
2
3
4
5
6
7
api-keys:
- "sk-local-cpa"
openai-api-key:
- api-key: "sk-openai-real"
models:
- name: "gpt-5.5"
alias: "claude-sonnet-4-5"

这样就完整打通了。

我想使用OAuth 登录以订阅的方式请求供应商而不是通过供应商的api-key访问模型,我应该如何配置使claude多个模型匹配订阅的多个模型

我会基于你上传的 CLIProxyAPI 配置结构来讲:本地访问 Key、OAuth/订阅凭据、模型 alias 三者怎么配合,以及 Claude Desktop 最终会命中哪个订阅模型。

已思考 11s

可以。你这个配置文档里对应的是 OAuth 模型别名,不是 api-key 模型别名。

关键段落是:

1
2
3
4
5
6
7
oauth-model-alias:
claude:
codex:
gemini-cli:
aistudio:
antigravity:
kimi:

你要用订阅/OAuth,不用供应商 API key

那就不要配:

1
2
3
openai-api-key:
claude-api-key:
gemini-api-key:

而是用已经 OAuth 登录保存到:

1
auth-dir: "~/.cli-proxy-api"

里的登录态。

api-keys 仍然要保留:

1
2
api-keys:
- "sk-local-cpa"

它只是 Claude Desktop 访问你本地 CLIProxyAPI 的口令,不是供应商 key。

多个 Claude 模型 alias 到订阅模型

例如你想让 Claude Desktop 看到 Anthropic 风格模型名:

1
2
3
claude-sonnet-4-5
claude-opus-4-5
claude-haiku-4-5

但实际走 Codex OAuth 订阅里的多个 GPT 模型,可以这样:

1
2
3
4
5
6
7
8
9
10
11
oauth-model-alias:
codex:
- name: "gpt-5"
alias: "claude-sonnet-4-5"
fork: true
- name: "gpt-5-high"
alias: "claude-opus-4-5"
fork: true
- name: "gpt-5-mini"
alias: "claude-haiku-4-5"
fork: true

含义:

1
2
3
Claude Desktop 请求 claude-sonnet-4-5 → CLIProxyAPI 实际路由到 codex OAuth 的 gpt-5
Claude Desktop 请求 claude-opus-4-5 → CLIProxyAPI 实际路由到 codex OAuth 的 gpt-5-high
Claude Desktop 请求 claude-haiku-4-5 → CLIProxyAPI 实际路由到 codex OAuth 的 gpt-5-mini

如果你是 Claude OAuth 订阅

那写在 claude: 下:

1
2
3
4
5
6
7
8
9
10
11
oauth-model-alias:
claude:
- name: "claude-sonnet-4-5-20250929"
alias: "claude-sonnet-4-5"
fork: true
- name: "claude-opus-4-5-20251101"
alias: "claude-opus-4-5"
fork: true
- name: "claude-haiku-4-5-20251001"
alias: "claude-haiku-4-5"
fork: true

如果你是 Gemini CLI / AI Studio OAuth

1
2
3
4
5
6
7
8
9
10
11
oauth-model-alias:
gemini-cli:
- name: "gemini-2.5-pro"
alias: "claude-sonnet-4-5"
fork: true
- name: "gemini-3-pro-preview"
alias: "claude-opus-4-5"
fork: true
- name: "gemini-2.5-flash"
alias: "claude-haiku-4-5"
fork: true

配完后重启 CLIProxyAPI

1
pkill -f cli-proxy-api

然后重新启动。

验证:

1
curl --noproxy '*' http://127.0.0.1:8317/v1/models \  -H "Authorization: Bearer sk-local-cpa"

你应该能看到:

1
2
3
claude-sonnet-4-5
claude-opus-4-5
claude-haiku-4-5

最后 Claude Desktop 里填:

1
2
3
Gateway URL: https://claude.local:8443
API Key: sk-local-cpa
Model: claude-sonnet-4-5

不要再填 gpt-5.5