用 OpenAI 官方账号跑 Codex CLI,国内用户基本会连撞三堵墙:

这篇教程给的是另一条路:把 Codex CLI 的后端从 OpenAI 官方换成 apipifa 中转。核心只有一件事——改一次 ~/.codex/config.toml,加一段 [model_providers.apipifa]注意里面有一行 wire_api = "responses" 不能漏)就跑通。全程国内直连、人民币按量、不碰官方登录态。文章从装 CLI、拿 Key、改配置一路带到跑通验证,最后把常见报错和一个关键的选型问题(为什么有的中转要你在本地额外开一层路由,而 apipifa 不用)讲清楚。

面向从没配过 config.toml 的新手,照着编号步骤抄就行。


一、先搞明白:为什么是「换后端」而不是「破解官方」

先把话说明白,免得踩坑:apipifa 是一个正规的人民币 API 中转服务,做的事情是把你的请求转发到上游模型再把结果返回给你,用的是标准的 API 调用,不是「白嫖 OpenAI 官方账号」,也不是破解。

它带来的直接变化是:

一份 apipifa Key 还能同时跑 Claude、Codex(GPT)、Grok 三家模型(新建令牌默认就是「auto 全模型通用池」,按模型名自动路由计费,不用手动分组)——但这篇只聚焦 Codex,其它工具的接法另开一篇。


二、保姆级步骤:五步把 Codex 接到 apipifa

步骤 1:装 Codex CLI(需要 Node ≥ 22)

Codex CLI 是 OpenAI 官方的命令行编码工具,用 npm 全局安装。前置:Node 版本要 ≥ 22,先查一下:

node -v

如果输出低于 v22.x,先去升级 Node(推荐用 nvm 装个 22 的 LTS),否则装完 Codex 会各种报错。版本达标后安装:

npm i -g @openai/codex

装完验证一下命令在不在:

codex --version

能打印出版本号就说明 CLI 装好了。这一步跟中转无关,是纯官方 CLI 的安装。

步骤 2:去 apipifa 后台拿一把 Key

打开 apipifa 后台,新建一个令牌(Key)。新建令牌默认就是 auto 全模型通用池——意味着这一把 Key 已经能跑 Claude / Codex / Grok 全系模型,按你实际调用的模型名自动计费,不需要你在后台手动选分组、绑模型。

把这把 Key 复制出来先存好,下一步要用。

安全提醒:Key 等同于你的账户余额,别贴到公开仓库、截图、群里。下面我们会用环境变量注入它,正是为了让 Key 不落在明文配置文件里。

步骤 3:核心——改 ~/.codex/config.toml

这是整篇的关键。Codex CLI 的配置文件在 ~/.codex/config.toml。如果你从没跑过 Codex,这个文件可能还不存在,先建好目录和文件:

mkdir -p ~/.codex
touch ~/.codex/config.toml

然后用编辑器打开它,写入下面这份完整配置(可以直接整段抄,再把注释里的说明看一遍):

# ~/.codex/config.toml
# —— 顶部:把默认 provider 指向 apipifa ——
model_provider = "apipifa"

# 默认使用哪个模型(这几个都是 apipifa 上有的 Codex/GPT 系模型名)
# 可选:gpt-5.5 / gpt-5.4 / gpt-5.4-mini / gpt-5.3-codex
model = "gpt-5.3-codex"

# —— 末尾:定义 apipifa 这个 provider ——
[model_providers.apipifa]
name = "apipifa"
base_url = "https://api.apipifa.com/v1"
# ⚠️ 必填且只能是 "responses":Codex 走的是 /v1/responses 端点,
#    不写或写成 "chat" 新版 Codex 直接报错 / 打不通。
wire_api = "responses"
# Key 不写死在这里,走环境变量注入(见步骤 4)
env_key = "APIPIFA_API_KEY"

