0. 一句话结论
平台已实现 OpenAI Responses API 端点 POST /v1/responses,且实现时明确按 Codex 需求设计(流式 SSE 事件序列、function 工具调用、store:false 无状态兼容)。
因此 Codex CLI 有两种接入方式:
- 直连(推荐):在
~/.codex/config.toml里配置wire_api = "responses",直接走/v1/responses; - cc-switch:用图形化工具一键切换 Codex / Claude Code 等的 provider。
两种方式计费完全一致(同一套预扣→路由→结算→账本管线)。
1. 前置条件
| 项 | 要求 |
|---|---|
| Codex CLI | 已安装(建议 v0.142.4+,codex --version 可查) |
| RouteAll 账号 | 已注册,并在 Console → API Keys 创建 API Key |
| API Key | 前缀 sk-ra-,只显示一次,复制必须完整;一个 key 通吃所有模型与端点 |
| 余额 | 已充值(按 token 计费;余额不足返回 402) |
| 模型名 | 平台规范模型名(见 §5.1 查询,以 /v1/models 实际返回为准) |
2. 平台侧能力与边界(/v1/responses)
- 端点:
POST https://routeall.ai/v1/responses - 鉴权:
Authorization: Bearer sk-ra-...
2.1 支持(Codex 兼容)
| 能力 | 说明 |
|---|---|
| 文本输入 / 输出 | 非流式 JSON + 流式 SSE 均支持 |
| function 工具调用 | Codex agentic loop:tools 透传上游 + function_call 流式事件 + function_call_output 输入回灌 |
| 流式 | 产出完整 Responses SSE 事件序列:response.created → output_item.added → output_text.delta → output_item.done → response.completed(Codex 需要的三个不变量已满足) |
reasoning.effort |
透传为 reasoning_effort |
| 未知字段宽容 | store / include / text / metadata 等一律忽略,不 400(Codex 兼容) |
2.2 边界(无状态文本子集)
| 字段 | 行为 |
|---|---|
previous_response_id |
忽略 —— 无状态;Codex 用 store:false 每轮发全量 input,天然兼容 |
input_image |
跳过(图片 part 不中断请求,只取文本) |
内置工具(web_search 等) |
忽略 —— 仅透传 type: "function" 的工具 |
stream: true + 畸形 input |
400(Responses 错误信封) |
2.3 计费与错误
- 计费:与
/v1/chat/completions完全同一管线,实测 charge 平价;响应头X-RouteAll-Charge-Credit为零售计费额(非成本)。 - 错误信封:
{ "error": { "message", "type", "code", "param" } };HTTP 状态:401(无/错 key)、402(余额不足)、429(限流)、400(参数畸形)、503(上游全挂)。
3. 方式一:Codex CLI 直连(Responses API,推荐)
3.1 配置 ~/.codex/config.toml
model = "deepseek-v4-pro" # 默认模型,换成广场里的规范名
model_provider = "routeall"
[model_providers.routeall]
name = "RouteAll"
base_url = "https://routeall.ai/v1" # 平台 OpenAI 兼容 base URL(不带 /responses)
env_key = "ROUTEALL_API_KEY"
wire_api = "responses" # responses = 走 /v1/responses(推荐)
3.2 设置环境变量
# Linux / macOS
export ROUTEALL_API_KEY="sk-ra-你的KEY"
# Windows PowerShell
# $env:ROUTEALL_API_KEY = "sk-ra-你的KEY"
3.3 启动
codex
3.4 临时切换模型
codex --model Codex-haiku-4-5 "重构一下这个模块"
codex --model deepseek-v4-flash "解释这段正则"
3.5 关于 wire_api
| wire_api | 实际端点 | 说明 |
|---|---|---|
responses |
POST /v1/responses |
原生 Responses 协议(Codex 默认协议),流式 / 工具调用均支持,推荐 |
chat |
POST /v1/chat/completions |
OpenAI 兼容形态;平台已放宽 DTO(B15)支持 content:null 的工具型多轮调用 |
备注:网关
api.子域当前未对外启用(服务器PUBLIC_API_DOMAIN=api.localhost内部);/v1/*由主站routeall.ai直接提供服务,故 base_url 用https://routeall.ai/v1。
4. 方式二:cc-switch(图形化一键切换)
cc-switch 是开源供应商切换工具(farion1231/cc-switch),可管理 Codex / Claude Code / OpenCode / Gemini 等的 provider 配置并一键切换。
4.1 安装
GitHub farion1231/cc-switch → Releases 下载对应系统安装包(Windows / macOS / Linux)。
4.2 新增供应商
- 打开 cc-switch,切到 Codex 标签页 →「新增供应商」;
- 填写:
- 供应商名称:
RouteAll(随意) - API Host / Base URL:
https://routeall.ai/v1 - API Key:
sk-ra-你的KEY - 模型列表:平台规范模型名(如
deepseek-v4-pro、Codex-haiku-4-5,可多行)
- 供应商名称:
- 保存。
4.3 应用切换
选中 RouteAll →「切换 / 启用」。cc-switch 会把 provider 配置写入 ~/.codex/config.toml(等价于方式一的配置),之后正常 codex 启动即可。
注:cc-switch 部分版本会把 Codex 的协议改写为
/v1/chat/completions(即wire_api = "chat")。平台两条路都通(B15 已修复工具型客户端走 chat 的 400);若你的版本支持选协议,选 Responses 更贴合原生。
5. 验证
5.1 拉取可用模型列表(以列表为准,不要猜模型名)
curl https://routeall.ai/v1/models \
-H "Authorization: Bearer sk-ra-你的KEY"
# 或公开目录(免鉴权,只列有渠道的模型)
curl https://routeall.ai/v1/public/models
5.2 非流式(先验证链路通不通)
curl https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-你的KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": "你好,请用一句话介绍你自己",
"max_output_tokens": 200
}'
成功返回 Responses 格式(output[].content[].output_text + output_text + usage)。
5.3 流式(Codex 实际形态)
curl -N https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-你的KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": "讲个简短的笑话",
"stream": true
}'
事件顺序:response.created → output_item.added → output_text.delta ×N → output_item.done → response.completed。
5.4 工具调用(agentic loop 形态)
curl https://routeall.ai/v1/responses \
-H "Authorization: Bearer sk-ra-你的KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"input": [{"role": "user", "content": "帮我算 17*23"}],
"tools": [{
"type": "function",
"function": {
"name": "calculator",
"description": "执行四则运算",
"parameters": {
"type": "object",
"properties": { "expr": { "type": "string" } }
}
}
}],
"tool_choice": "auto"
}'
output 会包含 type: "function_call" 项(call_id / name / arguments),随后可再发 function_call_output 项回灌结果继续多轮。
6. 排错
| 现象 | 原因与处理 |
|---|---|
401 Unauthorized |
key 不对 / 复制残缺 / 已禁用。key 只存 sha256,后台不显示明文,务必在创建时复制完整 |
402 Insufficient balance |
余额不足,Console 充值(CNY / USD / USDT) |
429 Rate limited |
每 key 每分钟限流(默认 60 RPM,可调);降低并发或指数退避重试 |
400 参数错误 |
看响应体 error.message(如 Responses input 畸形、模型名不存在) |
503 上游错误 |
该模型全部渠道不可用,换模型或稍后重试 |
| 模型「不存在 / 不可调」 | 模型名必须是 /v1/models 返回的规范名且已上架(active + 有渠道);不要猜名 |
Codex 报 stream closed before response.completed |
一般为网络中断;网关已做 graceful 收尾(仍发 completed),重试即可 |
| Codex 报 413 Payload Too Large | 平台已调大请求体上限(修复过 Codex 长上下文);仍出现则精简上下文 |
7. 计费与安全提示
- 计费口径:模型官方价 × 用户组倍率;流式按真实 usage 结算;缓存命中按全价收(B12 策略,缓存价差归平台,客户 charge 不降)。
- 计费可见性:响应头
X-RouteAll-Charge-Credit(零售额);cost/margin永不进用户侧响应(INV-8)。 - Key 安全:
sk-ra-只存 sha256、后台不可见;绝不要嵌进客户端 / 仓库。 - 建议先拿小模型(curl 验证)跑通链路,再切 Codex / 长任务。