3020 字
15 分钟
CLIProxyAPI 完整配置指南:从入门到实战

CLIProxyAPI 完整配置指南:从入门到实战#

说实话,第一次看到这个工具的时候,我有点懵。它到底能解决什么问题?后来折腾了一阵子才明白——CLIProxyAPI 是个挺有意思的中间层,专门用来打通各种 AI 编程助手的 OAuth 订阅和 OpenAI 兼容的 API 格式。

简单讲,如果你手上有 Gemini CLI、Claude Code、OpenAI Codex 或者 Qwen Code 的订阅,但想把这些模型接到 Cursor、Cline、Roo Code 这类支持 OpenAI API 格式的工具里用,CLIProxyAPI 就是干这个的。它把 OAuth 那套登录流程封装起来,对外暴露标准的 /v1/chat/completions 接口,让你不用管背后到底是哪个提供商在响应。

这篇文章把我实际用过的配置完整贴出来,逐段解释每个字段是干嘛的,顺便说说踩过的坑。

完整配置分享#

以下是一份生产环境真实使用的配置,敏感信息已脱敏处理(用 xxx 或占位符替换):

# 基础服务配置
port: 8317
tls:
enable: false
cert: /root/.acme.sh/xxx.com_ecc/xxx.com.cer
key: /root/.acme.sh/xxx.com_ecc/xxx.com.key
# 远程管理面板配置
remote-management:
allow-remote: true
secret-key: xxx
disable-control-panel: false
panel-github-repository: https://github.com/kongkongyo/Cli-Proxy-API-Management-Center
# 认证文件存放目录
auth-dir: /root/cliproxyapi/auth
# API 访问密钥列表
api-keys:
- sk-xxx-key-1
- sk-xxx-key-2
- sk-xxx-key-3
- sk-xxx-key-4
- sk-xxx-key-5
- sk-xxx-key-6
- sk-xxx-key-7
- sk-xxx-key-8
- sk-xxx-key-9
- sk-xxx-key-10
- sk-xxx-key-11
# 调试与日志配置
debug: true
commercial-mode: false
logging-to-file: true
logs-max-total-size-mb: 10
usage-statistics-enabled: true
# 请求路由与重试配置
force-model-prefix: false
request-retry: 3
max-retry-interval: 20
# 配额超限处理策略
quota-exceeded:
switch-project: true
switch-preview-model: true
# 负载均衡策略
routing:
strategy: round-robin
# WebSocket 认证开关
ws-auth: true
# 非流式请求保活间隔
nonstream-keepalive-interval: 15
# 流式响应配置
streaming:
keepalive-seconds: 15
bootstrap-retries: 2
# Codex 指令功能开关
codex-instructions-enabled: false
# OAuth 模型别名映射
oauth-model-alias:
antigravity:
- 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: gpt-oss-120b-medium
alias: gpt-oss-120b
qwen:
- name: vision-model
alias: qwen3-vision-model
- name: coder-model
alias: qwen3.5-plus
github-copilot:
- name: claude-haiku-4.5
alias: claude-haiku-4-5
- name: claude-opus-4.1
alias: claude-opus-4-1
- name: claude-opus-4.5
alias: claude-opus-4-5
- name: claude-opus-4.6
alias: claude-opus-4-6
- name: claude-sonnet-4.5
alias: claude-sonnet-4-5
- name: claude-sonnet-4.6
alias: claude-sonnet-4-6
kiro:
- name: kiro-claude-sonnet-4-5
alias: claude-sonnet-4-5
- name: kiro-claude-sonnet-4
alias: claude-sonnet-4
- name: kiro-claude-opus-4-6
alias: claude-opus-4-6
- name: kiro-claude-opus-4-5
alias: claude-opus-4-5
- name: kiro-claude-haiku-4-5
alias: claude-haiku-4-5
- name: kiro-gpt-4o
alias: gpt-4o
- name: kiro-gpt-3-5-turbo
alias: gpt-3.5-turbo
- name: kiro-gpt-4
alias: gpt-4
- name: kiro-gpt-4-turbo
alias: gpt-4-turbo
- name: kiro-qwen3-coder-next
alias: qwen3-coder-next
- name: kiro-deepseek-3-2
alias: deepseek-v3.2
- name: kiro-minimax-m2-1
alias: minimax-m2.1
- name: kiro-claude-sonnet-4-6
alias: claude-sonnet-4-6
# 错误日志文件数量限制
error-logs-max-files: 10
# pprof 性能分析配置
pprof:
enable: false
addr: 127.0.0.1:8316
# OpenAI 兼容的第三方提供商配置
openai-compatibility:
# 智谱 AI (BigModel)
- name: bigmodel
base-url: https://open.bigmodel.cn/api/paas/v4
api-key-entries:
- api-key: xxx
proxy-url: socks5://127.0.0.1:40000
models:
- name: GLM-4.7-Flash
alias: glm-4.7-flash
- name: GLM-4.6V-Flash
alias: glm-4.6v-flash
- name: GLM-Z1-Flash
alias: glm-z1-flash
- name: GLM-4.1V-Thinking-Flash
alias: glm-4.1v-thinking-flash
headers:
Content-Type: application/json
Accept: "*/*"
Accept-Encoding: "gzip, br"
User-Agent: "opencode/1.2.25 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
# OpenRouter 聚合平台
- name: openrouter
base-url: https://openrouter.ai/api/v1
api-key-entries:
- api-key: sk-or-v1-xxx
proxy-url: socks5://127.0.0.1:40000
- api-key: sk-or-v1-xxx
proxy-url: socks5://127.0.0.1:40000
- api-key: sk-or-v1-xxx
proxy-url: socks5://127.0.0.1:40000
models:
- name: arcee-ai/trinity-large-preview:free
alias: trinity-large-preview
- name: openai/gpt-oss-120b:free
alias: gpt-oss-120b
- name: openai/gpt-oss-20b:free
alias: gpt-oss-20b
- name: z-ai/glm-4.5-air:free
alias: glm-4.5-air
- name: stepfun/step-3.5-flash:free
alias: step-3.5-flash
headers:
Content-Type: application/json
Accept: "*/*"
Accept-Encoding: "gzip, br"
User-Agent: "opencode/1.2.25 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
# NVIDIA NIM 平台
- name: nvidia
base-url: https://integrate.api.nvidia.com/v1
api-key-entries:
- api-key: nvapi-xxx
proxy-url: socks5://127.0.0.1:40000
- api-key: nvapi-xxx
proxy-url: socks5://127.0.0.1:40000
- api-key: nvapi-xxx
proxy-url: socks5://127.0.0.1:40000
models:
- name: openai/gpt-oss-120b
alias: gpt-oss-120b
- name: openai/gpt-oss-20b
alias: gpt-oss-20b
- name: minimaxai/minimax-m2.5
alias: minimax-m2.5
- name: moonshotai/kimi-k2-instruct
alias: kimi-k2-instruct
- name: moonshotai/kimi-k2-instruct-0905
alias: kimi-k2-instruct-0905
- name: moonshotai/kimi-k2-thinking
alias: kimi-k2-thinking
- name: moonshotai/kimi-k2.5
alias: "kimi-k2.5"
- name: qwen/qwen3-next-80b-a3b-instruct
alias: qwen3-next-80b-a3b-instruct
- name: qwen/qwen3.5-397b-a17b
alias: qwen3.5-397b-a17b
- name: stepfun-ai/step-3.5-flash
alias: step-3.5-flash
- name: z-ai/glm4.7
alias: glm-4.7
- name: z-ai/glm5
alias: glm-5
headers:
Content-Type: application/json
Accept: "*/*"
Accept-Encoding: "gzip, br"
User-Agent: "opencode/1.2.25 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
# 本地 DS2API 服务
- name: ds2api
base-url: http://127.0.0.1:5001/v1
api-key-entries:
- api-key: xxx
models:
- name: deepseek-chat
alias: ""
- name: deepseek-reasoner
alias: ""
- name: deepseek-chat-search
alias: ""
- name: deepseek-reasoner-search
alias: ""
headers:
Content-Type: application/json
Accept: "*/*"
Accept-Encoding: "gzip, br"
User-Agent: "opencode/1.2.25 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
# 阿里云灵积平台
- name: aliyun
base-url: https://coding.dashscope.aliyuncs.com/v1
api-key-entries:
- api-key: sk-xxx
models:
- name: qwen3.5-plus
alias: ""
- name: qwen3-max-2026-01-23
alias: ""
- name: qwen3-coder-next
alias: ""
- name: qwen3-coder-plus
alias: ""
- name: glm-5
alias: ""
- name: glm-4.7
alias: ""
- name: kimi-k2.5
alias: ""
- name: MiniMax-M2.5
alias: minimax-m2.5
headers:
Content-Type: application/json
Accept: "*/*"
Accept-Encoding: "gzip, br"
User-Agent: "opencode/1.2.25 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
priority: 1
# 月之暗面 Kimi
- name: kimi
base-url: https://api.kimi.com/coding/v1
api-key-entries:
- api-key: sk-xxx
models:
- name: kimi-k2.5
alias: ""
- name: kimi-k2-thinking
alias: ""
- name: kimi-k2
alias: ""
- name: kimi-for-coding
alias: ""
headers:
Content-Type: application/json
Accept: "*/*"
Accept-Encoding: "gzip, br"
User-Agent: "RooCode/3.51.1"
HTTP-Referer: "https://github.com/RooVetGit/Roo-Cline"
X-Title: "Roo Code"
priority: 2
# OAuth 模型排除列表
oauth-excluded-models:
antigravity:
- tab_flash_lite_preview
- tab_jump_flash_lite_preview
kiro:
- kiro-auto
- kiro-claude-opus-4-6-agentic
- kiro-claude-opus-4-5-agentic
- kiro-claude-sonnet-4-5-agentic
- kiro-claude-sonnet-4-agentic
- kiro-claude-haiku-4-5-agentic
- kiro-claude-sonnet-4-6-agentic
gemini-cli:
- gemini-2.5-flash-lite
- gemini-2.5-flash
- gemini-2.5-pro
- gemini-3-pro-preview
codex:
- gpt-5
- gpt-5-codex
- gpt-5-codex-mini
- gpt-5.1
- gpt-5.1-codex
- gpt-5.1-codex-mini
- gpt-5.1-codex-max
- gpt-5.2-codex
- gpt-5.2
# Gemini API 密钥直连配置(用于本地转发)
gemini-api-key:
- api-key: xxx
base-url: http://localhost:8741
headers:
Content-Type: application/json
Accept: "*/*"
Accept-Encoding: "gzip, br"
User-Agent: "opencode/1.2.25 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
models:
- name: opus-4.6
alias: claude-opus-4-6
- name: sonnet-4.6
alias: claude-sonnet-4-6
- name: gemini-3-flash
alias: gemini-3-flash-preview
- name: gemini-3.1-pro-high
alias: gemini-3.1-pro-preview
- name: gemini-3.1-pro-high
alias: gemini-3-pro-preview
- name: gemini-3-pro-image
alias: gemini-3-pro-image-preview
excluded-models:
- '*'
# Claude/Codex API 密钥配置(当前为空)
claude-api-key: []
proxy-url: ""
codex-api-key: []

