用于应对最近 ChatGPT / Codex 账号出现的模型降质和降并发问题。 模型降质主要表现为请求的模型被路由到其他模型;降并发是指 OpenAI 上游限制账号能同时处理的请求数量,导致实际可用并发下降。
提供 增量版本、完整部署版本、插件版本 三种形式,优先推荐插件版本,在支持插件的 Sub2API 中安装即可使用;已有源码修改需求可以选增量版本,新部署可以选完整部署版本,下载入口见下方。
为 Sub2API 增加 账号级 STATE 管理、Pro / Team 选择和异常动态守护。可以逐个账号编辑、开启或关闭:只对需要处理的账号启用,正常账号继续按原流程使用。
路线图更新于 2026-09-19。
| 阶段 | 版本 / 形式 | 更新内容 |
|---|---|---|
| 第一步 | 增量版(v0.1.x) | 先提供基于 Sub2API 的增量修改,方便已有用户合并账号级 STATE、Pro / Team 选择和动态守护 |
| 第二步 | 完整项目版(v0.2.0) | 提供完整源码和空白部署包,包含 Sub2API 与 STATE 功能,方便直接部署 |
| 第三步 | 插件版(v0.3.0) | 将功能放进 .s2plugin,在插件页面统一配置,降低安装、升级和日常操作成本 |
| 持续优化 | 插件版(v0.3.1 起) | 已加入双层代理基础能力、出口 IP 检测与运行日志;继续完善代理选择、账号识别和测试体验 |
后续主要更新插件版。 插件安装、升级和操作更方便,新功能优先在插件中完善;增量版和完整项目版保留现有入口,是否同步新功能以各版本说明为准。
- 提供增量版、完整项目版和插件版三种使用方式。
- 插件支持账号级开关、Pro / Team、STATE 采集、固定业务出口复验、续期与异常守护。
- 加入双层代理基础链路和运行日志:部署机器 → 前置代理 → 动态 IP 代理 → 上游。
- 完善双层代理的配置与排障体验。 面向国内部署、无法直接连接部分动态 IP 服务的场景,方便先通过前置代理连接到境外,再接入动态 IP 池;完善直连、手动填写和选择已有代理的操作与提示。账号名称及已有代理选择的宿主适配已进入本地验证,兼容条件见适配说明。
- 在插件内加入一键连接测试。 手动检查前置代理、动态代理及完整嵌套链路,显示出口、耗时和失败环节,减少复制配置到外部工具排查。
- 在插件内加入模型路由对照测试。 同一账号手动对比不加 STATE 与使用 STATE 的响应,展示请求模型、实际返回模型和测试结果。
- 加入“智力测试” / 能力对照。 提供固定的推理、代码和 SVG 动画等测试提示词,支持查看、对比生成结果;与模型路由检查分开展示,避免仅凭模型名称就判断能力恢复。
- 整理测试结果展示与导出。 在插件页面查看测试记录、对比结果和错误信息,方便复现与反馈,隐藏账号凭据、代理密码和 STATE 原文。
未勾选项是后续计划,不代表当前安装包已经具备;现有测试范围见插件验证记录。
动态 IP 采集 STATE,固定业务代理验证并使用;后台自动续期,发现异常自动重采。
日常请求复用当前账号已验证的 STATE,尝试缓解模型被改路由和上游限制并发带来的影响。
| 你关心的问题 | 这里怎么处理 |
|---|---|
| 请求大模型,却被路由到 Luna | 采集和固定代理复验都核对上游返回的模型;通过后才用于业务请求,后续发现模型不符便作废旧 STATE、触发重采 |
| OpenAI 限制账号并发,能同时处理的请求变少 | 通过采集、复验和复用有效 STATE,尝试改善上游降并发带来的可用性问题;实际恢复程度取决于上游响应 |
| 刚恢复正常,过一会儿又异常 | 到期前自动续期,同时监控 312 字节 STATE 和模型不符信号,不只依赖倒计时 |
| 有的账号正常,有的需要处理 | 每个账号独立开关、独立票据,支持手动选择 Pro / Team |
这里的“防降智”主要针对响应模型与请求模型不符的可观测现象;“应对降并发”针对 OpenAI 上游限制账号并发的情况。上游的 Overload、429 和额度限制仍会影响可用性,目前没有并发压测结论;启用账号缺少有效 STATE 时,源码版 / 完整版会让目标模型暂时退出可用调度,插件版则在发往上游前返回暂不可用(503)。
代码免费开源,欢迎使用、交流与改进。如果这个项目对你有帮助,希望顺手点一个 Star ⭐。
这是非官方实验扩展,提供增量版、完整项目版、插件版三个入口。增量版和完整项目版基于 Sub2API v0.2.6;插件版使用官方 v0.2.7 的插件接口。所有发布文件都不附带作者的账号、代理/IP、API Key、票据、数据库或签名私钥。
最新源码已支持无代理账号: 全局动态池仍用于采集 STATE;账号选择“无代理”时,复验和日常请求使用当前服务器直连。感谢 @woai66 的修复贡献(Issue #2)。此更新已进入
main增量源码;已发布的 v0.2.0 完整部署包不包含此修复,需用最新源码重新构建。独立插件版已有空代理直连路径,本次无需修改插件包。
| 形式 | 适合谁 | 下载与设置入口 |
|---|---|---|
| 增量版 | 已有源码,想查看或合并 STATE 修改 | overlay/ + prepare.py,基于 0.2.6;在账号编辑页配置 |
| 完整项目版 | 想部署一个空白的 Sub2API + STATE 实例 | 完整部署版 v0.2.0,含程序、网页、Compose 和完整源码 |
| 插件版(推荐) | 已在使用官方 Sub2API 0.2.7,希望保留原版宿主 | 插件版 v0.3.2,上传 .s2plugin,在插件配置页逐账号设置 |
插件基础功能不需要覆盖宿主源码。 账号名称和从 IP 管理选择前置代理属于可选增强,需要宿主资源目录适配。 首次安装需要向宿主配置追加一次发布者公钥;支持 Linux amd64 / arm64,以及 macOS arm64。全局动态池、可选前置代理、账号开关、Pro / Team、固定出口复验、续期与守护都在插件页操作;支持查看出口 IP 和自动刷新的运行日志。插件与源码版的入口、调度行为和 WebSocket 路径存在区别,详见 插件安装指南 和 插件验证记录。同一个实例选择一种 STATE 实现即可,不建议叠加。
以下完整部署步骤和截图针对 v0.2.6 源码版 / 完整项目版;插件用户请直接按上面的插件指南设置。
只想部署使用,选择 Release 中的完整部署包。 它包含完整 Sub2API 后台和网关,以及本项目的 STATE 功能,不需要先安装原版,也不需要自己打补丁。
| 文件 / 入口 | 用途 |
|---|---|
sub2api-state-kit_v0.2.0_linux_amd64.tar.gz |
常见 x86_64 Linux 服务器;内含已编译程序、网页和 Docker Compose |
sub2api-state-kit_v0.2.0_linux_arm64.tar.gz |
ARM64 Linux 服务器;内含已编译程序、网页和 Docker Compose |
sub2api-state-kit_v0.2.0_full-source.zip / .tar.gz |
完整上游源码 + STATE 修改、测试、Dockerfile 和部署说明;无需再次拼接源码 |
本仓库 overlay/ + scripts/prepare.py |
继续保留的增量形式,方便开发者查看修改、合并或自己构建 |
GitHub 自动生成的 Source code (zip/tar.gz) 是本仓库源码(增量目录 + 插件源码),不是完整 Sub2API。需要完整项目请到 v0.2.0 Release 选择文件名带 full-source 的附件。
新安装示例(需 Docker Compose v2 和 openssl):
tar -xzf sub2api-state-kit_v0.2.0_linux_amd64.tar.gz
cd sub2api-state-kit_v0.2.0_linux_amd64
sh init.sh
# 编辑 .env,设置自己的管理员邮箱、监听地址和端口
docker compose up -d --buildARM64 使用对应文件名。部署包里的程序已编译,--build 只组装运行镜像;首次仍需下载基础镜像。默认监听 127.0.0.1:8080,需要直接从外部访问时自行调整 .env 中的 BIND_HOST。管理员密码由 init.sh 在用户机器上随机生成,记录于本机 .env。
首次安装是空白实例:自行添加账号、代理和 Key,STATE 总开关及账号开关默认关闭。已有生产实例请先备份、隔离测试,再替换应用,保留自己的配置和数据。详见 完整部署说明。
对比基线为 Wei-Shaw/sub2api v0.2.6,不代表上游后续版本的能力。
| 功能 | 上游基线 | 本扩展 |
|---|---|---|
| 启用入口 | 全局 STATE 开关与策略配置 | 保留总开关,增加账号级入口和独立开关,可以逐个账号编辑 |
| Pro / Team | 全局目标长度默认 292,可修改配置 | 账号界面明确提供 Pro(292)/ Team(332),每个账号单独选择 |
| 异常处理 | 本扩展基于其原有票据机制扩展 | 增加动态守护,处理成功响应中的模型不符或 312 字节 STATE 信号 |
| 代理与验证 | 基于上游采集机制 | 全局动态池采集,同账号固定业务代理复验;日常请求继续用固定代理 |
| 使用状态 | 原有票据摘要 | 账号展示可用时间、续期、失败冷却及守护触发摘要 |
“Team 支持”指增加手动套餐选择及对应长度筛选,并不是自动读取或修改订阅。长度只作实验筛选,不能单独证明模型身份或回答质量。 312 也只是本实现采用的实验异常信号,不是上游官方确认的撤销协议。
下面是这次更新的 Team / Pro 原图:原图上半部分为启用 STATE 后的请求,下半部分为未启用 STATE 的请求。保留原图的完整界面和上下顺序,用红框标出模型列,并标注“已启用 STATE / 未启用 STATE”。
未启用时,日志显示请求 gpt-6-astra,上游响应为 gpt-5.6-luna,并标记“模型不一致”;启用后,这组截图里不再出现该标记。原图不缩放、不裁剪、不重排,顶部另加 Team / Pro 大标题,并添加红框、文字与必要的隐私遮挡;模型字段和请求记录顺序未改动。
先进入「系统设置 → 网关服务 → Codex 设置」,打开下图红框中的 STATE 票据总开关。这是全局开关;仅打开它不会自动为所有账号启用 STATE。
原图仅叠加红框,未裁剪、缩放或修改其他内容。
在下方「全局动态 IP 池」填写完整代理 URL 并保存,格式见下文「使用前准备:动态 IP」。
再进入「账号管理 → 编辑账号」,编辑需要启用的 OpenAI OAuth 账号:先保存业务出口设置(固定代理或“无代理”直连),再重新打开编辑窗口,在「STATE 票据」区域选择 Pro / Team,打开该账号的 STATE 开关并点击该区域的保存。这里的设置只针对当前账号,需要使用的账号要分别开启。
启用后,可以查看票据剩余时间和动态守护状态,也可以手动重新获取。
图中代理地址已隐藏,其余保留原始界面。
使用这套 STATE 采集功能,需要先准备一个动态 IP 代理池。 如果还没有,可以通过下面的邀请链接了解和开通:
拿到代理连接信息后,在「系统设置 → 网关服务 → Codex 设置 → 全局动态 IP 池」填写完整代理 URL,SOCKS5 代理使用以下格式:
socks5h://ENCODED_USERNAME:ENCODED_PASSWORD@HOST:PORT
将 ENCODED_USERNAME 和 ENCODED_PASSWORD 替换为分别经过 URL 百分号编码的代理用户名和密码,将 HOST 和 PORT 替换为代理服务器地址和端口。只编码用户名和密码,不要把整个 URL 一起编码;例如用户名或密码中的 @、:、#、% 分别写成 %40、%3A、%23、%25。socks5h 表示通过代理解析目标域名。
程序支持自动更新代理用户名里的 {sid},也适配了 1024proxy 的 SID 格式,不用每次手动生成、导入一堆 IP。
动态 IP 用于采集 STATE,日常业务请求仍走各账号原来的固定代理。已有兼容的动态代理服务也可以继续用,不必重复开通;代理服务费用由服务商收取,项目源码仍然免费。
- 在系统设置中开启总开关,配置全局动态代理池。
- 编辑指定 OpenAI OAuth 账号,保存固定业务代理,选择 Pro 或 Team 并开启该账号的 STATE 功能。
- 使用同一个账号采集候选 STATE,再通过该账号固定业务代理复验。两次完整成功响应的实际模型都须匹配目标模型,才保存使用。
- 业务成功响应触发模型不符或 312 信号时,守护程序作废本次使用的票据并重新采集。旧请求不会作废更新后的票据,并发异常会合并处理。
不会跨账号转移票据,也不会修改响应模型名称、伪造结果或重放已完成的业务请求。开关默认关闭,正常账号不必启用。支持 HTTP/SSE/JSON,以及启用账号的 WebSocket HTTP 桥接。
本地有效期 60 分钟、提前 10 分钟续期;每轮最多 8 次、失败冷却 5 分钟。续期失败保留尚未过期的旧票据。401 / 403 / 429 会终止本轮,不继续轮换出口尝试。
思路可参考言零的文章:292 State 注入 — Codex 不降智、不 Overload 的底层原理与实现。它描述的核心流程是:先获取上游返回的状态值,再把它带到后续请求里,并持续维护它的有效性。 文章报告了携带 STATE 后路由、输出和 Overload 的改善;本扩展用采集、复验和响应观察,把这套思路接入 Sub2API 的账号管理。
可以把 STATE 理解为请求携带的一段“不透明状态”:本扩展保存并复用它,不解析其内部含义,也不生成或伪造它。实际读写的是 HTTP 头 x-codex-turn-state,注入形式如下,尖括号内仅为占位说明:
x-codex-turn-state: <当前账号已采集并复验通过的 STATE>本项目中的 292 / 332 / 312 都指 STATE 的字节长度,不是 HTTP 状态码。 Pro 按 292、Team 按 332 筛选候选值;312 用作触发重采的实验信号。文章使用了“292 / 312 响应码”和 current_turn_state 的表述,这里以仓库实际处理的请求头和长度为准。长度只是第一道筛选,后面还要核对完整成功响应中的模型字段。
flowchart TD
A["当前账号 + 目标模型"] --> B["后台经动态 IP 采集候选 STATE"]
B --> C{"长度符合所选套餐,且完整响应模型匹配?"}
C -->|是| D["同账号、同模型,经固定业务代理携带 STATE 复验"]
C -->|否| R["按尝试次数和冷却规则处理"]
D --> E{"完整响应模型匹配,且未出现 312 信号?"}
E -->|是| F["保存票据,并发布到缓存"]
E -->|否| R
F --> G["业务请求注入 STATE,经固定代理并行转发"]
G --> H["观察成功响应中的 STATE 与模型字段"]
H -->|312 或模型不符| I["作废本次使用的票据,触发后台重采"]
I --> R
F -->|到期前 10 分钟| J["触发后台续期,保留尚有效的旧票据"]
J --> B
R -->|允许继续尝试时| B
动态出口是采集时的一个实验变量,是否拿到可用 STATE 由实际响应决定。采集成功还不够:必须切回该账号固定业务代理再验证一次,确认在那里仍能得到匹配目标模型的完整响应,才保存使用。业务请求因此不必跟着采集过程反复切换出口。
STATE 始终按同账号、同目标模型使用,不把好账号的 STATE 移给另一个账号。票据还关联本地配置版本与固定代理指纹,避免账号配置或业务出口变化后误用旧值。
本扩展将票据的本地有效期设为 60 分钟,提前 10 分钟续期;这是本地管理策略,不是上游承诺的有效期。续期失败时,尚未过期且未被判为异常的旧票据仍可继续使用。
在携带票据的业务请求中,若成功响应的 STATE 头出现符合格式的 312 字节值,或完整响应的模型与目标不符,守护程序会作废该次使用的票据并触发后台重采。多个并发异常合并为同账号的采集任务,遵守既有冷却;较早请求的迟到响应不会误删后来取得的新票据。已经返回的业务内容不会被改写或自动重放。
业务请求只读取并注入已经验证的票据,不为每一条请求临时采集,也不持有一个覆盖整个业务转发过程的账号锁。后台限制的是同账号重复采集任务,业务仍沿用原有并发配置和调度。它让票据维护与日常转发分开进行;上游实际容量、采集开销及票据空窗仍会影响吞吐,因此不等同于无限并发或消除 Overload。
需要 Python 3 和 Git。在本仓库目录执行:
python3 scripts/prepare.py ../sub2api-state-source
cd ../sub2api-state-source脚本下载固定的上游提交,验证原文件和覆盖文件的 SHA-256,再写入全新目录。拒绝覆盖现有源码。输出包含完整上游源码及本扩展;不会复制任何本地配置、数据库或原仓库 Git 历史。
后续可按照生成源码中的上游文档编译,或在生成源码根目录构建镜像:
docker build --build-arg VERSION=0.2.6-state-kit.0.1.0 -t sub2api-state-kit:0.1.0 .构建依赖和资源要求沿用固定的上游版本。具体操作见 部署说明、使用说明 和 验证范围。本仓库的 overlay/ 是实际修改源码,UPSTREAM.json 固定基线和文件校验值。
这是实验功能,无法保证上游持续接受 STATE,也不能承诺恢复某个模型或回答质量。路由观测使用原始成功响应的模型字段,不能代替能力评测。Team 分支的自动化验证使用模拟响应;上面的 Pro / Team 图片是使用者提供的界面对照。
当前采集锁为进程内实现,多实例可能重复采集;没有生产负载或完整上游有效期保证。本扩展不新增数据库迁移,但升级上游版本仍需单独评估兼容性。
发布包包含必要源码、测试、说明及经过隐私遮挡与标注的原始界面对照图,不提供账号、真实 STATE、代理凭据、IP 清单、数据库或原始日志。
首先感谢 gylive/ccodex-sleep-state 的思路分享,也感谢群里各位大佬在讨论、测试和排查中的帮助!这个扩展是在 Sub2API 的基础上折腾出来的,离不开原项目和大家的经验。
- 感谢 Wei-Shaw/sub2api 提供基础项目。
- 特别感谢 gylive/ccodex-sleep-state 带来的生命周期管理与状态展示思路参考。
- 感谢各位群友在讨论、测试和排查过程中的帮助与反馈。
参考项目的说明与版本记录见 NOTICE.md。本项目不代表上述项目的官方版本或背书。
需要帮忙配置?微信搜索
wangyunjeff,添加时备注「Sub2API」。请一杯奶茶,我帮你配置一下 ☕
代码免费开源,自己部署和使用不收费。 配置协助与开源代码是两回事,不购买协助也能使用完整源码。
也欢迎通过 GitHub Issues 交流使用问题,发布问题时请先移除账号、密钥、代理密码和真实 STATE。
喜欢的话,欢迎点一个 Star,也感谢你把它分享给有需要的朋友。
遵循上游 GNU LGPL v3,详见 LICENSE。保留上游版权与署名;覆盖文件是在上游基础上的修改或本扩展新增文件。
如果这个项目帮到了你,欢迎自愿请作者喝杯咖啡,支持后续维护与更新。金额随意,感谢支持!代码始终免费开源,不打赏也可以正常使用。




