OpenAI/Anthropic 兼容 API,后端接入 ChatGPT Web Chat (chatgpt.com)。
支持:
/v1/chat/completions(OpenAI 聊天)/v1/responses(OpenAI Responses)/v1/messages(Anthropic Messages)/v1/images/generations(图片生成,支持图片代理)/v1/images/edits(图片编辑,支持上传图片 + 可选 mask)/v1/models/admin/*Token 池管理- 单 token 代理配置(
http/socks5/socks5h) - 分布式注册脚本自动推送 token
用 uv 管理依赖:
uv sync需要自建/接入一个 Cloudflare Worker 邮箱服务,然后运行注册脚本:
uv run python app/reg_web.py \
--cf-url https://your-cf-email-worker.workers.dev \
--cf-auth <x-custom-auth密码> \
--cf-admin-auth <x-admin-auth密码(可选,走admin API)> \
--cf-domain your-domain.com \
--proxy http://127.0.0.1:7890注册成功后获取的是 Platform OAuth token,直接保存到 web_token/ 目录。该 token 可直接用于 chatgpt.com 的 Web Chat API(f/conversation 端点),无需额外的 webchat token 获取步骤。
复制示例配置并编辑:
cp config.yaml.example config.yaml编辑 config.yaml:
server:
host: "0.0.0.0"
port: 8000
api_key: "sk-gpt2api" # API 访问密钥
admin_key: "admin-gpt2api" # 管理端点密钥
deployment_url: "" # gpt2api 部署 URL(用于图片代理,如 https://your-domain.com)
register:
cf_url: "" # Cloudflare Worker 邮箱后端 URL
cf_auth: "" # 站点访问密码
cf_admin_auth: "" # 管理密码
cf_domain: "" # 邮箱域名
proxy: "" # 注册用代理
auto_register: false # 自动注册(token 不足时)
min_tokens: 3 # 最少保持的 token 数
token:
refresh_interval_hours: 2 # 自动刷新过期 token 间隔(小时)
dead_retain_hours: 24 # 死 token 保留时间
cooling_reset_hours: 24 # 冷却重置时间
fail_threshold: 5 # 失败多少次标记为 dead
load_balance: "round-robin" # 负载策略: round-robin / random / least-used / weighted-random
chatgpt:
proxy: "" # 全局代理(每个 token 的 proxy 字段优先)
sse_timeout: 120
pow_max_iter: 500000
image_download_timeout: 60
turnstile_solver_url: "" # 外部 Turnstile 求解器(可选)
models: # 可用模型列表(对应 chatgpt.com 实际模型)
- id: "gpt-5.5"
upstream: "gpt-5-5"
- id: "gpt-5.3"
upstream: "gpt-5-3"
- id: "gpt-5.2"
upstream: "gpt-5-2"
- id: "gpt-5.1"
upstream: "gpt-5-1"
- id: "gpt-5"
upstream: "gpt-5"
- id: "gpt-5-mini"
upstream: "gpt-5-mini"
- id: "gpt-5.3-mini"
upstream: "gpt-5-3-mini"
- id: "gpt-5.4-mini-thinking"
upstream: "gpt-5-4-t-mini"
- id: "auto"
upstream: "auto"
- id: "research"
upstream: "research"
- id: "gpt-image-2"
upstream: "gpt-5-3"
type: "image"所有字段都支持用环境变量覆盖,命名规则 GPT2API_<section>_<key>,例如:
export GPT2API_SERVER_API_KEY=sk-xxxx
export GPT2API_CHATGPT_PROXY=http://127.0.0.1:7890
export GPT2API_TOKEN_REFRESH_INTERVAL_HOURS=2# 默认配置
uv run python main.py
# 指定端口
uv run python main.py --port 8000
# 生产(多 worker,暂不支持 reload)
uv run uvicorn "app.server:create_app" --factory --host 0.0.0.0 --port 8000curl http://localhost:8000/v1/chat/completions \
-H "Authorization: Bearer sk-gpt2api" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.3",
"messages": [{"role":"user","content":"你好"}],
"stream": true
}'curl http://localhost:8000/v1/messages \
-H "Authorization: Bearer sk-gpt2api" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"messages": [{"role":"user","content":"你好"}],
"max_tokens": 4096,
"stream": true
}'curl http://localhost:8000/v1/images/generations \
-H "Authorization: Bearer sk-gpt2api" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "a cat in space"
}'服务返回 usage 字段,包含估算的 token 数量(prompt_tokens、completion_tokens、total_tokens)。估算基于内容长度的启发式算法,非精确计算。流式请求的 usage 在最后一个 chunk 的 usage 字段中返回。
每个 token 保存为独立的 JSON 文件在 web_token/ 目录下。token 文件支持 proxy 字段设置单 token 代理,优先于全局代理:
{
"email": "tmpo...@hwqs.dadongbei.asia",
"proxy": "socks5://user:pass@host:port",
"...": "..."
}支持的代理类型:http://、socks5://、socks5h://。
当 server.deployment_url 配置后,图片生成返回的 URL 会自动替换为 gpt2api 部署下的代理链接:
server:
deployment_url: "https://your-domain.com" # 或 http://localhost:8000代理端点 /p/img/{base64url_estuary_url} 会带正确的 Referer 和 auth 头向 estuary 获取图片,绕过防盗链。
reg_distributed.py 可独立运行,注册完成后自动推送到多个 gpt2api 实例:
# 注册 5 个账号
uv run python reg_distributed.py \
--cf-url https://your-cf-email-worker.workers.dev \
--cf-auth xxx \
--instances "http://host1:8000,http://host2:8000" \
--admin-key admin-gpt2api \
--count 5 \
--save-local
# 无限注册模式(Ctrl+C 优雅退出)
uv run python reg_distributed.py \
--cf-url https://your-cf-email-worker.workers.dev \
--cf-auth xxx \
--instances "http://host1:8000" \
--infinite --interval 30
# 分别设置注册代理和 token 代理
uv run python reg_distributed.py \
--cf-url https://your-cf-email-worker.workers.dev \
--cf-auth xxx \
--instances "http://host1:8000" \
--reg-proxy http://127.0.0.1:7890 \
--token-proxy socks5://user:pass@remote:1080参数说明:
--instances: 逗号分隔的 gpt2api 部署地址--admin-key: 管理端点密钥(用于 POST /admin/tokens)--proxy: 同时设置注册代理和 token 代理(简写)--reg-proxy: 仅用于注册请求的代理--token-proxy: 写入 token JSON 的代理(gpt2api 使用该代理发请求)--count: 注册数量(0 或--infinite为无限模式)--infinite: 无限注册,持续运行直到 Ctrl+C--interval: 两次注册间隔秒数(默认 10)--retry: 单次注册最大重试次数(默认 3)--retry-delay: 注册重试基础延迟秒数(默认 10,线性递增)--push-retry: 推送到实例最大重试次数(默认 3)--push-retry-delay: 推送重试基础延迟秒数(默认 5)--save-local: 是否同时保存到本地web_token/目录
所有管理端点需要 X-Admin-Key 头:
# 查看 Token 池状态
curl http://localhost:8000/admin/tokens \
-H "X-Admin-Key: admin-gpt2api"
# 手动刷新过期 token
curl -X POST http://localhost:8000/admin/tokens/refresh \
-H "X-Admin-Key: admin-gpt2api"
# 手动注册新账号(需要配置 cf_url)
curl -X POST http://localhost:8000/admin/register \
-H "X-Admin-Key: admin-gpt2api" \
-H "Content-Type: application/json" \
-d '{"cf_url":"https://your-worker.workers.dev","cf_auth":"xxx"}'
# 添加 token
curl -X POST http://localhost:8000/admin/tokens \
-H "X-Admin-Key: admin-gpt2api" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"access_token": "eyJ...",
"refresh_token": "rt_...",
"proxy": "http://127.0.0.1:7890",
"status": "active"
}'
# 禁用/启用 token
curl -X POST http://localhost:8000/admin/tokens/email@example.com/disable \
-H "X-Admin-Key: admin-gpt2api"
# 删除 token
curl -X DELETE http://localhost:8000/admin/tokens/email@example.com \
-H "X-Admin-Key: admin-gpt2api"服务采用全异步架构,基于 curl_cffi.AsyncSession(libcurl multi 接口)实现真正异步 I/O:
- 所有 HTTP 请求(bootstrap、chat-requirements、POW、prepare、SSE 流、图片轮询、token 刷新)均使用
AsyncSession,不阻塞事件循环 - 流式响应通过 async generator 直接输出,无需线程桥接
- POW 计算(CPU 密集)通过
asyncio.to_thread()包装,仅此一处使用线程池 - 单进程可处理数千并发连接
请求 → async def → AsyncSession (libcurl multi) → 事件循环不阻塞 → 并发处理
gpt2api/
├── main.py # 启动入口
├── config.yaml.example # 示例配置(复制为 config.yaml 使用)
├── pyproject.toml # uv 依赖
├── web_token/ # 自动生成的 token 文件(.gitignore)
├── reg_distributed.py # 分布式注册脚本(独立运行,自动推送到实例)
├── app/
│ ├── server.py # FastAPI 应用 + 后台任务
│ ├── config.py # 配置管理
│ ├── auth.py # 认证中间件
│ ├── models.py # 模型列表定义
│ ├── token_manager.py # Token 池管理
│ ├── reg_web.py # 自动注册脚本
│ ├── chatgpt/
│ │ ├── client.py # Web Chat 客户端 (f/conversation)
│ │ ├── sentinel.py # Sentinel + POW 解算
│ │ ├── retry.py # 重试工具(同步 + 异步)
│ │ ├── sse.py # SSE 流解析(同步 + 异步)
│ │ ├── image.py # 图片生成
│ │ └── turnstile.py # Turnstile 求解器(外部服务/VM)
│ ├── adapters/
│ │ ├── openai_chat.py # /v1/chat/completions
│ │ ├── openai_resp.py # /v1/responses
│ │ ├── openai_image.py # /v1/images/generations
│ │ └── anthropic.py # /v1/messages
│ └── routes/
│ ├── chat.py
│ ├── response.py
│ ├── messages.py
│ ├── models.py
│ ├── admin.py
│ └── proxy.py
服务启动后自动启动 5 个后台任务:
- Token 刷新(默认每 2 小时):用
refresh_token换取新的access_token - 冷却恢复(每 10 分钟):配额耗尽的 token 等待冷却期后恢复 active
- 新 Token 扫描(每 30 秒):检测
web_token/目录新增的文件 - 死 Token 清理(每小时):删除超过保留期的 dead token
- 自动注册(每 60 秒检查):当
auto_register: true且 active token 数 <min_tokens时自动注册新账号
- web_token/ 目录包含敏感凭证,已加入
.gitignore,请勿提交到仓库 chatgpt.com的反爬策略变化频繁,app/chatgpt/下的实现需要持续维护- Platform OAuth token 可直接用于
chatgpt.com的 Web Chat API,无需单独获取 webchat token;服务端通过SentinelClient自动处理 chat-requirements + POW - SSE 流已适配
chatgpt.com最新的delta事件 + JSON Patch 增量格式 - 免费账号有配额限制,建议用多个 token 轮询分担负载
- Token 使用量为估算值(基于内容长度的启发式算法),非精确计算