配置详解#

接下来逐段解释这个配置文件里每个部分的作用。

基础服务配置#

port: 8317
tls:
enable: false
cert: /root/.acme.sh/xxx.com_ecc/xxx.com.cer
key: /root/.acme.sh/xxx.com_ecc/xxx.com.key

port: 服务监听的端口,默认是 8317。如果你在同一台机器上跑多个实例,记得改端口避免冲突。

tls: HTTPS 配置。生产环境建议前面架一层 Nginx 或 Caddy 做 TLS 终结,后端保持 HTTP 就行。直接让 CLIProxyAPI 处理 TLS 也可以,但证书路径要写对。

注意这里没有 host 字段,默认会监听所有网卡。如果是本地测试,建议显式写成 host: 127.0.0.1 防止外部访问。

远程管理面板#

remote-management:
allow-remote: true
secret-key: xxx
disable-control-panel: false
panel-github-repository: https://github.com/kongkongyo/Cli-Proxy-API-Management-Center

CLIProxyAPI 内置了一个 Web 管理面板,用来查看 OAuth 登录状态、模型列表、用量统计等。

  • allow-remote: 是否允许远程访问管理面板。生产环境建议设为 false,只让本机访问。
  • secret-key: 登录管理面板的密码,强烈建议用环境变量注入,别直接写在配置文件里。
  • panel-github-repository: 自定义管理面板的前端仓库地址,可以用社区开发的面板替代默认界面。

