- 实现了openai codex 接口转发,支持多账号额度调度,5小时额度低于3%会自动切换新账号
- 并且实现了messages api和responses api的翻译,可以让claude code 使用gpt-5.4
- 极简依赖,只需要nodejs即可运行。
git clone git@github.com:ccq18/airouter.git
cd airouter
npm install
npm start说明:
- 首次执行
npm start时,如果openai.json不存在,会自动读取openai.json.example进入创建配置文件引导 - 引导会依次询问是否启用本地代理端口(默认开启)、代理端口号(默认
7890,可修改)、是否启用入口apikey - 若启用入口
apikey,会自动生成一个sk-airouter-...并写入配置文件 - 非交互终端不会进入引导;这种场景下请先手工创建
openai.json
启动后访问启动日志里打印的管理地址,例如 http://127.0.0.1:3009/admin/configs?auth_token=...
管理页里可以新增随机 apikey,配置了apikey则会校验,若所有apikey为空则不校验
管理页还提供了一个“测试请求”按钮,点击按钮请求测试即可,有正常内容返回,就表示airouter已经成功配置
注意: chatgpt 不要退出登录,退出登录后 token 会失效,建议在无痕窗口登录 GPT 后获取登录态
configs 里可以同时放 ChatGPT Codex token 账号和第三方 API。未写 type 的配置项默认是 token;第三方 API 配置项写 type: "apikey"。apikey 默认支持 OpenAI 兼容 /v1/* 链路,也就是 support: ["gpt"];需要原样转发 Claude Messages API 时,在同一个 apikey 配置项里加 support: ["claude"],也可以写成 ["gpt", "claude"] 同时支持两条链路:
[
{
"access_token": "chatgpt-access-token",
"account_id": "account-id",
"description": "codex token account"
},
{
"type": "apikey",
"base_url": "https://api.example.com/v1",
"apikey": "sk-xxx",
"description": "third-party provider"
},
{
"type": "apikey",
"base_url": "https://claude.example.com/v1",
"apikey": "sk-xxx",
"support": ["claude"],
"description": "claude messages provider"
}
]base_url 不要求是 Codex 或 ChatGPT 地址。support 包含 gpt 的 apikey 用于 OpenAI 兼容的 /v1/* 链路;support 包含 claude 的 apikey 用于 /v1/messages 链路,并且请求体会原样转发,不做模型转换。/v1/responses 不会使用只支持 claude 的 apikey 配置项。调度优先级固定为 token 高于 apikey:每分钟会轮询所有 token 账号;只在所有 token 都不可用时才会使用 apikey;一旦有 token 恢复可用,会优先切回 token。Messages 链路会优先使用 support 包含 claude 的 apikey,没有可用 Claude apikey 时再使用 token 兼容转换。
无api_key
curl http://127.0.0.1:3009/v1/responses \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.4","input":[{"type":"message","role":"user","content":[{"type":"input_text","text":"hello"}]}]}'
带api_key
curl http://127.0.0.1:3009/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <api key>" \
-d '{"model":"gpt-5.4","input":[{"type":"message","role":"user","content":[{"type":"input_text","text":"hello"}]}]}'
建议使用 https://github.com/farion1231/cc-switch 管理本地的配置
使用 ccs 配置转发到对应地址即可;如果 airouter 配置了入口 apikeys,这里填其中任意一个值,否则可以留空或随便写

说明:
npm start:启动服务;首次启动且缺少openai.json时,会先进入创建配置文件引导,然后继续启动npm run restart:重启当前服务进程npm run stop:停止当前服务进程npm run logs:查看服务运行日志,排查启动问题时优先看这里