CLIProxyAPI 简明部署指南

如果手里有多个 ChatGPT、Claude、Gemini 等订阅账号,或者来自不同模型服务商的 API Key,可以用 CLIProxyAPI 把它们收拢到同一个地址,让 Codex、Claude Code、OpenCode 和其他 AI 客户端统一调用。

CLIProxyAPI 负责保存上游凭据、转换接口协议,并在多个账号之间路由请求。客户端只需要配置一个 Base URL、一枚客户端密钥和模型名称。

AI 客户端
→ CLIProxyAPI
→ OAuth 账号或上游 API Key
→ 模型服务

安装 CLIProxyAPI

服务器需要安装 curltar。运行官方 Linux 安装器:

curl -fsSL \
  https://raw.githubusercontent.com/router-for-me/cliproxyapi-installer/refs/heads/master/cliproxyapi-installer \
  | bash

这条命令会直接执行远程脚本。对安全要求较高时,可以先下载并检查脚本,再手动运行。

安装完成后,主要文件位于:

路径 作用
$HOME/cliproxyapi/cli-proxy-api 当前使用的主程序
$HOME/cliproxyapi/config.yaml 主配置文件
$HOME/cliproxyapi/<版本号>/ 当前版本的完整发布文件
$HOME/.config/systemd/user/cliproxyapi.service 用户级 systemd 服务
$HOME/.cli-proxy-api/ OAuth 登录后保存账号凭据的目录

完成最小配置

打开主配置文件:

nano "$HOME/cliproxyapi/config.yaml"

安装器首次创建 config.yaml 时,会生成两枚客户端密钥并写入顶层 api-keys。当前配置模板还包含 your-api-key-3 默认值;删除所有 your-api-key-*,只保留安装器生成的 Key。两枚都可以保留,也可以只保留一枚。

同时确认以下运行边界:

host: "127.0.0.1"
port: 8317

tls:
  enable: false

remote-management:
  allow-remote: false
  secret-key: ""

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

api-keys:
  - "<安装器生成的第一枚 Key>"
  - "<安装器生成的第二枚 Key>"

不要用上面的占位文字覆盖配置中的实际 Key。这里有两类不同凭据:

凭据 用途
顶层 api-keys AI 客户端访问 CLIProxyAPI
OAuth 凭据或上游 API Key CLIProxyAPI 访问模型服务

两者不能混用。

接入上游模型

CLIProxyAPI 可以同时使用 OAuth 账号和 API Key。首次部署至少接通一种,确认请求链路正常后,再继续添加其他账号或服务。

使用 OAuth 账号

进入安装目录:

cd "$HOME/cliproxyapi"

根据账号类型运行对应命令:

# ChatGPT Codex
./cli-proxy-api -config ./config.yaml -codex-device-login -no-browser

# Claude
./cli-proxy-api -config ./config.yaml -claude-login -no-browser

# Kimi
./cli-proxy-api -config ./config.yaml -kimi-login -no-browser

# xAI
./cli-proxy-api -config ./config.yaml -xai-login -no-browser

-no-browser 适合没有桌面环境的服务器。程序会显示授权地址或设备码,在自己的电脑或手机上完成授权即可。

登录成功后,凭据会保存到 auth-dir。当前版本支持哪些 OAuth 参数,可以直接查看:

"$HOME/cliproxyapi/cli-proxy-api" -h

使用上游 API Key

API Key 不需要登录,只要在 config.yaml 中添加对应配置。

Gemini、Claude 和 xAI 原生 API Key 分别使用以下配置块。只添加自己需要的部分:

# Gemini
gemini-api-key:
  - api-key: "<GEMINI_API_KEY>"

# Claude
claude-api-key:
  - api-key: "<CLAUDE_API_KEY>"

# xAI
xai-api-key:
  - api-key: "<XAI_API_KEY>"

如果上游提供 OpenAI-compatible API,则使用:

openai-compatibility:
  - name: "<PROVIDER_NAME>"
    base-url: "<UPSTREAM_BASE_URL>"
    api-key-entries:
      - api-key: "<UPSTREAM_API_KEY>"
    models:
      - name: "<UPSTREAM_MODEL_ID>"
        alias: "<CLIENT_MODEL_NAME>"

替换上游名称、Base URL、API Key 和模型名。例如 OpenRouter 的 Base URL 是 https://openrouter.ai/api/v1

api-key-entries 中的是上游密钥,不是顶层 api-keys 中的客户端密钥。其他 Provider 的配置见 官方配置模板

启动服务

