Skip to content

LEON-gittech/codex-inside

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Codex Inside Logo

Codex Inside

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

工具介绍

CCR (Claude Code Router)

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-router

CRS (Claude Relay Service)

GitHub: 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 认证。

架构概览

Codex Inside Architecture

组件 作用 端口
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,补全了缺失的一环:

  1. 接收 Chat Completions 格式请求
  2. 通过 detectBackendFromModel() 识别 gpt-* 模型
  3. 将请求转换为 Responses API 格式
  4. 使用 OAuth refresh_token 调用 chatgpt.com/backend-api/codex/responses
  5. 将 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

步骤 1:安装并启动 Redis

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
# 期望输出:PONG

步骤 2:部署 CRS

git 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"
}

启动 CRS

nohup node src/app.js > /tmp/crs.log 2>&1 &

添加 OpenAI OAuth 账户

通过 CRS 管理面板(http://localhost:3456/admin)添加 ChatGPT 账户:

  1. 登录管理面板
  2. 进入账户管理
  3. 添加 OpenAI 账户,填入 OAuth refresh_token(ory_rt_... 格式)
  4. 确认账户状态为活跃

步骤 3:配置 CCR

编辑 ~/.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

  1. api_base_url 必须包含 /api 前缀 — 正确路径是 http://127.0.0.1:3456/api/v1/chat/completions,不是 /v1/chat/completions
  2. Router 中的模型名必须与目标模型一致 — 如果要使用 gpt-5.4,Router 必须写 "crs,gpt-5.4"。CCR 会用 Router 中的模型名覆盖请求中的模型名,写 "crs,gpt-5" 只会得到 gpt-5
  3. transformer 必须包含 streamoptions — CRS 需要 stream_options.include_usage 来接收流式响应中的 usage 统计

启动 CCR

ccr start

步骤 4:配置 Claude Code

确保 Claude Code settings 指向 CCR:

~/.claude/settings.json

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://localhost:8085",
    "ANTHROPIC_API_KEY": "<任意非空字符串>"
  }
}

或者使用环境变量激活:

eval "$(ccr activate)"

验证

curl 直接测试

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 Code CLI 测试

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 start

与其他 Provider 混合使用

CCR 支持多 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"


Reasoning Effort 配置

CRS 的 CodexToOpenAIConverter 在构建 Responses API 请求时会设置 reasoning.effort,控制 GPT 模型的思考深度。

在 CRS .env 中设置:

# low | medium | high(默认 medium)
CODEX_REASONING_EFFORT=high

优先级:请求级 reasoning_effort > 环境变量 CODEX_REASONING_EFFORT > 默认值 medium

修改后需要重启 CRS 生效。


故障排查

CRS 启动失败:Redis 连接错误

  • 确认 Redis 正在运行:redis-cli ping

CRS 管理面板登录失败

  • 确认 data/init.json 存在且 adminUsername/adminPassword.env 一致
  • 重启 CRS 后重试

CCR 请求到达 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。

CRS 返回 404

现象:CCR 日志显示 CRS 返回 404。

原因api_base_url 路径错误。

修复:确认 URL 为 http://127.0.0.1:3456/api/v1/chat/completions(注意 /api 前缀)。

Codex 后端返回的模型名与请求不同

现象:请求 gpt-5.4,响应中模型名为 gpt-5.4(正常);请求 gpt-5,响应中模型名为 gpt-5-2025-08-07

说明:这是 Codex 后端的正常行为,不同模型别名可能映射到不同的内部版本标识。不影响实际功能。


License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors