Codex CLI 的透明重试代理。上游返回容量不足、过载等临时错误时,代理会自动重试,避免错误直接返回给 Codex。
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt建议保存为 ~/.codex/proxy_routes.json:
{
"upstreams": {
"ark": {
"base_url": "https://ark.example.com/v1",
"api_key": "ark-..."
},
"modelserver": {
"base_url": "https://modelserver.example.com/v1",
"api_key": "ms-...",
"strip_reasoning_ids": true
}
},
"default": "modelserver",
"models": {
"glm-5.3": "ark",
"gpt-5.6-sol": "modelserver"
}
}规则:
models中列出的模型使用对应上游;- 未列出的模型使用
default; strip_reasoning_ids仅给确实不支持 reasoning id 的无状态上游启用。
请保护密钥文件:
chmod 600 ~/.codex/proxy_routes.jsonCODEX_PROXY_ROUTES_FILE="$HOME/.codex/proxy_routes.json" \
CODEX_PROXY_BUFFER_FULL_SSE=1 \
CODEX_PROXY_DEBUG=1 \
CODEX_PROXY_DEBUG_LOG=/tmp/codex-proxy-debug.log \
./run.sh代理默认监听 http://127.0.0.1:8787。将 Codex 的 provider 地址指向该地址即可。
该代理使用 HTTP POST/SSE,不代理 Responses API WebSocket 传输。
在 ~/.codex/config.toml 中为此 provider 显式关闭 WebSocket,避免 Codex
发起升级请求后再回退到 HTTP:
[model_providers.proxy]
name = "proxy"
base_url = "http://127.0.0.1:8787"
env_key = "OPENAI_API_KEY"
wire_api = "responses"
supports_websockets = falseCODEX_PROXY_BUFFER_FULL_SSE=1 会等待整条 SSE 接收完成后再转发,可捕获生成后才出现的容量错误,但会失去实时输出并增加内存占用;不需要时可设为 0。
健康检查:
curl http://127.0.0.1:8787/__proxy_health调试日志:
tail -f /tmp/codex-proxy-debug.logpip install -e ".[test]"
pytest