用 Portkey 给 Codex 接上多 API 自动切换
跑 Codex 或 agent 长任务时,单个 API 很容易碰到限流、临时故障、服务不可用。任务一停,你就得自己处理:等恢复,或手动换 API,再继续跑。
如果你手里有多个可用 API,可以把它们接到 Portkey。Codex 只连 Portkey。某个 API 请求失败时,Portkey 会按配置换下一个再试,减少你手动切换上游的次数,长任务更少中途停住。
就算暂时只有一个 API,也建议在 Portkey 里配重试。限流和短时 5xx 很常见,不加重试,稳定性会差很多。
Portkey 是什么
Portkey 是 Codex 和上游 API 之间的一层中转。
┌─────────┐
│ Codex │
└────┬────┘
│
v
┌─────────┐
│ Portkey │
└────┬────┘
│
├──────────────┬──────────────┐
v v v
┌─────────┐ ┌─────────┐ ┌─────────┐
│ API 1 │ │ API 2 │ │ API 3 │
└─────────┘ └─────────┘ └─────────┘
Codex 不再直接连各个中转站。Portkey 按顺序使用上游:当前 API 失败,并且错误码在你设定的范围内,就换下一个。它做的是失败后自动切换,不是按权重分流量。
前提有两条:上游要支持 Codex 用的 responses 接口;Codex 里填的模型名,上游也要认。这份 config 还要绑到你实际在用的 Portkey key 上,否则 Codex 连了 Portkey,也不会走到这套切换逻辑。
Portkey 配置
把下面这份配置放进 Portkey(Configs 页面新建),把地址和 key 换成你自己的。custom_host 要带上 /v1。
{
"strategy": {
"mode": "fallback",
"on_status_codes": [429, 500, 502, 503, 504]
},
"targets": [
{
"provider": "openai",
"custom_host": "https://api1.example.com/v1",
"api_key": "sk-xxx",
"retry": {
"attempts": 3
}
},
{
"provider": "openai",
"custom_host": "https://api2.example.com/v1",
"api_key": "sk-xxx",
"retry": {
"attempts": 3
}
},
{
"provider": "openai",
"custom_host": "https://api3.example.com/v1",
"api_key": "sk-xxx",
"retry": {
"attempts": 3
}
}
]
}
这套配置做两件事:
- 单个 API 先重试。当前上游失败时,先按
attempts重试。 - 还不行再切下一个。按
targets的顺序往下试。
把 Config 绑到 Portkey Key
Codex 只会发 Authorization: Bearer <key>,不会带 x-portkey-config。所以要把上面的 Config 设成这个 key 的默认配置,请求才会自动走 fallback。
- 在 Portkey 控制台打开 Configs,新建并保存上面的 JSON,记下 Config ID(或名称)。
- 打开 API Keys,创建或编辑你要用的 key。
- 在 key 设置里把 Default Config 选成刚才那份 Config,保存。
- Codex 里
env_key对应的环境变量,填的就是这个 key。
之后只要用这个 key 访问 https://api.portkey.ai/v1,Portkey 会自动套用 fallback 和重试,不用在 Codex 里再配自定义 header。
Codex 配置
改 ~/.codex/config.toml。Portkey 支持标准 auth header,所以直接用环境变量传 key。
model_provider = "OpenAI"
model = "gpt-5.5"
model_reasoning_effort = "high"
[model_providers.OpenAI]
name = "OpenAI"
wire_api = "responses"
base_url = "https://api.portkey.ai/v1"
env_key = "PORTKEY_GPT_API_KEY"
export PORTKEY_GPT_API_KEY="xxxxxxxx"
base_url 指到 Portkey,wire_api 填 responses,env_key 指向存放 Portkey key 的环境变量。model 换成你实际上游支持的模型名。这个 key 必须已经绑好 Default Config。
配完之后,Codex 侧只维护一个 provider。API 的重试和自动切换,交给 Portkey 处理。
在线参考文档
Portkey
- Fallbacks(失败自动切换)
- Automatic Retries(自动重试)
- Gateway Configs(配置绑定与默认 Config)
- Config Object Schema(strategy / targets / retry 字段)
- Custom Hosts(openai + custom_host)
- Authentication
- Headers(x-portkey-api-key / x-portkey-config 等)
- OpenAI-compatible 客户端接入
- Portkey × Codex 官方集成