根据官方文档,管理面板默认走 http://localhost:8317/panel 路径。

API 密钥管理#

api-keys:
- sk-xxx-key-1
- sk-xxx-key-2
...

这是客户端调用 API 时需要携带的密钥列表。CLIProxyAPI 支持多密钥,可以实现简单的权限隔离:

  • 给不同团队分配不同的 key
  • 给 CI/CD 流水线单独一个 key,方便监控用量
  • 某个 key 泄露了,直接从列表里删掉就行

安全建议:用环境变量注入,比如 - "${API_KEY_DEV}",避免密钥硬编码到配置文件里提交到 Git。

调试与日志#

debug: true
logging-to-file: true
logs-max-total-size-mb: 10
usage-statistics-enabled: true
  • debug: 开启后会输出详细的请求/响应日志,排查问题时很有用,但生产环境建议关掉,否则日志量太大。
  • logging-to-file: 日志写入文件,默认路径是 ~/.cli-proxy-api/proxy.log
  • logs-max-total-size-mb: 日志文件总大小限制,超过会自动清理。
  • usage-statistics-enabled: 开启用量统计,可以在管理面板看到每个 API key 的调用次数。

请求重试与配额处理#

request-retry: 3
max-retry-interval: 20
quota-exceeded:
switch-project: true
switch-preview-model: true

