AnyRouter · Universal AI Model Router

any router codex 能不能用?先核对 Base URL、Key 与 Responses API

更新于 2026-10-30 · anyrouter.cfd

简答:可以尝试接入,但不要把首页的 Chat Completions 示例直接填进 Codex。先核对 anyrouter.cfd 当前公开的 Base URL 是否为 <code>https://anyrouter.cfd/api/v1</code>、服务方是否列出 <code>POST /responses</code>,再用服务方模型目录中的准确 ID 发一次最小 Responses 请求;请求返回 JSON 且状态为成功后,才继续写入 Codex 配置。本文不是 anyrouter.cfd 官方文档,而是基于 2026-10-30 可见页面与 Codex 官方资料整理的核验指南。

定义:any router codex 接入,是让 Codex CLI 通过兼容网关的 Base URL 和 API Key 调用模型,而不是默认直连 OpenAI API。

先看 3 步结论:能否接入取决于这三个核验项

核验项当前可见信息你要做的动作
Base URL服务方的 agents.md 页面列出 https://anyrouter.cfd/api/v1只把 Base URL 填到 .../api/v1,不要把 /chat/completions 或 /responses 一并填入
协议首页展示 Chat Completions;agents.md 另外列出 POST /responsesCodex 测试时请求 POST /responses,不能用 Chat Completions 成功结果替代
模型模型目录列出多个 owner/model 格式的 ID,也列出 anyrouter/auto优先从当前模型目录或 /models 响应复制准确 ID,不要手写或猜测

最快判断:先查询模型,再发一次 Responses 请求;如果返回 401,先查 Key;如果返回 404,先查路径或 Base URL;如果返回模型错误,改用目录中实际存在的模型 ID。服务方页面能够证明“公开列出了这些配置”,但不能替代你对当前账户权限、模型可用性和 Codex 任务行为的实际验证。Base URL、认证头和 Responses 端点可参考 服务方公开的 AI coding agents 配置页;首页的 Chat Completions 示例见 服务方首页。

第 1 步:安装 Codex CLI,并确认本地命令可用

Codex 官方 README 当前提供 macOS/Linux 安装脚本和 Windows PowerShell 安装脚本。安装完成后,先确认 codex 命令能运行,再进行网关配置。安装说明见 Codex 官方 README。

macOS 或 Linux

  1. 在终端执行官方安装命令:curl -fsSL https://chatgpt.com/codex/install.sh | sh。

  2. 重新打开终端,执行 codex --version。

  3. 进入一个可备份的测试项目目录,运行 codex,确认 CLI 本身能够启动。

Windows PowerShell

  1. 在 PowerShell 执行:powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"。

  2. 重新打开 PowerShell,执行 codex --version。

  3. 如果提示找不到命令,先检查安装目录是否已加入 PATH,不要先修改 API 配置。

安装成功只代表 Codex CLI 可以启动,不代表网关、Key、协议和模型已经通过验证。先把本地安装问题与 API 接入问题分开处理。

第 2 步:创建 Key、设置变量并检查变量是否为空

服务方公开页面列出了 API Key 控制台路径和 ANYROUTER_API_KEY 变量名;Key 应从当前账户页面生成,不能把真实密钥写进项目、截图、Git 提交或命令参数中。变量名统一使用 ANYROUTER_API_KEY,避免前文设置一个变量、请求却读取另一个变量。

macOS/Linux 临时设置

export ANYROUTER_API_KEY="替换为你的真实Key"

test -n "$ANYROUTER_API_KEY" && echo "Key 已设置" || echo "Key 为空"

Windows PowerShell 临时设置

$env:ANYROUTER_API_KEY = "替换为你的真实Key"

if ([string]::IsNullOrWhiteSpace($env:ANYROUTER_API_KEY)) { "Key 为空" } else { "Key 已设置" }

