Run GPT-5.4 in Claude Code via Codex OAuth
通过 CCR + CRS 组合,将 Claude Code 请求路由到 ChatGPT Pro/Plus 账户的 Codex 后端
不需要 OpenAI API Key,只需要你的 ChatGPT 订阅。
Claude Code CLI → CCR (:8085) → CRS (:3456) → chatgpt.com/backend-api/codex/responses → GPT-5.4
GitHub: musistudio/claude-code-router
CCR 是一个透明代理网关,允许在不持有 Anthropic 账户的情况下使用 Claude Code CLI。它拦截 Claude Code 发出的 Anthropic 格式请求(/v1/messages SSE),将其转换为 OpenAI Chat Completions 格式,路由到配置的 LLM provider,然后将响应转回 Anthropic 格式返回给 Claude Code。CCR 支持多 provider 配置和基于 Router 规则的模型路由。
npm install -g @musistudio/claude-code-routerGitHub: Wei-Shaw/claude-relay-service
CRS 是一个多账户 API 中继服务,支持 Claude 官方 OAuth、OpenAI OAuth 等多种后端。它对外暴露标准的 /v1/messages(Anthropic)和 /api/v1/chat/completions(OpenAI)端点,内部通过账户池管理和负载均衡将请求分发到对应后端。对于 GPT/Codex 模型,CRS 内置 CodexToOpenAIConverter,能在 Chat Completions 和 Responses API 之间做双向格式转换,并使用 OAuth refresh_token 认证。
| 组件 | 作用 | 端口 |
|---|---|---|
| CCR (Claude Code Router) | Anthropic SSE → OpenAI Chat Completions 转换,模型路由 | 8085 |
| CRS (Claude Relay Service) | 多账户中继,Chat Completions ↔ Responses API 双向转换 | 3456 |
| Redis | CRS 会话/账户存储依赖 | 6379 |
CCR 可以将 Claude Code 的 Anthropic 格式请求转为 OpenAI Chat Completions 格式,但 GPT-5/Codex 模型要求 Responses API (/v1/responses),不是 Chat Completions (/v1/chat/completions)。CCR 不具备这一转换能力。
CRS 内置 CodexToOpenAIConverter,补全了缺失的一环:
- 接收 Chat Completions 格式请求
- 通过
detectBackendFromModel()识别gpt-*模型 - 将请求转换为 Responses API 格式
- 使用 OAuth refresh_token 调用
chatgpt.com/backend-api/codex/responses - 将 Responses API 响应转回 Chat Completions 格式
- CCR 社区主要使用 API Key,不涉及 OAuth
- CRS 社区直接使用 CRS 内置的
/v1/messages端点,不需要 CCR CodexToOpenAIConverter是 CRS 于 2026-02-24 才添加的功能- 两个工具的用户群体几乎没有交集
| 依赖 | 版本要求 | 说明 |
|---|---|---|
| Node.js | >= 18 | CRS 运行环境 |
| Redis | >= 6.x | CRS 会话存储 |
| CCR | 最新版 | npm install -g @musistudio/claude-code-router |
| CRS | 最新版 | 从 GitHub 克隆 |
| ChatGPT Pro/Plus 账户 | - | 需要 OAuth refresh_token (ory_rt_...) |
| Claude Code | >= 2.x | npm install -g @anthropic-ai/claude-code |
CRS 依赖 Redis 存储会话和账户信息。
通过包管理器安装(推荐):
# Ubuntu/Debian
sudo apt install redis-server
# macOS
brew install redis从源码编译(无包管理器的环境):
cd /tmp
wget https://download.redis.io/releases/redis-6.2.16.tar.gz
tar xzf redis-6.2.16.tar.gz
cd redis-6.2.16
make
# 启动 Redis(后台守护模式)
src/redis-server --daemonize yes --port 6379验证:
redis-cli ping
# 期望输出:PONGgit clone https://github.com/Wei-Shaw/claude-relay-service.git
cd claude-relay-service
npm install从示例文件创建配置:
cp config/config.example.js config/config.js创建 .env 文件:
PORT=3456
HOST=0.0.0.0
JWT_SECRET=<随机32字符字符串>
ENCRYPTION_KEY=<随机32字符字符串>
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
LOG_LEVEL=debug
ADMIN_USERNAME=admin
ADMIN_PASSWORD=<你的密码>
ENABLE_CORS=true
DEFAULT_PROXY_TIMEOUT=600000
# Codex reasoning effort (low | medium | high)
CODEX_REASONING_EFFORT=high创建初始管理员账户文件 data/init.json:
{
"adminUsername": "admin",
"adminPassword": "<你的密码>",
"version": "1.0.0"
}nohup node src/app.js > /tmp/crs.log 2>&1 &通过 CRS 管理面板(http://localhost:3456/admin)添加 ChatGPT 账户:
- 登录管理面板
- 进入账户管理
- 添加 OpenAI 账户,填入 OAuth refresh_token(
ory_rt_...格式) - 确认账户状态为活跃
编辑 ~/.claude-code-router/config.json:
{
"HOST": "0.0.0.0",
"PORT": 8085,
"LOG_LEVEL": "debug",
"providers": [
{
"name": "crs",
"api_base_url": "http://127.0.0.1:3456/api/v1/chat/completions",
"api_key": "<CRS_API_KEY>",
"models": ["gpt-5", "gpt-5-codex", "gpt-5.4"],
"transformer": { "use": ["streamoptions"] }
}
],
"Router": {
"default": "crs,gpt-5.4",
"background": "crs,gpt-5.4",
"think": "crs,gpt-5.4"
}
}Warning
api_base_url必须包含/api前缀 — 正确路径是http://127.0.0.1:3456/api/v1/chat/completions,不是/v1/chat/completions- Router 中的模型名必须与目标模型一致 — 如果要使用
gpt-5.4,Router 必须写"crs,gpt-5.4"。CCR 会用 Router 中的模型名覆盖请求中的模型名,写"crs,gpt-5"只会得到gpt-5transformer必须包含streamoptions— CRS 需要stream_options.include_usage来接收流式响应中的 usage 统计
ccr start确保 Claude Code settings 指向 CCR:
~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:8085",
"ANTHROPIC_API_KEY": "<任意非空字符串>"
}
}或者使用环境变量激活:
eval "$(ccr activate)"curl -s http://localhost:8085/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: test" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 100,
"stream": true,
"messages": [{"role": "user", "content": "Say exactly: hello from gpt-5.4"}]
}'claude -p "Say exactly: hello from gpt-5.4 via codex-inside pipeline"如果看到 GPT-5.4 正确响应,说明完整链路已通。
修改 CCR config.json 的 Router 部分即可切换模型:
| 目标模型 | Router 配置 |
|---|---|
| GPT-5.4 | "crs,gpt-5.4" |
| GPT-5 | "crs,gpt-5" |
| GPT-5 Codex | "crs,gpt-5-codex" |
修改后重启 CCR:
lsof -i :8085 # 查找旧进程
kill <PID> && ccr startCCR 支持多 provider 配置,可以同时接入 CRS(GPT 模型)和其他 provider:
{
"providers": [
{
"name": "crs",
"api_base_url": "http://127.0.0.1:3456/api/v1/chat/completions",
"api_key": "<CRS_API_KEY>",
"models": ["gpt-5", "gpt-5-codex", "gpt-5.4"],
"transformer": { "use": ["streamoptions"] }
},
{
"name": "dashscope",
"api_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
"api_key": "<DASHSCOPE_API_KEY>",
"models": ["qwen3.6-plus"],
"transformer": { "use": ["streamoptions"] }
}
],
"Router": {
"default": "crs,gpt-5.4",
"background": "crs,gpt-5.4",
"think": "crs,gpt-5.4"
}
}切换到 Qwen 只需改 Router 为 "dashscope,qwen3.6-plus"。
CRS 的 CodexToOpenAIConverter 在构建 Responses API 请求时会设置 reasoning.effort,控制 GPT 模型的思考深度。
在 CRS .env 中设置:
# low | medium | high(默认 medium)
CODEX_REASONING_EFFORT=high优先级:请求级 reasoning_effort > 环境变量 CODEX_REASONING_EFFORT > 默认值 medium
修改后需要重启 CRS 生效。
- 确认 Redis 正在运行:
redis-cli ping
- 确认
data/init.json存在且adminUsername/adminPassword与.env一致 - 重启 CRS 后重试
现象:Router 配置了 gpt-5.4,但 CRS 日志显示收到的是 gpt-5。
原因:CCR Router 的模型名会覆盖请求中的模型名。如果 Router 写 "crs,gpt-5",无论 Claude Code 请求什么模型,发送给 CRS 的都是 gpt-5。
修复:将 Router 改为 "crs,gpt-5.4" 并重启 CCR。
现象:CCR 日志显示 CRS 返回 404。
原因:api_base_url 路径错误。
修复:确认 URL 为 http://127.0.0.1:3456/api/v1/chat/completions(注意 /api 前缀)。
现象:请求 gpt-5.4,响应中模型名为 gpt-5.4(正常);请求 gpt-5,响应中模型名为 gpt-5-2025-08-07。
说明:这是 Codex 后端的正常行为,不同模型别名可能映射到不同的内部版本标识。不影响实际功能。
MIT