这套配置是 CLIProxyAPI 的核心优势之一——自动故障转移

  • request-retry: 请求失败后的重试次数。设为 3 表示最多重试 3 次。
  • max-retry-interval: 重试间隔上限(秒),防止疯狂重试被服务商风控。
  • quota-exceeded: 配额超限后的处理策略:
    • switch-project: 自动切换到同一账号下的其他项目(如果有的话)
    • switch-preview-model: 自动降级到 preview 版本的模型

实际使用中,当 Google Antigravity 或 Claude 的额度用完时,这个机制能自动找备用渠道,不用人工介入。

负载均衡策略#

routing:
strategy: round-robin

目前支持两种策略:

  • round-robin: 轮询,请求均匀分布到多个账号
  • fill-first: 优先填满第一个账号的额度,再用第二个

多账号场景下,round-robin 适合均匀分配压力;fill-first 适合把主账号额度用光再切备用账号。

流式响应保活#

streaming:
keepalive-seconds: 15
bootstrap-retries: 2

流式响应(SSE)容易遇到网关超时的问题,特别是 Cloudflare 这类 CDN 默认 100 秒无数据就断连。

  • keepalive-seconds: 每隔多少秒发送一个空行保活,防止连接被切断。
  • bootstrap-retries: 首字节返回前的重试次数,避免模型加载慢导致客户端超时。

如果你的服务架在 Cloudflare 后面,这个配置必须开,否则长回复会中断。

OAuth 模型别名#

oauth-model-alias:
antigravity:
- name: gemini-3-pro-high
alias: gemini-3-pro-preview
...

这是模型名称的映射表。上游服务商(如 Google Antigravity)返回的模型名可能很长,客户端用起来不方便。通过别名可以简化:

比如把 gemini-3-pro-high 映射成 gemini-3-pro-preview,客户端调用时直接用短名字就行。

支持的 OAuth 渠道包括:

  • antigravity: Google Antigravity(Gemini CLI)
  • github-copilot: GitHub Copilot 内置的 Claude 模型
  • kiro: Kiro IDE 的模型
  • qwen: 通义千问
  • claude: Anthropic Claude Code
  • codex: OpenAI Codex
  • gemini-cli: Gemini CLI

OpenAI 兼容提供商#

openai-compatibility:
- name: openrouter
base-url: https://openrouter.ai/api/v1
api-key-entries:
- api-key: sk-or-v1-xxx
proxy-url: socks5://127.0.0.1:40000

除了 OAuth 渠道,CLIProxyAPI 还能对接标准的 OpenAI 兼容 API。这节的配置比较灵活:

  • name: 提供商标识,随便起,客户端调用时要用
  • base-url: 上游 API 的基础地址
  • api-key-entries: 支持多个 API key,每个可以配独立的代理出口
  • models: 模型映射表,可以把上游模型名映射成更友好的别名
  • headers: 自定义请求头,有些平台需要特定的 User-Agent 或 Referer
  • priority: 优先级,数字越小越优先。当多个渠道有同名模型时,按优先级选择

