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: 8317tls: 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: truecommercial-mode: falselogging-to-file: truelogs-max-total-size-mb: 10usage-statistics-enabled: true
# 请求路由与重试配置force-model-prefix: falserequest-retry: 3max-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: 8317tls: enable: false cert: /root/.acme.sh/xxx.com_ecc/xxx.com.cer key: /root/.acme.sh/xxx.com_ecc/xxx.com.keyport: 服务监听的端口,默认是 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-CenterCLIProxyAPI 内置了一个 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: truelogging-to-file: truelogs-max-total-size-mb: 10usage-statistics-enabled: true- debug: 开启后会输出详细的请求/响应日志,排查问题时很有用,但生产环境建议关掉,否则日志量太大。
- logging-to-file: 日志写入文件,默认路径是
~/.cli-proxy-api/proxy.log。 - logs-max-total-size-mb: 日志文件总大小限制,超过会自动清理。
- usage-statistics-enabled: 开启用量统计,可以在管理面板看到每个 API key 的调用次数。
请求重试与配额处理
request-retry: 3max-retry-interval: 20quota-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: 8317auth-dir: ~/.cli-proxy-apiapi-keys: - "${MY_API_KEY}"
oauth-model-alias: antigravity: - name: gemini-2.5-pro alias: g2.5p然后登录 Antigravity:
cliproxyapi --login会自动打开浏览器完成 OAuth 授权,token 保存在 ~/.cli-proxy-api/ 目录。
启动服务:
cliproxyapi --config config.yaml客户端配置(以 Roo Code 为例):
base_url: http://localhost:8317/v1api_key: sk-your-keymodel: g2.5p场景二:多账号负载均衡
如果你有多个 Google 账号,每个都有 Antigravity 订阅:
# 登录第一个账号cliproxyapi --login --auth-dir ~/.cli-proxy-api/account1
# 登录第二个账号cliproxyapi --login --auth-dir ~/.cli-proxy-api/account2配置文件:
auth-dir: ~/.cli-proxy-apirouting: strategy: round-robinCLIProxyAPI 会自动轮询多个账号,某个账号额度用完时会自动切换。
场景三:生产环境部署
生产环境建议用 systemd 管理服务:
[Unit]Description=CLIProxyAPI ServiceAfter=network.target
[Service]Type=simpleUser=cliproxyWorkingDirectory=/opt/cliproxyapiExecStart=/opt/cliproxyapi/cliproxyapi --config /opt/cliproxyapi/config.yamlRestart=on-failureRestartSec=5Environment="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 的配置自由度很高,从个人本地测试到团队多账号管理都能应付。核心要记住的几点:
- 安全第一:API key 用环境变量注入,管理面板限制访问范围
- 别名简化:给模型起短名字,客户端配置更清爽
- 自动故障转移:合理设置重试和配额超限策略,减少人工干预
- 日志监控:开启用量统计,方便排查问题和分摊费用
- 流式保活:如果架在 CDN 后面,记得开保活防止断连
这套配置在我这边已经稳定运行了几个月,处理过单日上万次的请求。只要上游 OAuth 账号的额度没用完,基本不用管。
如果你有更复杂的场景(比如按用户限流、动态模型路由),可以看看 CLIProxyAPI 的 SDK 文档,支持用 Go 写自定义中间件。
参考链接: