codex并发限制

接入与开发

讲清 Codex 的并发限制到底卡在哪几处,给出算并发、排错误、避坑的实操顺序,帮开发者少撞 429 和排队。

本地跑得好好的 Codex 脚本,一改成并行批量处理就开始大面积报错、卡队列、甚至把整天的额度一次烧完。多数时候不是接口坏了,是并发口径没对齐。这篇按「限制在哪、怎么算、撞上了怎么排」的顺序讲一遍,只给判断标准和动作,具体数字去站内对应页面核对。

本地跑得好好的 Codex 脚本,一改成并行批量处理就开始大面积报错、卡队列,甚至把一整天的额度一次烧完。多数时候不是接口坏了,而是并发口径没对齐:你以为自己在控制同时发几个请求,实际起作用的可能是另一层的限制。

这篇按「限制卡在哪、怎么算安全水位、撞上了怎么排」的顺序讲一遍,只给判断标准和可执行动作。至于各家通道的具体数字,去站内厂商目录和中转站目录核对当时的说明,别记数字,记判断方法。

并发限制到底卡在哪几层

并发限制很少只有一层。至少有三层同时在起作用:你本地代码里同时发起的请求数、你所走通道(官方直连或某家中转站)对单账号或单 Key 的并发上限、上游模型侧的瞬时配额。真正能跑起来的水位,是这三者里最小的那个,而不是你以为的那一个。

本地并发
你自己代码里同一时刻在飞的请求数量,通常由线程池、协程数或批处理分片数决定
通道并发
官方或中转站针对单账号 / 单 Key 设的同时在线请求上限,同一把 Key 在多处使用会共享这个额度
瞬时配额
上游模型侧在某个窗口内的处理能力,通道侧也可能有自己的排队机制

最常见的坑是同一把 Key 被多个进程、多个 IDE 窗口、多个 CI 任务共用。它们彼此抢并发额度,表现出来就是「时好时坏、早上能跑晚上报错」,看日志找不出规律。排查前先确认:这段时间到底有几个人、几个程序在用同一把 Key。

什么情况下不适用:单人交互式补全、一次只发一个请求的场景,基本碰不到并发上限,不需要额外加锁和排队,硬加反而拖慢体验。

怎么给自己的任务定一个安全并发数

不要凭感觉拍一个数字。先用同一把 Key 从并发 1 开始,逐步往上加,记录第一次出现失败或单次耗时明显变长的那一档,那就是你当前的真实水位。站内工具页提供了测速入口,可以直接拿来跑这组阶梯测试。

  1. 测基线从并发 1 开始逐档递增,每档固定跑一批同样的请求,记录失败率和平均耗时;失败率抬头或耗时跳涨的前一档就是你的水位
  2. 按任务类型分档交互式补全可以高一些;长上下文、带工具调用、生成大段代码的请求要压低,因为它们占用通道的时间更长,同样并发数下更容易互相顶住
  3. 留出余量把稳定水位打个七折左右作为日常默认值,剩下的余量留给人工操作和 CI 的突发任务
  4. 做成配置项把并发数抽成配置而不是写死在代码里,换通道、换档位时只改一个值,避免改动散落各处
任务类型并发倾向原因
短提示、单轮补全可以偏高单次占用通道时间短,周转快
长上下文、多轮对话中等偏低单次驻留时间长,叠高并发容易互堵
带工具调用、代码生成压到最低档链路步骤多,失败重试成本高
离线批处理、CI 任务单独分 Key 跑和交互任务隔离,避免互相抢额度

具体每档能跑到多少、不同通道之间差多少,不要去套别人的经验值,到站内价格与通道页面核对当时的说明和公开口径,再结合自己的阶梯测试结果定。

撞上并发报错的排查顺序

碰到 429 或排队超时,不要第一反应就是重发。先按下面的顺序走一遍,每一步只回答一个问题,能省下大量盲目试错。

  1. 看错误码和返回体先分清是硬性拒绝、排队超时,还是被网关截断。三类原因不同,处理手法也不同,别一律按限流处理
  2. 确认是不是自己人打自己人同一时间有没有多个脚本、插件、同事在共用同一把 Key。这一步最常见,也最容易被忽略
  3. 查通道侧的并发口径对照站内厂商目录与中转站目录里标注的限制说明,别拿 A 家的经验直接套到 B 家
  4. 再动策略按顺序尝试:降并发、加退避重试、把非实时任务挪到低峰、最后才考虑换通道或拆 Key
  • 失败后原地立刻重发,会把一次限流放大成持续雪崩
  • 把重试逻辑写在最内层循环里,等于每次小失败都换一个请求顶上去
  • 只在全局加一个总开关,出问题时无法按任务类型单独降级
  • 完全不记发起时间和耗时,事后无法区分是并发撞了还是单次本来就慢

什么情况下不需要走完这套流程:如果错误信息明确指向鉴权、参数或余额问题,那就不是并发问题,先按对应问题处理,别在并发上浪费时间。

上生产前的并发自查清单

下面这份清单适合在批量任务正式跑之前过一遍,尤其是多人共用账号或把脚本接进 CI 的场景。每条都是可验证的动作,不是原则口号。

  • 每把 Key 的用途写清楚:哪个给本地、哪个给 CI、哪个给同事,从源头避免共用
  • 批量任务必须带总步数上限和单次失败重试上限,超了直接停下报警,不要无限重试
  • 失败请求单独落库或落文件,支持重投,不要和成功请求混在一个数组里
  • 日志里带上请求发起时间和耗时,方便事后判断是并发冲突还是单次本身变慢
  • 上线前用阶梯测试复核一遍当前水位,通道或套餐有变动时重跑一次
并发问题的本质不是接口不行,而是同一时刻想要的东西超过了通道愿意同时给你的量。
下一步把你现在用的通道和各家的并发与限制说明对照一遍,再决定要不要拆 Key 或分档

常见问题

Codex 的并发上限是固定数字吗?

不是。它取决于你用的通道、账号档位、以及上游模型侧的瞬时配额,还会随负载浮动。所以别去背一个数,而是按站内厂商与平台目录里各家的口径说明,再用实测的方式量出自己当前的稳定并行数,按任务类型分档留余量。

为什么单个请求能跑通,一并发就报错?

因为单请求只验证了鉴权、参数和网络通不通,没有触碰并发口径。一并发就会同时暴露三件事:Key 是否被共用、通道的并发上限是多少、失败后有没有退避。按「先降并发、再加退避、最后分 Key」的顺序处理,通常就能定位。

降低并发太慢,有没有别的办法?

可以先分辨任务是否真的需要实时。非实时的批量任务改成排队消费、错峰跑,体感差别不大但压力小很多;实时任务则把长请求拆成多步短请求。如果确实要更高并发,再去比对各通道的限制说明做分流,而不是硬扛一个通道。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。