模型排除列表#

oauth-excluded-models:
gemini-cli:
- gemini-2.5-flash
- gemini-2.5-pro

有些模型你不想暴露给客户端,可以用排除列表隐藏。支持通配符匹配:

  • 精确匹配:gemini-2.5-pro
  • 前缀匹配:gemini-2.5-*
  • 后缀匹配:*-preview
  • 子串匹配:*flash*

Gemini API 直连配置#

gemini-api-key:
- api-key: xxx
base-url: http://localhost:8741
models:
- name: opus-4.6
alias: claude-opus-4-6

这部分是 CLIProxyAPI 的高级用法——本地转发。你可以把另一个 Gemini API 转发服务(比如自己搭的 ds2api)作为上游,通过 CLIProxyAPI 统一暴露。

  • base-url: 本地转发服务的地址
  • excluded-models: 设为 '*' 表示默认隐藏所有模型,只有显式声明的才暴露

实际应用示例#

场景一:个人开发环境#

最简单的用法,只需要配置一个 OAuth 渠道:

port: 8317
auth-dir: ~/.cli-proxy-api
api-keys:
- "${MY_API_KEY}"
oauth-model-alias:
antigravity:
- name: gemini-2.5-pro
alias: g2.5p

然后登录 Antigravity:

Terminal window
cliproxyapi --login

会自动打开浏览器完成 OAuth 授权,token 保存在 ~/.cli-proxy-api/ 目录。

启动服务:

Terminal window
cliproxyapi --config config.yaml

客户端配置(以 Roo Code 为例):

base_url: http://localhost:8317/v1
api_key: sk-your-key
model: g2.5p

场景二:多账号负载均衡#

如果你有多个 Google 账号,每个都有 Antigravity 订阅:

Terminal window
# 登录第一个账号
cliproxyapi --login --auth-dir ~/.cli-proxy-api/account1
# 登录第二个账号
cliproxyapi --login --auth-dir ~/.cli-proxy-api/account2

配置文件:

auth-dir: ~/.cli-proxy-api
routing:
strategy: round-robin

CLIProxyAPI 会自动轮询多个账号,某个账号额度用完时会自动切换。

场景三:生产环境部署#

生产环境建议用 systemd 管理服务:

[Unit]
Description=CLIProxyAPI Service
After=network.target
[Service]
Type=simple
User=cliproxy
WorkingDirectory=/opt/cliproxyapi
ExecStart=/opt/cliproxyapi/cliproxyapi --config /opt/cliproxyapi/config.yaml
Restart=on-failure
RestartSec=5
Environment="API_KEY_DEV=sk-xxx"
Environment="OPENROUTER_KEY=sk-or-v1-xxx"
[Install]
WantedBy=multi-user.target

注意环境变量的设置方式,避免密钥硬编码。

场景四:配合 Nginx 反向代理#

如果要用 HTTPS,可以用 Nginx 做反向代理:

server {
listen 443 ssl http2;
server_name api.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:8317;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 86400;
}
}

proxy_read_timeout 要设长一点,因为 AI 模型响应可能很慢。

总结#

CLIProxyAPI 的配置自由度很高,从个人本地测试到团队多账号管理都能应付。核心要记住的几点:

  1. 安全第一:API key 用环境变量注入,管理面板限制访问范围
  2. 别名简化:给模型起短名字,客户端配置更清爽
  3. 自动故障转移:合理设置重试和配额超限策略,减少人工干预
  4. 日志监控:开启用量统计,方便排查问题和分摊费用
  5. 流式保活:如果架在 CDN 后面,记得开保活防止断连

这套配置在我这边已经稳定运行了几个月,处理过单日上万次的请求。只要上游 OAuth 账号的额度没用完,基本不用管。

如果你有更复杂的场景(比如按用户限流、动态模型路由),可以看看 CLIProxyAPI 的 SDK 文档,支持用 Go 写自定义中间件。

参考链接:

CLIProxyAPI 完整配置指南:从入门到实战
https://im.awsl.app/posts/ai-automation/081-cliproxyapi-config/
作者
uu
发布于
2026-01-15
许可协议
CC0 1.0