本文不把 OPENAI_BASE_URL 当作 Codex CLI 已确认会自动读取的通用开关。OpenAI 的其他 CLI 文档确实说明该变量可以改变 API 主机,但 Codex 的自定义 provider 应以当前 Codex 配置文档和本机版本行为为准。对于 Codex,优先检查 ~/.codex/config.toml 或当前版本帮助信息,而不是只设置一个未经验证的环境变量。OpenAI 官方资料可参考 OpenAI CLI 的 Base URL 说明和 Codex 配置文档入口。

第 3 步:先查模型,再发最小 Responses 请求

这一步是完整闭环的关键:先确认 Key 能访问模型列表,再确认 /responses 路径和请求体能返回 JSON。服务方公开 agents.md 页面列出 GET /models、POST /responses,但本文不替你保证当前账户一定有权限调用每个模型。

macOS/Linux:查询模型

curl -sS -i "https://anyrouter.cfd/api/v1/models" -H "Authorization: Bearer $ANYROUTER_API_KEY"

从 JSON 中复制一个当前存在的模型 ID,例如页面目录显示的 anyrouter/auto,但最终应以你实际收到的模型列表为准。

macOS/Linux:最小 Responses 请求

curl -sS -i "https://anyrouter.cfd/api/v1/responses" -H "Authorization: Bearer $ANYROUTER_API_KEY" -H "Content-Type: application/json" --data '{"model":"替换为模型目录中的准确ID","input":"Reply with OK"}'

PowerShell:查询模型和读取响应

$headers = @{ Authorization = "Bearer $env:ANYROUTER_API_KEY" }

if ([string]::IsNullOrWhiteSpace($env:ANYROUTER_API_KEY)) { throw "ANYROUTER_API_KEY 为空" }

$modelResponse = Invoke-WebRequest -Uri "https://anyrouter.cfd/api/v1/models" -Headers $headers -Method Get

$modelResponse.StatusCode

$modelResponse.Content

Responses 请求的请求体至少要使用服务方和兼容协议都接受的字段;OpenAI 官方 Responses API 参考使用 model 与 input 创建响应,可参考 Responses 创建接口参考。成功判定应同时满足:HTTP 状态为成功、响应正文是 JSON、存在响应 ID 或服务方定义的成功字段,并能看到可读输出。只返回 HTML、登录页或网关错误页面,不算调用成功。

确认最小请求成功后,再写 Codex provider 配置

如果模型查询和 Responses 最小请求都通过,可以再尝试 Codex 自定义 provider。OpenAI 官方 Codex app-server 文档公开示例使用 base_url、env_key、wire_api = "responses" 等字段;这能说明字段含义和 Responses provider 的配置方向,但不同 Codex CLI 版本的配置入口仍应以本机帮助和当前官方文档为准。示例见 Codex app-server 官方配置说明。

可先在 ~/.codex/config.toml 中保留一个占位模板,只有在前面的请求已成功并且字段被当前版本接受后再启用:

model = "替换为模型目录中的准确ID"

model_provider = "anyrouter_cfd"

[model_providers.anyrouter_cfd]

name = "AnyRouter cfd"

base_url = "https://anyrouter.cfd/api/v1"

env_key = "ANYROUTER_API_KEY"

wire_api = "responses"

如果当前 Codex 版本不接受这些字段,不要靠猜测修改配置;先执行 codex --help、检查当前版本文档,或暂时回到最小 HTTP 请求定位问题。wire_api = "responses" 只表示按 Responses 协议发送请求,不能把一个实际只支持 Chat Completions 的接口转换成 Responses API。

不要把完整路径填进 base_url:错误示例是 https://anyrouter.cfd/api/v1/responses。通常 Base URL 应停在 /api/v1,具体资源路径由客户端拼接;但如果当前 Codex 版本或服务方文档明确要求不同格式,应以其明确说明为准。

