使用 CLIProxyAPI, 让最新的 Codex 能够支持国内的各大模型
本机暂存
<h1 id="第一部分:CLIProxyAPI"><a href="#第一部分:CLIProxyAPI" class="headerlink" title="第一部分:CLIProxyAPI"></a>第一部分:CLIProxyAPI</h1><p><img src="/%E4%BD%BF%E7%94%A8%20CLIProxyAPI%EF%BC%8C%20%E8%AE%A9%E6%9C%80%E6%96%B0%E7%9A%84%20Codex%20%E8%83%BD%E5%A4%9F%E6%94%AF%E6%8C%81%E5%9B%BD%E5%86%85%E7%9A%84%E5%90%84%E5%A4%A7%E6%A8%A1%E5%9E%8B__assets/cover.png" alt="cover"></p><h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p><a href="https://github.com/router-for-me/CLIProxyAPI">CLIProxyAPI</a> 是一个轻量级 AI API 代理服务器,核心功能是在 OpenAI Responses API 和 Chat Completions API 之间做双向格式转换。它使得仅支持 Responses API 的客户端(如 OpenAI Codex CLI)能够访问仅提供 Chat Completions API 的模型(DeepSeek、GLM、Kimi 等)。</p><h2 id="工作原理"><a href="#工作原理" class="headerlink" title="工作原理"></a>工作原理</h2><p><img src="/%E4%BD%BF%E7%94%A8%20CLIProxyAPI%EF%BC%8C%20%E8%AE%A9%E6%9C%80%E6%96%B0%E7%9A%84%20Codex%20%E8%83%BD%E5%A4%9F%E6%94%AF%E6%8C%81%E5%9B%BD%E5%86%85%E7%9A%84%E5%90%84%E5%A4%A7%E6%A8%A1%E5%9E%8B__assets/01-%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86.png" alt="工作原理"></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">Codex CLI</span><br><span class="line"> │ POST /v1/responses (Responses API)</span><br><span class="line"> ▼</span><br><span class="line">CLIProxyAPI ← 自动格式转换</span><br><span class="line"> │ POST /v1/chat/completions (Chat Completions API)</span><br><span class="line"></span><br><span class="line"> ▼</span><br><span class="line">DeepSeek / GLM / Kimi / ...</span><br></pre></td></tr></table></figure><ul><li>请求方向:Responses → Chat Completions(<code>instructions</code> → system message,<code>input</code> → <code>messages</code>)</li></ul><span id="more"></span><ul><li>响应方向:Chat Completions 响应/流式 SSE → Responses 响应/流式 SSE</li><li>支持流式和非流式两种模式</li></ul><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> ~/ai/codex-proxy</span><br><span class="line">git <span class="built_in">clone</span> https://github.com/router-for-me/CLIProxyAPI.git</span><br><span class="line"><span class="built_in">cd</span> CLIProxyAPI</span><br><span class="line">go build -o cliproxyapi ./cmd/server/</span><br></pre></td></tr></table></figure><h2 id="启动与停止"><a href="#启动与停止" class="headerlink" title="启动与停止"></a>启动与停止</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> ~/ai/codex-proxy/CLIProxyAPI</span><br><span class="line">./start.sh <span class="comment"># 启动</span></span><br><span class="line">./start.sh stop <span class="comment"># 停止</span></span><br><span class="line">./start.sh status <span class="comment"># 查看状态</span></span><br></pre></td></tr></table></figure><p>代理默认运行在 <code>http://127.0.0.1:8317</code></p><h2 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h2><p><img src="/%E4%BD%BF%E7%94%A8%20CLIProxyAPI%EF%BC%8C%20%E8%AE%A9%E6%9C%80%E6%96%B0%E7%9A%84%20Codex%20%E8%83%BD%E5%A4%9F%E6%94%AF%E6%8C%81%E5%9B%BD%E5%86%85%E7%9A%84%E5%90%84%E5%A4%A7%E6%A8%A1%E5%9E%8B__assets/02-%E9%85%8D%E7%BD%AE%E6%9E%B6%E6%9E%84.png" alt="配置架构"></p><p>配置文件位于 <code>~/ai/codex-proxy/CLIProxyAPI/config.yaml</code>,修改后代理会自动热加载,无需重启。</p><h3 id="当前配置"><a href="#当前配置" class="headerlink" title="当前配置"></a>当前配置</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">host:</span> <span class="string">"127.0.0.1"</span></span><br><span class="line"><span class="attr">port:</span> <span class="number">8317</span></span><br><span class="line"><span class="attr">debug:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">api-keys:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">"sk-codex-proxy"</span> <span class="comment"># 客户端认证 key</span></span><br><span class="line"><span class="attr">request-retry:</span> <span class="number">2</span></span><br><span class="line"></span><br><span class="line"><span class="attr">openai-compatibility:</span></span><br><span class="line"> <span class="comment"># Provider 1: oneapi-comate (百度内部网关)</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">"oneapi-comate"</span></span><br><span class="line"> <span class="attr">prefix:</span> <span class="string">"comate"</span></span><br><span class="line"> <span class="attr">base-url:</span> <span class="string">"https://oneapi-comate.baidu-int.com/v1"</span></span><br><span class="line"> <span class="attr">api-key-entries:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">api-key:</span> <span class="string">"sk-xxxxxxxxxxx"</span></span><br><span class="line"> <span class="attr">models:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">"DeepSeek-V4-Flash"</span></span><br><span class="line"> <span class="attr">alias:</span> <span class="string">"deepseek-v4-flash"</span></span><br><span class="line"> <span class="comment"># ... 更多模型</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># Provider 2: 智谱 GLM 官方直连</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">"glm-direct"</span></span><br><span class="line"> <span class="attr">prefix:</span> <span class="string">"glm-direct"</span></span><br><span class="line"> <span class="attr">base-url:</span> <span class="string">"https://open.bigmodel.cn/api/coding/paas/v4"</span></span><br><span class="line"> <span class="attr">api-key-entries:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">api-key:</span> <span class="string">"xxxxxxxxxxxxx"</span></span><br><span class="line"> <span class="attr">models:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">"glm-5.1"</span></span><br><span class="line"> <span class="attr">alias:</span> <span class="string">"glm-5.1"</span></span><br><span class="line"> <span class="comment"># ... 更多模型</span></span><br></pre></td></tr></table></figure><h3 id="添加新-Provider"><a href="#添加新-Provider" class="headerlink" title="添加新 Provider"></a>添加新 Provider</h3><p>在 <code>openai-compatibility</code> 下新增一段:</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">openai-compatibility:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">"my-provider"</span> <span class="comment"># provider 名称</span></span><br><span class="line"> <span class="attr">prefix:</span> <span class="string">"my"</span> <span class="comment"># 前缀路由,用 model my/xxx 访问</span></span><br><span class="line"> <span class="attr">base-url:</span> <span class="string">"https://api.example.com/v1"</span></span><br><span class="line"> <span class="attr">api-key-entries:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">api-key:</span> <span class="string">"sk-xxxxx"</span> <span class="comment"># API Key</span></span><br><span class="line"> <span class="attr">models:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">"upstream-model-name"</span> <span class="comment"># 上游真实模型名</span></span><br><span class="line"> <span class="attr">alias:</span> <span class="string">"my-model"</span> <span class="comment"># 客户端使用的别名</span></span><br></pre></td></tr></table></figure><h3 id="添加新模型到已有-Provider"><a href="#添加新模型到已有-Provider" class="headerlink" title="添加新模型到已有 Provider"></a>添加新模型到已有 Provider</h3><p>在对应 provider 的 <code>models</code> 下追加:</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">models:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">"New-Model-Name"</span> <span class="comment"># 上游模型名(需与 provider 端一致)</span></span><br><span class="line"> <span class="attr">alias:</span> <span class="string">"new-model"</span> <span class="comment"># 客户端使用的别名</span></span><br></pre></td></tr></table></figure><h3 id="选择-Provider"><a href="#选择-Provider" class="headerlink" title="选择 Provider"></a>选择 Provider</h3><p>当配置了多个 provider 时,有两种方式指定使用哪个:</p><p><strong>方式1:prefix 前缀路由(显式指定)</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">comate/deepseek-v4-flash <span class="comment"># 走 oneapi-comate</span></span><br><span class="line">glm-direct/glm-5.1 <span class="comment"># 走 glm-direct</span></span><br></pre></td></tr></table></figure><p><strong>方式2:alias 自动路由(省略 prefix)</strong></p><p>当 alias 在所有 provider 中唯一时,可省略 prefix:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">deepseek-v4-flash <span class="comment"># 自动匹配到 comate</span></span><br><span class="line">glm-5.1 <span class="comment"># alias 重名时需加 prefix 消歧</span></span><br></pre></td></tr></table></figure><p>如果多个 provider 有相同 alias(如 <code>glm-5.1</code> 同时在 comate 和 glm-direct 中存在),必须用 prefix 显式指定,否则路由不确定。</p><h3 id="关键配置项"><a href="#关键配置项" class="headerlink" title="关键配置项"></a>关键配置项</h3><table><thead><tr><th>配置项</th><th>说明</th><th>默认值</th></tr></thead><tbody><tr><td><code>host</code></td><td>绑定地址,<code>127.0.0.1</code> 仅本地</td><td>空(所有接口)</td></tr><tr><td><code>port</code></td><td>端口</td><td>8317</td></tr><tr><td><code>api-keys</code></td><td>客户端认证 key 列表</td><td>无</td></tr><tr><td><code>request-retry</code></td><td>请求失败重试次数</td><td>2</td></tr><tr><td><code>debug</code></td><td>调试日志</td><td>false</td></tr><tr><td><code>proxy-url</code></td><td>全局代理(支持 socks5/http/https)</td><td>空</td></tr></tbody></table><h2 id="可用模型"><a href="#可用模型" class="headerlink" title="可用模型"></a>可用模型</h2><h3 id="Provider-oneapi-comate(百度内部网关,prefix-comate)"><a href="#Provider-oneapi-comate(百度内部网关,prefix-comate)" class="headerlink" title="Provider: oneapi-comate(百度内部网关,prefix: comate)"></a>Provider: oneapi-comate(百度内部网关,prefix: <code>comate</code>)</h3><table><thead><tr><th>alias</th><th>上游模型名</th><th>说明</th></tr></thead><tbody><tr><td><code>deepseek-v4-flash</code></td><td>DeepSeek-V4-Flash</td><td>DeepSeek 快速</td></tr><tr><td><code>deepseek-v4-pro</code></td><td>DeepSeek-V4-Pro</td><td>DeepSeek 推理</td></tr><tr><td><code>glm-5</code></td><td>GLM-5</td><td>智谱 GLM-5</td></tr><tr><td><code>glm-5-turbo</code></td><td>GLM-5-Turbo</td><td>智谱 GLM-5 快速</td></tr><tr><td><code>glm-5.1</code></td><td>GLM-5.1</td><td>智谱 GLM-5.1</td></tr><tr><td><code>kimi-k2.5</code></td><td>Kimi-K2.5</td><td>月之暗面 Kimi</td></tr><tr><td><code>kimi-k2.6</code></td><td>Kimi-K2.6</td><td>月之暗面 Kimi</td></tr><tr><td><code>minimax-m2-stable</code></td><td>MiniMax-M2-Stable</td><td>MiniMax 稳定版</td></tr><tr><td><code>minimax-m2.1</code></td><td>MiniMax-M2.1</td><td>MiniMax</td></tr><tr><td><code>minimax-m2.7</code></td><td>MiniMax-M2.7</td><td>MiniMax</td></tr><tr><td><code>claude-sonnet-4.5</code></td><td>Claude Sonnet 4.5</td><td>Claude (中转)</td></tr><tr><td><code>claude-sonnet-4.6</code></td><td>Claude Sonnet 4.6</td><td>Claude (中转)</td></tr><tr><td><code>claude-opus-4.6</code></td><td>Claude Opus 4.6</td><td>Claude (中转)</td></tr><tr><td><code>claude-haiku-4.5</code></td><td>Claude Haiku 4.5</td><td>Claude (中转)</td></tr></tbody></table><h3 id="Provider-glm-direct(智谱官方直连,prefix-glm-direct)"><a href="#Provider-glm-direct(智谱官方直连,prefix-glm-direct)" class="headerlink" title="Provider: glm-direct(智谱官方直连,prefix: glm-direct)"></a>Provider: glm-direct(智谱官方直连,prefix: <code>glm-direct</code>)</h3><table><thead><tr><th>alias</th><th>上游模型名</th><th>说明</th></tr></thead><tbody><tr><td><code>glm-5.1</code></td><td>glm-5.1</td><td>智谱官方直连</td></tr><tr><td><code>glm-5-turbo</code></td><td>glm-5-turbo</td><td>智谱官方直连</td></tr></tbody></table><h2 id="验证与调试"><a href="#验证与调试" class="headerlink" title="验证与调试"></a>验证与调试</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看所有可用模型</span></span><br><span class="line">curl http://127.0.0.1:8317/v1/models \</span><br><span class="line"> -H <span class="string">"Authorization: Bearer sk-codex-proxy"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 Responses API 桥接(非流式)</span></span><br><span class="line">curl http://127.0.0.1:8317/v1/responses \</span><br><span class="line"> -H <span class="string">"Authorization: Bearer sk-codex-proxy"</span> \</span><br><span class="line"> -H <span class="string">"Content-Type: application/json"</span> \</span><br><span class="line"> -d <span class="string">'{"model":"deepseek-v4-flash","input":"你好"}'</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试流式</span></span><br><span class="line">curl http://127.0.0.1:8317/v1/responses \</span><br><span class="line"> -H <span class="string">"Authorization: Bearer sk-codex-proxy"</span> \</span><br><span class="line"> -H <span class="string">"Content-Type: application/json"</span> \</span><br><span class="line"> -d <span class="string">'{"model":"deepseek-v4-flash","input":"你好","stream":true}'</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 Chat Completions 直通(不走 Responses 转换)</span></span><br><span class="line">curl http://127.0.0.1:8317/v1/chat/completions \</span><br><span class="line"> -H <span class="string">"Authorization: Bearer sk-codex-proxy"</span> \</span><br><span class="line"> -H <span class="string">"Content-Type: application/json"</span> \</span><br><span class="line"> -d <span class="string">'{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"你好"}]}'</span></span><br></pre></td></tr></table></figure><p>如果你嫌自己配置麻烦,你还可以将 <a href="https://github.com/router-for-me/CLIProxyAPI/">https://github.com/router-for-me/CLIProxyAPI/</a> 扔给智能体如Claude, 让它帮你按照和配置。 </p><hr><h1 id="第二部分:Codex-CLI-配置"><a href="#第二部分:Codex-CLI-配置" class="headerlink" title="第二部分:Codex CLI 配置"></a>第二部分:Codex CLI 配置</h1><p>为什么要使用 CLIProxyAPI z做一层代理呢,原因是 codex CLI 自 0.84.0 版本后就不再支持 Chat Completions 格式,而只支持 OpenAI 的 Responses API。因此,CLIProxyAPI 充当了一个中间层,将 Codex 的 Chat Completions 请求转换为 Responses API 格式。</p><p>codex这个影响还是巨大的,如果你使用智谱、Minimax、Kimi、Deeepseek 等模型,必须使用 CLIProxyAPI 才能正常使用 最新版的 codex CLI, 而一些新特性比如<code>/goal</code>斜杠命令只能在最新版的codex CLI 中才支持。</p><p>还好厂内的同学给我推荐了<code>CLIProxyAPI</code>, 解决了最近一直困扰我的问题。</p><h2 id="前提"><a href="#前提" class="headerlink" title="前提"></a>前提</h2><ul><li>CLIProxyAPI 已启动(参见第一部分)</li><li>代理运行在 <code>http://127.0.0.1:8317</code></li></ul><h2 id="配置文件-1"><a href="#配置文件-1" class="headerlink" title="配置文件"></a>配置文件</h2><p><img src="/%E4%BD%BF%E7%94%A8%20CLIProxyAPI%EF%BC%8C%20%E8%AE%A9%E6%9C%80%E6%96%B0%E7%9A%84%20Codex%20%E8%83%BD%E5%A4%9F%E6%94%AF%E6%8C%81%E5%9B%BD%E5%86%85%E7%9A%84%E5%90%84%E5%A4%A7%E6%A8%A1%E5%9E%8B__assets/03-Codex%E9%85%8D%E7%BD%AE%E6%B5%81%E7%A8%8B.png" alt="Codex配置流程"></p><p>我以厂内的大模型服务为例,演示如何使用CLIProxyAPI的代理服务配置codex。</p><p>编辑 <code>~/.codex/config.toml</code>:</p><figure class="highlight toml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">model_provider</span> = <span class="string">"oneapi"</span></span><br><span class="line"><span class="attr">model</span> = <span class="string">"comate/deepseek-v4-pro"</span></span><br><span class="line"><span class="attr">disable_response_storage</span> = <span class="literal">true</span></span><br><span class="line"><span class="attr">model_reasoning_effort</span> = <span class="string">"xhigh"</span></span><br><span class="line"><span class="attr">model_context_window</span> = <span class="number">1000000</span></span><br><span class="line"><span class="attr">model_auto_compact_token_limit</span> = <span class="number">900000</span></span><br><span class="line"></span><br><span class="line"><span class="section">[model_providers.oneapi]</span></span><br><span class="line"><span class="attr">name</span> = <span class="string">"oneapi"</span></span><br><span class="line"><span class="attr">wire_api</span> = <span class="string">"responses"</span></span><br><span class="line"><span class="attr">requires_openai_auth</span> = <span class="literal">false</span></span><br><span class="line"><span class="attr">base_url</span> = <span class="string">"http://127.0.0.1:8317/v1"</span></span><br></pre></td></tr></table></figure><h2 id="配置项说明"><a href="#配置项说明" class="headerlink" title="配置项说明"></a>配置项说明</h2><h3 id="顶层配置"><a href="#顶层配置" class="headerlink" title="顶层配置"></a>顶层配置</h3><table><thead><tr><th>配置项</th><th>值</th><th>说明</th></tr></thead><tbody><tr><td><code>model_provider</code></td><td><code>"oneapi"</code></td><td>使用下方 <code>[model_providers.oneapi]</code> 定义的 provider</td></tr><tr><td><code>model</code></td><td><code>"comate/deepseek-v4-pro"</code></td><td>默认模型,可随时通过 <code>--model</code> 切换</td></tr><tr><td><code>disable_response_storage</code></td><td><code>true</code></td><td>不在 OpenAI 端存储响应(通过代理时无意义)</td></tr><tr><td><code>model_reasoning_effort</code></td><td><code>"xhigh"</code></td><td>推理努力程度:low / medium / high / xhigh</td></tr><tr><td><code>model_context_window</code></td><td><code>1000000</code></td><td>上下文窗口大小(token 数)</td></tr><tr><td><code>model_auto_compact_token_limit</code></td><td><code>900000</code></td><td>自动压缩上下文的阈值</td></tr></tbody></table><h3 id="Provider-配置"><a href="#Provider-配置" class="headerlink" title="Provider 配置"></a>Provider 配置</h3><table><thead><tr><th>配置项</th><th>值</th><th>说明</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>"oneapi"</code></td><td>provider 名称,需与 <code>model_provider</code> 一致</td></tr><tr><td><code>wire_api</code></td><td><code>"responses"</code></td><td><strong>必须设为 responses</strong>。这是桥接的核心——让 Codex 发出 Responses API 格式请求,由 CLIProxyAPI 转换为 Chat Completions</td></tr><tr><td><code>requires_openai_auth</code></td><td><code>false</code></td><td>不需要 OpenAI 官方认证,代理用自己的 api-key</td></tr><tr><td><code>base_url</code></td><td><code>"http://127.0.0.1:8317/v1"</code></td><td>指向本地 CLIProxyAPI 代理地址</td></tr></tbody></table><h2 id="环境变量"><a href="#环境变量" class="headerlink" title="环境变量"></a>环境变量</h2><p>Codex 需要 API key 做认证,值需与 CLIProxyAPI 的 <code>config.yaml</code> 中 <code>api-keys</code> 列表里的某一项一致:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">'export OPENAI_API_KEY="sk-codex-proxy"'</span> >> ~/.zshrc</span><br><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br></pre></td></tr></table></figure><p>或者配置 <code>~/.codex/auth.json</code>:</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"OPENAI_API_KEY"</span><span class="punctuation">:</span> <span class="string">"sk-codex-proxy"</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></table></figure><h2 id="切换模型"><a href="#切换模型" class="headerlink" title="切换模型"></a>切换模型</h2><p><strong>临时切换</strong>(单次会话):</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">codex --model deepseek-v4-flash</span><br><span class="line">codex --model glm-5-turbo</span><br><span class="line">codex --model comate/claude-sonnet-4.6</span><br></pre></td></tr></table></figure><p><strong>永久切换</strong>:修改 <code>~/.codex/config.toml</code> 中的 <code>model</code> 字段,例如:</p><figure class="highlight toml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">model</span> = <span class="string">"glm-direct/glm-5.1"</span></span><br></pre></td></tr></table></figure><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><p><img src="/%E4%BD%BF%E7%94%A8%20CLIProxyAPI%EF%BC%8C%20%E8%AE%A9%E6%9C%80%E6%96%B0%E7%9A%84%20Codex%20%E8%83%BD%E5%A4%9F%E6%94%AF%E6%8C%81%E5%9B%BD%E5%86%85%E7%9A%84%E5%90%84%E5%A4%A7%E6%A8%A1%E5%9E%8B__assets/04-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98.png" alt="常见问题"></p><p><strong>Q: Codex 报 <code>model not found</code>?</strong><br>A: 检查 CLIProxyAPI 的 config.yaml 中是否为该模型配置了 alias,且 alias 与 Codex 传入的 <code>--model</code> 参数一致。</p><p><strong>Q: 两个 provider 有同名 alias 怎么办?</strong><br>A: 使用 prefix 前缀消歧:<code>comate/glm-5.1</code> vs <code>glm-direct/glm-5.1</code>。或者给其中一个换一个不同的 alias。</p><p><strong>Q: Codex 连接代理报认证错误?</strong><br>A: 确保 <code>config.toml</code> 中 <code>requires_openai_auth = false</code>,并设置环境变量 <code>export OPENAI_API_KEY="sk-codex-proxy"</code>。</p><p><strong>Q: <code>wire_api</code> 设为 <code>chat</code> 还是用 <code>responses</code>?</strong><br>A: 必须设为 <code>"responses"</code>。CLIProxyAPI 的工作方式就是接收 Responses API 请求再转为 Chat Completions,如果 Codex 直接发 Chat Completions 格式就不需要这个代理了。</p><p><strong>Q: 如何开启调试日志?</strong><br>A: 将 CLIProxyAPI 的 config.yaml 中 <code>debug</code> 改为 <code>true</code>,代理会自动热加载。</p><p><strong>Q: 如何通过代理访问外网 API?</strong><br>A: 在 CLIProxyAPI 的 config.yaml 中设置 <code>proxy-url: "socks5://127.0.0.1:1080"</code>,或在单个 api-key-entry 上设置 <code>proxy-url</code>。</p><p><strong>Q: 配置修改后需要重启吗?</strong><br>A: CLIProxyAPI 的 config.yaml 修改后自动热加载,无需重启。Codex 的 config.toml 修改后下次启动 Codex 生效。</p><hr><p>start.sh</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><span class="line">#!/bin/bash</span><br><span class="line"># CLIProxyAPI 启动脚本</span><br><span class="line"># 使用方法: ./start.sh [stop|status]</span><br><span class="line"></span><br><span class="line">SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"</span><br><span class="line">PID_FILE="$SCRIPT_DIR/cliproxyapi.pid"</span><br><span class="line">CONFIG_FILE="$SCRIPT_DIR/config.yaml"</span><br><span class="line">BINARY="$SCRIPT_DIR/cliproxyapi"</span><br><span class="line"></span><br><span class="line">case "${1:-start}" in</span><br><span class="line"> start)</span><br><span class="line"> if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then</span><br><span class="line"> echo "CLIProxyAPI already running (PID $(cat "$PID_FILE"))"</span><br><span class="line"> exit 0</span><br><span class="line"> fi</span><br><span class="line"> echo "Starting CLIProxyAPI on http://127.0.0.1:8317 ..."</span><br><span class="line"> "$BINARY" -config "$CONFIG_FILE" &</span><br><span class="line"> echo $! > "$PID_FILE"</span><br><span class="line"> sleep 2</span><br><span class="line"> if kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then</span><br><span class="line"> echo "Started successfully (PID $(cat "$PID_FILE"))"</span><br><span class="line"> else</span><br><span class="line"> echo "Failed to start, check config.yaml"</span><br><span class="line"> rm -f "$PID_FILE"</span><br><span class="line"> exit 1</span><br><span class="line"> fi</span><br><span class="line"> ;;</span><br><span class="line"> stop)</span><br><span class="line"> if [ -f "$PID_FILE" ]; then</span><br><span class="line"> kill "$(cat "$PID_FILE")" 2>/dev/null</span><br><span class="line"> rm -f "$PID_FILE"</span><br><span class="line"> echo "Stopped"</span><br><span class="line"> else</span><br><span class="line"> echo "Not running"</span><br><span class="line"> fi</span><br><span class="line"> ;;</span><br><span class="line"> status)</span><br><span class="line"> if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then</span><br><span class="line"> echo "Running (PID $(cat "$PID_FILE"))"</span><br><span class="line"> else</span><br><span class="line"> echo "Not running"</span><br><span class="line"> rm -f "$PID_FILE"</span><br><span class="line"> fi</span><br><span class="line"> ;;</span><br><span class="line"> *)</span><br><span class="line"> echo "Usage: $0 [start|stop|status]"</span><br><span class="line"> ;;</span><br><span class="line">esac</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure>
同分类推荐文章
- Go 实验特性详解 (2026-06-21 10:05:27)
- amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)
- Loop Engineering 实践:我把 RDMA 开发库移植到 Go 语言,花费 239 块钱 (2026-06-17 04:00:24)
建议继续学习
- Go Reflect 性能 (累计阅读 14,121)
- 面向“接口”编程和面向“实现”编程 (累计阅读 13,886)
- 一种基于长连接的社交游戏服务器程序构架 (累计阅读 7,471)
- 从Go看,语言设计(一) (累计阅读 6,146)
- go-kit 入门(一) (累计阅读 4,740)
- 分布式存储Seaweedfs源码分析 (累计阅读 4,722)
- 为什么我们要使用Go语言以及如何使用它的 (累计阅读 4,561)
- Go 语言初步 (累计阅读 4,478)
- 程序员的“横向发展” (累计阅读 4,119)
- ZeroMQ 的模式 (累计阅读 4,041)