将 Codex CLI 和 Claude Code 的 API 请求转发到本地 CodeBuddy CLI --serve 模式。
cd codebuddy-proxy-gateway
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt# 一键启动(自动启动 CodeBuddy --serve + 代理网关)
bash service.sh start
# 指定模型
CB_PROXY_MODEL=deepseek-v4-pro bash service.sh startbash service.sh start # 启动
bash service.sh stop # 关闭
bash service.sh restart # 重启
bash service.sh status # 查看状态代理默认监听 http://127.0.0.1:8081,CodeBuddy 默认 :8080。
编辑 ~/.codex/config.toml:
model_provider = "codebuddy"
model = "Deepseek-V4-Pro" # 可选: GLM-5.1, Deepseek-V4-Flash
[model_providers.codebuddy]
name = "CodeBuddy"
base_url = "http://127.0.0.1:8081/v1"
wire_api = "responses"
requires_openai_auth = true
[model_providers.codebuddy.models]
default = "Deepseek-V4-Pro"
Deepseek-V4-Pro = "Deepseek-V4-Pro"
GLM-5.1 = "GLM-5.1"
Deepseek-V4-Flash = "Deepseek-V4-Flash"或设置环境变量:
export OPENAI_BASE_URL="http://127.0.0.1:8081/v1"
export OPENAI_API_KEY="sk-proxy"export ANTHROPIC_BASE_URL="http://127.0.0.1:8081"
export ANTHROPIC_AUTH_TOKEN="sk-proxy"| 端点 | 客户端 | 说明 |
|---|---|---|
POST /v1/responses |
Codex CLI | OpenAI Responses API |
GET /v1/responses/{id} |
Codex CLI | 查询响应状态 |
POST /v1/messages |
Claude Code | Anthropic Messages API(支持流式和非流式) |
GET /v1/models |
两者 | 模型列表(Anthropic 格式支持 gateway discovery) |
POST /v1/messages/count_tokens |
Claude Code | Token 估算 |
GET /docs |
- | Swagger UI |
GET /health |
- | 代理健康检查 |
所有配置通过 CB_PROXY_ 前缀环境变量覆盖:
| 变量 | 默认值 | 说明 |
|---|---|---|
CB_PROXY_MODEL |
deepseek-v4-pro |
CodeBuddy --serve 使用的模型 |
CB_PROXY_CODEBUDDY_BASE_URL |
http://127.0.0.1:8080 |
CodeBuddy --serve 地址 |
CB_PROXY_CODEBUDDY_PORT |
8080 |
CodeBuddy --serve 端口(service.sh 用) |
CB_PROXY_CODEBUDDY_REQUEST_HEADER |
1 |
X-CodeBuddy-Request 请求头值 |
CB_PROXY_CODEBUDDY_SENDER_ID |
gateway |
发送给 CodeBuddy 的 sender.id |
CB_PROXY_CODEBUDDY_SENDER_NAME |
ProxyGateway |
发送给 CodeBuddy 的 sender.name |
CB_PROXY_PROXY_HOST |
127.0.0.1 |
代理监听地址 |
CB_PROXY_PROXY_PORT |
8081 |
代理监听端口 |
CB_PROXY_REQUEST_TIMEOUT |
300 |
CodeBuddy API 请求总超时(秒) |
CB_PROXY_SSE_IDLE_TIMEOUT |
120 |
SSE 流无数据时最大空闲等待(秒) |
CB_PROXY_SSE_KEEPALIVE_INTERVAL |
15 |
SSE keepalive ping 间隔(秒) |
CB_PROXY_HTTPX_CONNECT_TIMEOUT |
10.0 |
httpx 连接超时(秒) |
CB_PROXY_HTTPX_WRITE_TIMEOUT |
10.0 |
httpx 写入超时(秒) |
CB_PROXY_HTTPX_POOL_TIMEOUT |
5.0 |
httpx 连接池超时(秒) |
CB_PROXY_TOKEN_DIVISOR |
4 |
字符数 / N ≈ token 数估算除数 |
CB_PROXY_LOG_LEVEL |
INFO |
日志级别 |
Codex CLI / Claude Code
│
▼ POST /v1/responses 或 /v1/messages
┌──────────────────────┐
│ Proxy Gateway │ ← 协议翻译层
│ 127.0.0.1:8081 │
└──────────────────────┘
│
▼ POST /api/v1/runs
┌──────────────────────┐
│ CodeBuddy --serve │
│ 127.0.0.1:8080 │
└──────────────────────┘
codebuddy-proxy-gateway/
├── main.py # FastAPI 应用入口、生命周期管理
├── config.py # 集中配置 (pydantic-settings) + 模型列表
├── schemas.py # Pydantic 数据模型(请求/响应/SSE事件)
├── codebuddy_client.py # CodeBuddy HTTP 客户端(lru_cache 单例)
├── translator.py # 输入翻译 (Codex/Claude → 纯文本 prompt)
├── sse_translator.py # SSE 输出翻译 (CodeBuddy → OpenAI/Anthropic 格式)
├── proxy_core.py # 公共代理逻辑(请求解析、错误格式、流式响应)
├── utils.py # 通用工具(ID生成、SSE构建、Token估算、keepalive)
├── routes_codex.py # Codex CLI 兼容路由
├── routes_claude.py # Claude Code 兼容路由
├── tests/ # 单元测试
│ ├── test_utils.py # 工具函数测试
│ ├── test_translator.py # 输入翻译层测试
│ └── test_sse_translator.py # SSE翻译层测试
├── requirements.txt # 依赖清单
├── service.sh # 服务管理脚本 (start/stop/restart/status)
└── README.md # 本文件
| 模块 | 职责 | 依赖 |
|---|---|---|
config.py |
全局配置 + 模型列表常量 | — |
utils.py |
ID 生成、SSE 构建、Token 估算、keepalive 包装 | config |
schemas.py |
所有 Pydantic 数据模型 | utils |
codebuddy_client.py |
CodeBuddy API 异步客户端 | config |
translator.py |
Codex/Claude → 纯文本翻译 | schemas |
sse_translator.py |
CodeBuddy SSE → OpenAI/Anthropic SSE | utils, config |
proxy_core.py |
公共代理逻辑:请求解析、校验、流式响应构建 | codebuddy_client |
routes_codex.py |
Codex CLI 路由 | proxy_core, translator, sse_translator |
routes_claude.py |
Claude Code 路由 | proxy_core, translator, sse_translator, utils |
main.py |
应用入口、生命周期、全局异常处理 | 所有路由模块 |
cd codebuddy-proxy-gateway
python -m pytest tests/ -v- CodeBuddy 的
/api/v1/runs是单次 agent 执行模式,CodeBuddy 内部处理工具调用 - 代理将 Codex/Claude 的对话和工具定义统一翻译为文本 prompt 发送给 CodeBuddy
- Codex
previous_response_id增量请求的上下文管理尚未实现——每次请求都是独立 run - 代理自动在 SSE 流中插入 keepalive ping,防止客户端超时断连
- 支持 Anthropic 格式的 gateway model discovery(Claude Code v2.1.129+)