401、403、404、429 和直连问题:按顺序分流

  1. 401 或认证失败:先检查当前进程是否能看到 ANYROUTER_API_KEY,确认没有多余空格、换行或失效 Key;不要把完整 Key 打印到日志。

  2. 403:检查账户权限、模型权限和服务方账户状态。Codex 本地配置无法推断余额或权限,需查看服务方当前控制台信息。

  3. 404 或 endpoint not found:检查是否把完整端点写进了 Base URL,是否重复拼接了 /api/v1,以及请求是否确实发往 /responses。

  4. Model not found:重新请求 /models,复制准确的 id;不要因为首页示例出现某个模型就推断当前账户一定可用。

  5. 429:先查看响应正文和服务方给出的限流信息。只有临时限流且有明确重试条件时,才在总时限内有限重试;余额、权限和未知错误不要自动重试。

  6. 请求仍直连默认服务:检查 provider 是否真正被选择、base_url 是否生效,以及环境变量是否存在于启动 Codex 的同一进程。可以先在测试目录运行,再通过服务端日志或响应信息确认请求目的地。

  7. Responses 请求能通但 Codex 任务失败:这说明基础链路已通,但不等于工具调用、流式事件、上下文长度或模型能力都兼容。先使用短输入、只读任务和目录中明确支持的模型,再逐项增加复杂能力。

推荐排查顺序是:Key 可见性 → 模型列表 → Base URL → Responses 路径 → 模型 ID → Codex provider → 复杂任务能力。这样可以避免把认证问题误判成模型问题,也避免把 Chat Completions 的成功误判成 Codex 成功。

安全检查与适用边界

本文的结论是条件性的:anyrouter.cfd 当前公开页面列出了 OpenAI-compatible Base URL、模型列表和 Responses 端点,但 Codex 是否能完成具体任务,仍需用你的 Key、准确模型 ID 和当前 Codex 版本完成最小请求验证。

常见问题

any router codex 可以直接使用吗?

可以尝试,但不能把首页的 Chat Completions 示例直接当成 Codex 配置。先用当前 Key 查询模型,再请求 https://anyrouter.cfd/api/v1/responses;只有 Responses 请求返回成功 JSON 后,才继续配置 Codex provider。

anyrouter.cfd 的 Codex Base URL 应该填什么?

服务方公开 agents.md 页面列出的 Base URL 是 https://anyrouter.cfd/api/v1。通常不要把 /responses 或 /chat/completions 追加到 Base URL;具体仍要以当前 Codex 版本和服务方文档要求为准。

为什么 Chat Completions 能用,Codex 还是报错?

两者不是同一个核验。Chat Completions 成功只能说明该请求路径和请求体可能可用,不能证明 Responses 协议、Codex provider、工具调用、流式行为或模型权限都可用。应单独测试 /responses。

应该使用 anyrouter/auto 还是其他模型?

优先使用当前 GET /models 返回的准确模型 ID。服务方页面列出 anyrouter/auto,但这只能证明页面公开展示了该 ID,不能保证你的账户、当前 Codex 版本和具体任务一定可用。

设置 OPENAI_BASE_URL 就能让 Codex 改走 AnyRouter 吗?

不能直接这样假定。OpenAI 的其他 CLI 文档说明 OPENAI_BASE_URL 可改变 API 主机,但 Codex 是否读取该变量取决于当前版本和配置方式。Codex 接入应优先检查 model_providers 配置、base_url 和实际请求结果。

PowerShell 如何确认没有发送空 Key?

先执行 if ([string]::IsNullOrWhiteSpace($env:ANYROUTER_API_KEY)) { "Key 为空" } else { "Key 已设置" },再发请求。不要打印完整 Key,也不要把真实 Key 写入脚本、命令参数或日志。

相关阅读

参考资料

  1. AnyRouter 首页:公开的 OpenAI 兼容 Chat Completions 示例与页面信息
  2. AnyRouter agents.md:Base URL、API Key 变量、Responses 端点与模型查询说明
  3. AnyRouter 模型目录:模型 ID 与目录展示
  4. OpenAI Codex 官方 README:CLI 安装方式
  5. OpenAI Codex 官方配置文档入口
  6. OpenAI Codex app-server 官方文档:Responses provider 配置字段示例
  7. OpenAI Responses API 官方参考:创建响应请求字段
  8. developers.openai.com