启用并启动用户级服务:

systemctl --user enable --now cliproxyapi.service
systemctl --user status cliproxyapi.service --no-pager

需要让服务在退出登录和服务器重启后继续运行时,再执行:

sudo loginctl enable-linger "$USER"

如果启动失败,查看日志:

journalctl --user -u cliproxyapi.service -n 100 --no-pager

完成本机验证

先确认进程存活:

curl -fsS http://127.0.0.1:8317/healthz

再从 config.yaml 的顶层 api-keys 中复制一枚客户端密钥,请求模型列表:

curl -fsS \
  http://127.0.0.1:8317/v1/models \
  -H "X-Api-Key: <CLIENT_API_KEY>"

从返回结果中选择一个实际模型名,完成一次真实请求:

curl -fsS \
  http://127.0.0.1:8317/v1/chat/completions \
  -H "X-Api-Key: <CLIENT_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<MODEL_NAME>",
    "messages": [
      {"role": "user", "content": "Say hello in one sentence."}
    ]
  }'

收到模型生成的内容,说明客户端密钥、CLIProxyAPI 和上游凭据已经全部可用。

配置 AI 客户端

本机真实请求成功后,就可以配置 AI 客户端。CLIProxyAPI 提供的主要接口包括:

用途或协议 接口
模型列表 GET /v1/models
OpenAI Chat Completions POST /v1/chat/completions
OpenAI Completions POST /v1/completions
OpenAI Responses POST /v1/responses
OpenAI Responses Compact POST /v1/responses/compact
Anthropic Messages POST /v1/messages
Anthropic Token Count POST /v1/messages/count_tokens
Gemini Models GET /v1beta/models
Gemini Generate Content POST /v1beta/models/{model}:generateContent
Gemini Stream Generate POST /v1beta/models/{model}:streamGenerateContent
Gemini Interactions POST /v1beta/interactions
Codex Direct POST /backend-api/codex/responses
Codex Compact POST /backend-api/codex/responses/compact
管理 API /v0/management/*,不供 AI 客户端调用

客户端通常会根据所选协议自动追加接口路径。客户端与 CLIProxyAPI 位于同一台机器时,根据协议填写:

协议 Base URL 客户端追加的主要路径
OpenAI Compatible http://127.0.0.1:8317/v1 /models/chat/completions/responses
Anthropic Compatible http://127.0.0.1:8317 /v1/messages
Gemini Native http://127.0.0.1:8317 /v1beta/models/...
Codex Direct http://127.0.0.1:8317/backend-api/codex /responses/responses/compact

API Key 填写 config.yaml 顶层 api-keys 中的任意一枚,模型名称从 /v1/models 返回结果中选择。管理 API 不属于模型调用协议;前面的最小配置保持远程管理关闭。

不要把完整接口路径当成 Base URL。例如 OpenAI Compatible 客户端填写到 /v1 即可,否则可能得到重复的 /v1/v1/...

到这里,本机部署和客户端配置已经完成。

从其他设备访问

如果 AI 客户端也在服务器本机,不需要继续配置。只有客户端位于其他设备时,才需要为 CLIProxyAPI 增加远程入口。

可以让 Caddy 提供域名和 HTTPS,同时让 CLIProxyAPI 继续只监听 127.0.0.1:8317

ai.example.com {
    encode zstd gzip

    @model_api path /v1/* /v1beta/* /backend-api/codex/*
    handle @model_api {
        reverse_proxy 127.0.0.1:8317
    }

    respond 404
}

这里使用 handle,会保留 /v1/v1beta/backend-api/codex 路径前缀。不要改成会删除前缀的 handle_path

这份配置只公开模型接口,不公开 /healthz 和管理接口。把它加入 Caddy 实际加载的文件后,校验并重载:

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

远程客户端使用:

协议 Base URL
OpenAI Compatible https://ai.example.com/v1
Anthropic Compatible https://ai.example.com
Gemini Native https://ai.example.com
Codex Direct https://ai.example.com/backend-api/codex

常见问题

现象 检查内容
返回 401 客户端应使用顶层 api-keys,不是 OAuth 凭据或上游 API Key
/v1/models 为空 检查 OAuth 登录、auth-dir,或者 API Key 配置块和模型名
请求路径出现重复 /v1 Base URL 只填写到协议根路径,不要填写完整接口地址
本机可用,其他设备不可用 检查域名、Caddy、防火墙和远程客户端的 Base URL
服务启动但模型请求失败 查看用户服务日志,再检查模型名和上游凭据

参考资料