
1. 先别急着怀疑自己的账号拆开这条报错看它究竟卡在哪一层大概每个长期用 Codex 干活的人都被这句话打断过Selected model is at capacity. Please try a different model.我第一次看到时第一反应是去检查自己的 API 额度和网络结果额度充足、网络正常、代码也没问题。后来才慢慢意识到这个报错说的根本不是你不行而是我这边忙不过来。这篇就把这条报错背后的机制讲清楚再给出从临时救急到长期规避的完整方案希望能帮你少走我当初走过的弯路。1.1 我实际撞上这个报错三种现场先描述几个我真实遇到过的情况方便你对号入座。第一种团队协作型。某个工作日下午办公室里五六个人同时在用 Codex 改同一个代码库有人改前端、有人改后端、有人让 Codex 帮忙写测试。没过多久几个人先后开始报这个错而且越来越频繁。第二种长会话积累型。我连续开了四五个小时的会话让 Codex 反复分析一个大型模块从项目结构聊到具体实现又让它帮我梳理迁移方案。到了后半程几乎每次交互都可能撞上at capacity。第三种新模型尝鲜型。某个新模型版本刚出来大家都在抢着用那几天几乎每次请求都可能在排队。你甚至不需要做什么大操作随便问一句这段代码什么意思都可能被弹出来。这三个场景的共同点很明显请求都打到了一个当前比较热门的模型上。Codex 作为一套服务端推理系统容量不是无限的。用户越多、请求越密集、单次请求的上下文越长模型服务端就越接近满载。一旦饱和调度器不会让你的请求无限排队而是直接甩给你一句换一个模型试试——这话听起来像建议实际上是服务端在自我保护和快速失败。1.2 at capacity 到底指什么满了我拿一个生活化的类比来解释。你可以把某个模型想象成一家热门餐厅餐厅的座位就是同时能处理的请求数后厨的出菜速度就是推理速度。饭点一到全城的人都来排号餐厅只能告诉你现在没位子了要不你去隔壁那家看看。隔壁那家就是另一个模型翻台率可能低一些、口味略有不同但至少能让你吃上饭。落到技术层面容量满了通常由这几个因素叠加造成单模型并发上限服务端为每个模型设定了并发额度超出部分的请求会被快速拒绝而不是排队等待。请求上下文过长Codex 的会话会积累大量文件内容、对话历史、工具输出。请求越长占用计算资源越多同样的服务容量能承接的请求数就越少。时段性峰值开发者普遍白天集中工作、下午和晚上达到高峰。全球不同时区的峰值叠加让某些热门模型更容易满载。组织级共享资源池如果是组织账号整个团队共享同一个容量池一个人开了十几个线程就会加速池子被耗尽。搞明白这一层你就明白了为什么换模型是最直接的解法它本质上是在把你的请求从爆满的队列挪到尚有富余的队列。不是你的请求有问题是入口被堵住了。1.3 快速判断这次是临时波动还是配置故障这个报错通常属于临时性故障不是封禁也不代表代码有问题。我给自己定了一个判断标准报错是间歇性的过几分钟再试又恢复了那就是容量波动不用过度反应也不需要改什么配置。连续一两天、换了好几个时段都稳定复现那就要往账号配置、API 密钥有效性、网络连通性这些方向排查而不是继续跟容量较劲。提示报错原文里的try a different model是服务端给出的标准提示不代表你的账号被限制。只要你的请求偶尔能成功说明账号状态健康。2. 五分钟见效的操作切换模型与搭一条自动降级链既然报错的核心是你选的模型满了那最快见效的方向就是模型选择。这里分两层说会话期间的临时切换和配置文件里的长期降级链。2.1 交互式会话里的即时切换/model 怎么用Codex 的交互式会话里直接输入/model就会弹出模型选择列表。选中一个不同的模型后续的对话就会切到新模型上继续不需要重启会话之前聊过的内容也还在。这个操作本质上就是服务员告诉你 A 餐厅还在排队你可以直接去 B 餐厅的窗口点单。Codex 会把当前会话的上下文带过去你贴过的文件、提过的需求都还在对话历史里只是推理引擎换了。我的个人建议是报错出现后先别急着重试先切模型。因为如果你一直死盯着同一个满载模型反复请求大概率是持续失败白白消耗耐心。切一次模型通常十几秒内就恢复了。我甚至有段时间把/model当成一个习惯动作只要看到报错就切几乎形成条件反射。2.2 config.toml 里的 fallback 配置与版本差异临时切换适合偶发情况。如果你一天要撞上好几次那就该在配置层面把降级链搭好让 Codex 自己知道首选模型满了就自动换下一个。Codex 的配置文件通常位于用户目录下的~/.codex/config.toml。核心配置长这样model gpt-5-codex model_fallback [gpt-5-mini, o4-mini, gpt-4o]第一行是首选模型第二行是降级链。当首选模型返回容量已满或暂时不可用时Codex 会按顺序尝试列表里的下一个模型。这样即使你不在电脑前手动切它也能自己绕开拥堵。需要提醒的是不同版本的 Codex 对配置项的命名可能有差异。我见过有版本用model_provider_fallback也有版本要求 fallback 列表里的模型必须属于同一个服务商否则不生效。改完配置后务必执行一条真实请求验证效果别想当然地以为改了就生效。验证方式很简单在会话里跑一个小任务然后故意观察日志或者使用/model查看当前实际生效的模型。提示不要把两个同样热门的模型同时放在 fallback 链的前两位。通常的做法是能力较强但可能拥挤的模型放第一位稳定但稍弱的放第二位既保质量又保可用性。2.3 备选模型怎么排优先级一张取舍参考表在配置降级链之前先搞清楚不同模型的定位不然容易排错顺序。我整理了一张简单的对比表方便你按自己的需求排优先级模型定位优点需要留意的点顶级代码模型复杂任务表现最好跨文件理解深入用户多、容量紧张高峰期更容易满载同系列小型模型响应快、容量相对充足复杂重构和长链路分析会吃力通用对话模型稳定性好几乎不撞容量代码结构化能力稍弱需要给更具体的指令经济型模型便宜、快、几乎不排队长上下文分析容易偷工减料我自己的取舍逻辑日常小需求直接走稳定型模型不纠结大的重构、跨文件修改、技术方案设计才用顶级模型而且尽量安排在低峰时段。把顶级模型的使用频率降下来撞容量的概率自然就降下来了。这不是让你降低质量而是把宝贵的顶级算力用在刀刃上。3. 从撞容量到绕开容量重试节奏、上下文瘦身与任务拆分如果切了模型还是偶尔碰到或者你因为某些原因不想换模型那就得从请求层面做文章。这部分是工程思维核心是三个词重试、节流、拆分。3.1 换掉无脑重试指数退避的实际节奏遇到报错人的本能是立刻再发一次请求。连续点几次发现还是不行于是更用力地反复试。这种做法对容量问题毫无帮助反而会加重服务端压力——你一个人就把自己那点请求变成了一股小型流量冲击。正确做法是指数退避exponential backoff。简单说就是第一次失败后等 2 秒第二次失败等 4 秒第三次等 8 秒依次翻倍最多等 60 秒左右就停手过一段时间再开启下一轮。如果你在脚本里调用 Codex 的 API可以直接把这个逻辑写进代码。如果你用的是交互式会话那更简单失败一次后先去整理需求、看文档、写下一个任务的说明过几分钟再回来。我实测下来大部分容量报错在 5 到 10 分钟内会自动缓解根本不需要一直盯着刷新。等待期间做点别的比干等高效得多。3.2 会话瘦身为什么能直接降低报错概率容量问题与请求的上下文长度是强相关的。Codex 的每个会话都会把历史对话、文件内容、工具输出打包进后续请求里。会话越长上下文越长单次请求占用的推理资源越多被拒绝的概率也越高。所以治本的一招是会话瘦身。我给自己定了几个规矩一段任务完成后及时新开会话而不是一直聊到下班。新会话开始时不要把上一轮的分析结果原封不动贴回来只带关键结论。如果只是让 Codex 修改某个大文件明确告诉它只看第 X 到 Y 行或只关注某个函数而不是让它反复读整个文件。需要它了解项目结构时给目录树和关键文件的摘要即可别一次性贴几十个文件内容。这个习惯一开始会有点反直觉因为你觉得多给点上下文它理解得更清楚。实际上上下文越长模型越容易在无关信息里丢失重点而且请求成本更高、更容易撞容量。做到会话瘦身之后响应速度和稳定性都会肉眼可见地提升。3.3 自治模式与 API 层的多模型兜底Codex 有两种工作方式一种是你盯着它一步步改另一种是给它一个明确目标让它在后台自主迭代完成后回来汇报。第二种方式对容量问题的好处是天然降低了请求频率。它会在内部合理安排推理节奏不会因为你站在旁边等而频繁发起请求。如果中途遇到容量报错它通常会自行重试你只需要在最后检查结果。大批量的代码迁移、技术债务清理这类任务用自治模式远比手动一步步催更稳定。给它的指示越清晰它自主工作的成功率越高也越不容易因为来回对话把上下文堆得很长。如果你直接调用 API而不是用交互式界面那可以在调用层做一层更细的兜底import time models [gpt-5-codex, gpt-4o, o4-mini] for attempt in range(5): for model in models: try: result client.responses.create(modelmodel, inputuser_input) return result except CapacityError: print(f{model} 容量不足尝试下一个) continue wait min(2 ** attempt, 60) time.sleep(wait)核心逻辑是先依次尝试多个模型全部失败后等一段退避时间再进入下一轮。多轮下来只要服务端容量恢复请求就能被接住。实际落地时要根据对应 SDK 的异常类型做判断我这里用的是示意写法关键思路就是多模型尝试 退避等待不要一棵树上吊死。4. 治本思路错峰调度、会话卫生与更稳的长期路径前面几招属于战术能解决大部分偶发问题。如果你长期高频使用 Codex还得从使用习惯和整体工作流上做调整这一节讲战略。4.1 摸清高峰规律把重活挪到低峰时段容量问题有明显的时段规律。根据我长时间观察工作日的下午和晚上是全球开发者的活动高峰某些模型在这个时候最容易满载。相比之下清晨和深夜的容量通常非常宽松。如果你手头有大量不紧急的任务比如批量重构、生成测试用例、整理接口文档完全可以挪到空闲时段批量执行。我自己经常把重活安排在晚上第二天早上起来看结果效果出奇地稳。这不是让你非要在深夜加班而是把不同性质的任务分配到正确的时段重要且紧急的任务放在容量稳定时段或者干脆用稳定型小模型边做边调。重要但不紧急的任务可以放在低峰时段跑顶级模型质量优先。不重要但耗时的任务随时可以丢给自治模式慢慢跑不占用你的工作时间。错峰不是玄学本质上是让请求避开容量波峰用最小成本换取最稳定的可用性。4.2 一个任务一个会话我的会话卫生规则前面提到过会话瘦身这里再展开一下会话卫生。很多人喜欢一整个上午都开着同一个 Codex 会话从项目背景一路聊到收尾。这样做最直接的后果就是上下文爆炸请求体越来越重服务端越来越容易拒绝。我给自己定的规矩非常死板一个任务一个会话任务结束立刻关掉不恋战。会话持续超过一小时主动开新的把关键结论用几句话转述过去。每个新会话开头先用一两句话说明当前代码库背景 我要做的事而不是一上来就贴代码。每次只给 Codex 完成当前步骤所需的信息做完一步再给下一步的信息。坚持这套规则之后容量报错的频率肉眼可见地下降。更重要的是每次请求的响应速度也更快了因为服务端不需要处理一个巨大的上下文堆。代码要讲卫生会话也要讲卫生。4.3 频繁满载时值得考虑的长期替代方案如果你的团队规模较大或者业务对可用性要求极高云端推理容量的波动可能已经成了真正的瓶颈。这时候可以考虑几条更稳的路径本地部署代码模型在自己或公司的 GPU 服务器上跑开源模型完全不受云端容量影响隐私性和可控性也更好。代价是需要硬件投入和运维成本。混合模式日常简单任务走本地模型复杂任务走云端顶级模型。本地扛住高频请求云端只承接少量高质量请求容量压力会小很多。独立容量池如果是组织级使用可以考虑申请独立的资源池把容量波动从共享资源池中隔离开来费用更高但稳定性最好。这几条路径的投入都不小但如果容量问题已经影响到交付节奏就值得认真评估。我的建议是先把前面章节的战术性方法用足真不够了再上战略级方案。大多数个人开发者和中小团队把配置降级链和会话卫生做到位就已经能解决九成的问题了。5. 实测验证我的固定流程与最容易踩的四个误区讲到这里把实战部分做个总结。哪些方法我实测有效哪些方向我踩过坑以及一张可以直接存下来用的速查表。5.1 我一直在用的组合拳我现在应对容量报错的固定流程是这样的报错出现先在交互式会话里输入/model切到稳定型模型一般立刻恢复。如果临时切换不方便就等 5 到 10 分钟再试同时利用这段时间整理思路、拆解下一步任务。长期项目一定在config.toml里配好model和model_fallback让降级自动化。重要任务安排在容量稳定时段批量任务放在低峰时段后台跑。坚持一个任务一个会话绝不在一个会话里无限堆积上下文。这套组合拳用下来容量报错的出现频率比最初下降了大约八成。剩下的两成属于极端高峰直接错峰处理完全没有心理负担。5.2 最容易误判的四个方向有几个坑我自己踩过也看别人反复踩分享出来帮你绕开坑一以为是额度问题疯狂升级套餐。容量报错和配额超限不是一回事。配额超限通常会明确提示rate limit或quota exceeded而at capacity是服务端暂时没有可用资源。升级套餐对前者有效对后者基本无用别花冤枉钱。坑二反复重启客户端以为能刷新状态。重启客户端不会改变服务端容量。你重启一百次服务端该满还是满。真正有效的是换模型、等一等或者拆小请求。坑三只改配置不验证。很多人往config.toml里加了model_fallback就以为万事大吉结果发现根本没生效。版本差异、配置项名写错、配置文件没被加载都可能导致无效。改完配置一定要跑一条实际请求验证别信改了就生效。坑四误以为换模型会丢失所有上下文。切换模型不会清空当前会话的历史信息。Codex 会把上下文带过去你只需要重新发起一次回复即可。别因为担心丢上下文而硬扛着不切得不偿失。5.3 排查速查表最后是一张速查表建议收藏备用现象优先处理动作备注偶发容量报错等待 5-10 分钟后重试或切换模型大概率是服务端容量波动无需折腾高频容量报错配置 model_fallback 降级链做会话瘦身长期方案是错峰与任务拆分换模型后仍报错检查配置是否生效、API 密钥是否有效按版本查文档确认配置项名称报错伴随超时检查网络连通性与请求上下文大小网络层问题按网络层排查组织内多人同时报错协调团队错峰使用或评估独立容量共享容量池被多人打满我在实际使用中最大的体会是把容量报错当成服务端给的一个信号而不是一个故障。它提醒你该切换、该等待、该调整使用方式。顺着这个信号去优化工作流整个 Codex 的使用体验都会变得更稳而不是每次都被这句话打断思路。下次再看到这条报错先深呼吸切个模型整理一下上下文——大概率就解决了。