用 Codex 写代码,常见的情况是:前半段很顺,突然提示额度用尽或者被限速,等一会儿又好了。这多半是撞上了滚动的时间窗口,而不是你的账号出了问题。这篇不重复讲计费和 Token 概念,只讲这个时间窗口到底怎么定义、它会怎么影响你的使用节奏,以及怎么安排任务才能少被打断。
用 Codex 写代码,很多人遇到的情况是前半段顺得不行,突然某次请求被拒或者速度明显掉下来,过一会儿再看又恢复正常。这大概率不是账号出问题,也不是被拉黑,而是撞上了一个按时间滑动的额度窗口。这篇只讲这个窗口怎么定义、怎么影响你的使用节奏,以及任务怎么切才不容易被卡在半路,计费和 Token 概念不在这里重复展开。
需要先有个心理准备:窗口类限制最烦的地方不在「有多大」,而在「什么时候开始算」你往往不知道。所以与其纠结自己还有多少量,不如把关注点放在节奏安排上——什么时候适合跑重活,什么时候该停下换会话,这套判断比背数字有用得多。
这个「5 小时」到底在数什么
它通常是一个滚动时间窗:从你这一轮的第一次消耗开始往后推一段时间,这段时间内可用的量是一份,用完了就得等窗口滑过去,而不是等到某个整点重新发放。所以它不是「每天几点重置」的日历式重置,同一时刻你和我可能处在完全不同的窗口位置,别人说「现在能用」对你没有参考价值。
- 滚动窗口
- 起点是你自己的第一次消耗,不是固定的整点或零点,所以窗口边界因人而异。
- 窗口额度
- 这一段时间内可用的总量,用完即受限,等时间滑过去才逐步恢复。
- 固定重置
- 按日历时间统一清零,和滚动窗口是两套逻辑,别混着理解。
- 分档限制
- 不同档位、不同接入方式,窗口口径可能不一样,以你实际走的那条路为准。
具体是哪个档位、一个窗口给多少、是否按模型分档、边界怎么计算,这些口径会调整,别背数字。想知道当下口径,直接到 /coding-plans 和 /codex-radar 核对当时的说明。如果你用的是中转或第三方套餐,窗口规则很可能跟官方不一致,先确认自己走的是哪条链路再下结论。
- 先确认自己的接入方:官方直连、官方订阅、还是中转站转发,三者窗口口径未必相同。
- 第三方套餐要看它自己公布的规则页,别拿官方文档去套。
- 不确定时就做一次实测:记下开始时间和被限的时间点,重复两三次基本能看出窗口长度。
- 同一团队多人共用账号时,窗口是共享的,个人感受会严重失真。
撞上窗口时,你会看到什么
典型表现是请求被拒、返回限流错误或者响应明显变慢,但账号本身没有异常。判断的关键在于:等一段时间之后是否自动恢复。如果是,基本可以定性为窗口用量耗尽;如果一直不恢复,才需要往 Key、权限、网络这些方向查。
| 现象 | 更可能是 | 先做什么 |
|---|---|---|
| 请求被拒,等一会儿自动好 | 窗口额度用完 | 停手,等窗口滑过去再跑重活 |
| 短时间内连续报错 | 并发或频率过高 | 降低并发,放慢请求节奏 |
| 响应突然变慢但没有报错 | 服务端整体压力或限速 | 先到 /ai-status 看是不是普遍现象 |
| 一直不恢复,换了模型也一样 | 账号、Key 或权限问题 | 按排查顺序逐项确认,不要干等 |
频率类和总量类要分开处理:一个是「你问得太快」,一个是「你这一窗口的量用完了」,动作完全不同。错误细节的区分方式可以对照 /ai-dict/category/basics 里的词条说明。如果同一时间周围人也在慢,先到 /ai-status 扫一眼,排除掉服务端因素再怀疑自己。
- 第一步:看是不是窗口用尽回忆本轮第一次消耗大概是什么时候,被限前是否已经跑了不少轮。如果符合,停手等待,别反复重试。
- 第二步:区分频率问题把并发降到单个请求、拉长间隔再试一次。如果立刻恢复,说明是频率而不是总量。
- 第三步:排除服务端因素到 /ai-status 看当时是否有普遍性的慢或故障,有的话就不必改自己的用法。
- 第四步:才查账号与网络以上都不成立时,再检查 Key 是否有效、权限是否够、网络是否稳定。
在窗口内把活干完:任务怎么切
窗口类限制下,真正省钱省时间的做法不是找漏洞,而是把任务切成「一次能收尾」的小块。长会话里上下文会不断累积,每一轮的消耗跟着变高,越到后面越贵。该开新会话就开,别舍不得前面那段历史,把关键结论复制出来带过去就行。
- 把大改造拆成若干小任务,每个任务单独开一轮,跑完就收。
- 先做确定性高的事:读代码、写测试、改配置,这类不需要来回试错。
- 把需要反复调试的部分安排在窗口刚开始时做,那时余量最充足。
- 提前整理好要给的上下文和要问的问题,减少无效往返。
- 会话变长、回答开始变慢时果断重开会话,把结论带过去。
还有一点容易被忽略:任务之间的等待时间也是成本。如果某个操作依赖外部结果(比如等构建、等接口),把它和纯思考型任务交错安排,让等待期不占用你的窗口额度高峰。
什么时候不该死磕这个窗口
不是所有场景都适合在窗口里挤。如果一天里频繁撞墙,说明当前档位和你的实际用量不匹配,该做的是换档或者换接入方式,而不是硬等。需要长时间连续跑的任务,比如批量重构、长时间 agent 循环,压在这种窗口里会很痛苦,可以考虑按量计费的 API 路线,用多少算多少。
| 场景 | 适不适合压在窗口里 | 更合适的做法 |
|---|---|---|
| 日常问答式写代码 | 适合 | 按任务切分,随用随跑 |
| 批量重构、长循环任务 | 不适合 | 改用按量计费接口,避免中途断掉 |
| 团队多人共用一个账号 | 不适合 | 先约定使用纪律,或分散到多个接入 |
| 偶尔撞一次墙 | 适合 | 调一下节奏就行,不必换方案 |
判断要不要改方案,别看单次的感受,看两个数据:一周内被卡了几次、每次耽误了多久。这两个数记一两周就有结论,比凭感觉换套餐靠谱。价格和档位差异到 /price-watch 核对当时的数字,别用记忆里的旧印象做决定。
下一步想知道当前各家的窗口口径和实时状态,直接去 Codex 雷达页对照着看,比自己猜快得多。→常见问题
五小时额度是每天重置一次吗?
多数情况下不是固定日历重置,而是跟着你的使用滚动计算,所以恢复时间因人而异。你可以在 /resets 看额度重置的追踪口径,具体规则以 /coding-plans 里对应档位的说明为准。
窗口没用完会累积到下一个窗口吗?
一般不会按比例结转,没用掉的通常就作废。所以不要把重活全堆在同一时间做,均匀铺开反而更划算。实际是否结转、有没有例外,去 /coding-plans 对应档位页面确认。
额度用完是不是账号被封了?
不是。被封通常表现为所有请求都失败且长时间不恢复,窗口耗尽只是暂时的,等一段时间会自行恢复。如果迟迟不恢复,先到 /ai-status 看服务状态,再按报错文本到 /ai-dict/category/basics 对照。