四个要点解释给新手:

  1. 顶部 model_provider = "apipifa"——告诉 Codex:默认别打官方,改打我下面定义的这个 apipifa。
  2. base_url = "https://api.apipifa.com/v1"——这就是 apipifa 的中转地址,结尾是 /v1,别多加也别少加(尾缀写错是常见的报错来源,后面 FAQ 会讲)。apipifa 原生兼容 OpenAI 协议,所以 Codex 这种 OpenAI 客户端能直接打,无需任何转换。
  3. wire_api = "responses"——这一行别漏。Codex/GPT-codex 系模型走的是 OpenAI 的 /v1/responses 端点,不是老的 /chat/completions。新版 Codex CLI 里这个字段只接受 "responses",写成 "chat" 会直接被拒;不写则可能默认打错端点、报 404。它是「配了却打不通」最容易被忽略的一环。
  4. env_key = "APIPIFA_API_KEY"——告诉 Codex 去哪个环境变量里读 Key(Codex 读它当 Bearer),这样 Key 不会明文躺在配置文件里。注意自定义 provider 必须env_key 显式指定,它不会默认去读 OPENAI_API_KEY

model 这一行可选值就是 apipifa 上的 Codex/GPT 系模型:gpt-5.5gpt-5.4gpt-5.4-minigpt-5.3-codex。写编码任务一般用 gpt-5.3-codexgpt-5.5,你也可以先随便填一个,进 CLI 后用 /model 再切。

步骤 4:注入 Key(环境变量)

配置里写了 env_key = "APIPIFA_API_KEY",那就在 shell 里把这个环境变量设上。临时用(当前终端有效):

export APIPIFA_API_KEY="这里粘贴你在 apipifa 后台拿到的 Key"

想每次开终端都自动带上,就把这行追加到你的 shell 配置文件(zsh 用 ~/.zshrc,bash 用 ~/.bashrc):

echo 'export APIPIFA_API_KEY="你的Key"' >> ~/.zshrc
source ~/.zshrc

这样 Key 只存在你本机的环境变量里,config.toml 里全程看不到明文,更安全。

Windows 用户:把上面的 export 换成 setx APIPIFA_API_KEY "你的Key",设完关掉终端重开一个再跑 Codex(setx 只对新开的终端生效)。

步骤 5:重启 Codex 进程 + /model 选模型验证

关键动作:改完 config.toml 一定要重启 Codex 进程。 Codex CLI 是在启动时读一次配置的,不会热重载——你如果开着旧的 Codex 会话去改配置,改了也不生效,还会以为「配了没用」。所以:先彻底退出当前的 codex(Ctrl+C / 退出会话),再重新开一个终端启动。

启动 Codex:

codex

进去之后,用斜杠命令切模型确认走的是 apipifa 的模型池:

/model

在弹出的列表里选一个 apipifa 的模型(比如 gpt-5.3-codex),然后随便发一句让它干活,比如「用 Python 写一个快速排序」。只要它正常吐出代码、没有超时也没有 401,就说明请求已经打到 apipifa、跑通了。

跑通的判据(对齐「端到端走通」而不是「命令不报错」):

三条都过,才算真的接通。


三、差异化对比:为什么 apipifa 不用「在本地开一层路由」

这是选型时最容易被绕晕的一点,单独拎出来讲。

市面上有些中转方案,接入 Codex 时会让你在本地额外跑一层「路由 / 代理」程序(常见于把 Codex 接到像 MiniMax 这类不是原生 OpenAI 协议的上游时)。原因是:Codex CLI 说的是 OpenAI 那套协议,而上游说的是另一套,中间必须有个东西把两种协议来回翻译。于是你得在本机常驻一个做协议转换/转发的程序,Codex 先打本地那一层,本地那层再转出去。多这一层,就多一份要装、要开、要维护、要排错的东西——它没起来,你的 Codex 就连不上。

apipifa 的路子不一样:它原生兼容 OpenAI 协议,Codex 直接把请求打到 https://api.apipifa.com/v1 就行,中间不需要任何本地转换层。

对比一下就清楚了:

对比项接 MiniMax 等非原生方案接 apipifa
本地要不要常驻路由程序要(本地跑一层做协议转换/转发)不用,Codex 直连
Codex 请求打到哪先打本地路由,再转出去直接打 api.apipifa.com/v1
协议是否需要转换需要(上游非 OpenAI 协议)原生兼容 OpenAI,零转换
出问题排查层数两层(Codex ↔ 本地路由 ↔ 上游)一层(Codex ↔ 中转)
配置动作装+配路由 + 改 Codex 指向本地只改一次 config.toml
本地路由没起来会怎样Codex 直接连不上无此风险

一句话:apipifa 少了「本地路由」这一环,配置更短、排错更简单、也少一个会挂的常驻进程。

顺带一提:如果你在用 CC Switch(一个能在系统托盘里一键切换 Claude Code / Codex 后端的开源桌面工具),拿它来「一键在多个后端之间切换」很方便——apipifa 后台的令牌也支持一键填入 CC Switch。这跟上面说的「本地协议转换层」是两码事:CC Switch 帮你切配置,不是帮你转协议;接 apipifa 时你根本不需要任何协议转换层。

四、FAQ:接入 Codex 中转最常见的坑

Q1:报 404,尤其是打 /responses 或某个路径 404? 两件事按顺序查。① 先确认 wire_api = "responses" 有没有写。 Codex 的 codex/gpt-codex 系模型走的是 /v1/responses 端点,这一行漏了或写错,Codex 就可能打去错误路径 → 404,这是 codex 类模型 404 最容易被忽略的根因。② 再查 base_url 尾缀——正确就是 https://api.apipifa.com/v1,结尾 /v1,不要写成 .../v1/(多斜杠)、也不要漏掉 /v1 只写域名,更不要自己在后面再拼 /chat/completions/responses 之类的路径(Codex 会自己拼后半段,你只给到 /v1)。改完记得重启 Codex再试。

Q2:改了 config.toml / 换了模型,Codex 里没反应、还是旧的? Codex 不热重载配置,启动时只读一次。改完配置、或想让 model 变更生效,必须完全退出 Codex 进程再重新 codex 启动。在旧会话里改是不生效的——这是「配了没用」最常见的真实原因。模型不刷新,先想到重启。

Q3:报 401 / Unauthorized(鉴权失败)? 说明 Key 没被正确带上。逐条查:① 环境变量名对不对——config.toml 里写的 env_key 和你 export/setx 的变量名必须一字不差(都叫 APIPIFA_API_KEY);② 当前这个终端到底有没有这个变量,跑一句 echo $APIPIFA_API_KEY 看是不是空的(空的就说明没 source 到,重开终端或 source ~/.zshrc);③ Key 本身有没有复制全、有没有多空格、是不是 apipifa 后台里那把有效的令牌。

Q4:提示模型名不存在 / invalid model? 你填的 model 得是 apipifa 上真实在线的名字。Codex/GPT 系当前是:gpt-5.5gpt-5.4gpt-5.4-minigpt-5.3-codex(还有生图的 gpt-image-2,但那不用于 Codex 编码)。已经下线的旧名(比如 gpt-5.2)别再写,写了就报模型不存在。拿不准就进 CLI 用 /model 看列表里到底有哪些。

Q5:连接超时 / 一直转圈? 先确认你没有还挂着代理去打这个国内中转(apipifa 国内可直连,不需要代理;有些人代理规则把 api.apipifa.com 也走了代理反而绕远/超时,可以把它加进 NO_PROXY)。再确认 base_url 域名没打错。都对的话,curl 探一下端点通不通,再回来跑 Codex。

Q6:一份 Key 是不是只能用 Codex? 不是。apipifa 新建令牌默认是 auto 全模型通用池,同一把 Key 按你调用的模型名自动路由到 Claude / Codex / Grok 并分别计费。你现在配的是 Codex,哪天想再接 Claude Code 用同一把 Key 就行,不用另开令牌。


五、为什么值得从官方切到 apipifa(差异化收口)

把上面的点收一收,用 Codex 接 apipifa 相比死磕官方,实打实的好处是这几条:

对国内做编码、写自动化、跑 AI 工作流的人来说,这几条合起来就是「装一次、配一段、直连开干」。


六、下一步:去开号拿 Key,把这份配置抄进去

现在就可以动手:

  1. 确认 node -v ≥ 22npm i -g @openai/codex 装好 CLI;
  2. apipifa 开号、在后台新建一把令牌(默认就是全模型通用池);
  3. 把本文步骤 3 的那段 config.toml 抄进 ~/.codex/config.toml别漏 wire_api = "responses"),export 好 Key;
  4. 重启 Codex/model 选一个模型,发一句真实请求跑通。

价格按量还是包月、当前费率多少,直接看 apipifa 价格页 / 后台,通常比官方直付更省。拿一把 Key 先把 Codex 跑起来,跑通了再决定用量档位——这是零风险验证一个中转靠不靠谱最快的方式。

提示:如果你同时也在用 Claude Code,同一把 apipifa Key 就能接,改的是 Claude 那边的 settings.json,接法我们另开一篇专门讲。