☰
Codex报错Selected model is at capacity:四类根因与三套恢复方案
2026/10/27 17:22:59 网站建设 项目流程

在终端里敲下codex,回车等待一个交互会话,结果需求还没输入,屏幕上先弹出一行红字:Selected model is at capacity。如果你是第一次遇到,大概率会反复重试,不行就把 Codex 卸载重装,结果折腾一圈回来还是老样子。实际上,这个提示既不代表你的账号被封了,也不代表 API Key 失效了,更不总是模型服务彻底挂了。它的准确含义是:你当前会话所选用的模型,在服务端对应容量池里已经无法再为你分配执行资源。

2026 年的 Codex 生态里,这个报错的出现频率比前两年高不少。原因是模型选择更多、配额体系更复杂、自动化脚本跑得更密集,很多看起来是容量报错的问题,根因其实藏在配置、账号归属或者网络链路上。今天我就围绕这个报错,把 4 类触发原因和 3 套恢复方案完整拆开讲透,顺带附上我实测过的验证手段和防复发经验。不管你是刚装好 Codex 的新手,还是在 CI 里批量跑 Codex 任务的老手,这篇都能直接用。

1. 这个报错到底是谁抛出来的:先看清“容量错误”在执行链路上的位置

很多人一看到at capacity就默认是模型服务端的锅,其实这个错误是客户端、服务端、账号体系三方协作后的结果。只有先搞懂它的触发链路,排查时才不会瞎打转。

1.1 一次完整请求要经过的四个判断关卡

你在 Codex CLI 里发起一个会话,请求不是直接跑到模型推理服务上的,它会依次经过下面这些环节:

  1. 客户端配置解析:Codex 读取全局配置~/.codex/config.toml和项目级配置.codex/config.toml,确定当前用的model_provider、模型名、认证凭据、组织 ID。
  2. 认证与路由:请求携带 API Key 或 OAuth Token 到达服务端的接入网关,网关先验证身份,再根据模型名把请求路由到对应的推理集群。
  3. 配额与容量调度:推理集群在真正排队执行任务前,会检查你的账号层级、订阅档位、是否有组织配额,以及目标模型当前还有没有空闲算力分片。
  4. 执行与返回:确认能执行后才开始推理,并把结果流式返回给客户端。

Selected model is at capacity的渲染逻辑,通常是发生在第 3 个环节。服务端返回的底层信息往往是 HTTP 429(请求过多)或 503(服务不可用),并附带了Retry-After之类的响应头。Codex 客户端识别到这类状态码后,统一包装成了一句更“人话”的提示。

1.2 为什么 2026 年这个“容量”错误变多了

这不是错觉。我实际对比了一下,过去半年里这个报错至少有三个前置条件在同时变化:

  • 模型碎片化严重:像gpt-5.6-sol、gpt-5.5-codex这类专用模型,只在特定区域、特定接入点部署,某个区域容量满了,其他区域并不能无缝补上。
  • 容量按档位隔离:个人订阅、企业组织、API 按量付费,这三类账号走的可能是完全不同的算力池。高峰期时,低档位账号往往会被先挤出,哪怕付费档位还有很多余量。
  • 自动化任务大量涌入:现在很多团队把 Codex 接到 CI 流水线里做代码审查、批量重构、文档生成,短时间并发请求量一下子上来了,触发偏限流策略,错误码同样以 capacity 形式出现。

明白了这一点,你就知道第一步不能盲目重试,而是先判断:这是一个真容量问题,还是一个被包装成容量问题的配置或账号问题。接下来的 4 类原因,就是在帮你做这个区分。

2. 四类触发原因逐项排查:从“真过载”到“伪装成容量错误”的坑

我把实际遇到的 cases 归成了四类,每一类都给出特征、判断方法和验证手段。你在排查时按顺序过一遍,基本能定位到自己属于哪一种。

2.1 第一类:服务端容量真实过载,高峰期或新模型首发最明显

这是最直白的“真·容量”问题。当目标模型在当前区域的所有可用计算分片都处于满载状态,你的请求就会被暂时拒绝。这类情况有几个明显特征:

  • 错误出现有很强的时间规律,比如工作日上午十点到下午四点频率最高。
  • 新模型刚发布后的几个小时内,几乎所有人都会遇到。
  • 切换成另一个热度低的模型后,请求马上恢复。
  • 等待几分钟到半小时再重试,问题自动消失。

判断方法也很简单:打开服务状态页看一眼,如果对应模型区域标了黄色或红色,那就是服务端问题。另外可以在终端里带--verbose参数重新发起请求,看底层返回的 HTTP 状态码和响应头:

codex --verbose exec "say hello"

如果日志里出现429,并且服务端响应头里有Retry-After字段,基本可以确定是容量调度层面的限流,不是配置错误。

提示:真容量问题属于“弹性自愈”类型,越用力重试越容易被限流策略盯上,正确做法是拉开重试间隔。

2.2 第二类:账号或组织配额形态异常,导致你的“名额”被挤占

这一类最容易误判。它表面上看是容量报错,实际上你的账号在容量调度时已经被降级处理了。常见场景有这么几个:

  • 多设备同时在线占用会话:Codex 桌面版、CLI、IDE 插件同时开着,共享同一个账号的并发额度,某个终端发起新请求时名额已满。
  • 组织级配额和个人 Key 冲突:你人在组织工作区里,配置文件里却只有一个个人的 API Key。组织管理员给成员分配的是项目级独立额度,个人 Key 在组织数据面里可能没有分配容量。
  • 试用额度被算力池降级:有些免费额度或试用 Key 在公开模型池里优先级很低,高峰期更容易被标记为 capacity。

这类问题的特征是:切到另一个模型往往也不行,因为问题不在某个模型上,而是整个账号的调度优先级都偏低。排查时按以下顺序做:

  1. 打开你的账号用量页面,看是否还有剩余配额。
  2. 打开 Codex 里的组织设置,确认当前登录身份是个人账号还是组织成员。
  3. 退出所有其他设备的 Codex 会话,只保留一台设备再试。

如果终端里出现codex无法加载组织设置的提示,那基本就是组织身份认证出了问题,我后面第 4 节会专门说。

2.3 第三类:配置文件指定了不可用的模型或 Provider 路由

这可能是一堆里面最隐蔽的。配置文件如果指向了一个 Codex 客户端本身不支持的模型,或者把请求路由到了一个负载已满的第三方兼容端点,错误码往往会被包装成Selected model is at capacity,让你误以为是官方容量问题。

一个典型案例如下。你的~/.codex/config.toml里写的是:

model = "gpt-5.6-sol" model_provider = "openai" [model_providers.openai] name = "OpenAI" base_url = "https://api.openai.com/v1"

但实际你的接入方式(比如通过某个中间网关)并不支持gpt-5.6-sol这个模型在 Codex 会话模式下的调用,服务端就会返回类似“model is not supported when using codex with a...”的底层信息,客户端再包装成容量提示。

还有一种更常见的情况是自建的兼容端点负载不均衡。你配置了base_url指向某个第三方兼容服务,而那个服务的某个后端节点已经满载。这时候官方模型是好的,但你的流量被路由到了差节点。最简单的验证方法:临时把配置里的base_url和模型改成官方默认值,如果报错消失,说明问题和配置路由有关,而不是官方容量问题。

排查配置文件时,如果终端里出现类似codex is ignoring 1 unrecognized configuration setting的警告,也要留意,这通常意味着某个配置项写错了名字或格式,Codex 会直接忽略它,但不会中断运行。比如你把approval_policy写成了approval-policy,Codex 会忽略这个设置,导致后续行为不可预期。

2.4 第四类:本地网络出口不稳定,被网关错误翻译成容量提示

这一类在国内开发者里尤其容易被误判。你的 API Key 和配置都是对的,但请求根本没能正常到达服务端的容量调度层。比如本地出口网络在特定时间段波动,DNS 解析到了一个异常节点,或者所在网络环境对 API 域名的访问进行了限速,这些情况会让服务端返回异常的连接结果,客户端在重试几次后,把连接层的失败也渲染成了容量类提示。

判断方法比较简单。你可以用curl直接测一下服务端连通性和响应头:

curl -i https://api.openai.com/v1/models \ -H "Authorization: Bearer $OPENAI_API_KEY" \ --max-time 15

如果你能正常拿到 JSON 列表,说明基本网络链没问题;如果卡住、超时,或者返回了意想不到的页面内容,那问题大概率不在模型容量,而在你的网络链路和 DNS 解析上。这类问题通常伴随着 Codex 界面里频繁出现reconnecting、正在重新连接字样。

提示:网络类故障有个典型特征——错误出现在固定阶段,重试多少遍都一样,切换模型、切换账号都不管用。如果你发现换什么模型都报同一句 capacity,先把网络链路和 DNS 排掉再折腾配置。

3. 三套恢复方案实操:区分“救急”“续命”和“根治”

定位到具体原因之后,恢复手段才有意义。我按照紧急程度和维护深度给出三套方案,你可以根据自己对 Codex 的依赖程度来选择执行到哪一步。

3.1 第一套:救急方案,两分钟内把会话跑起来

如果你只是临时要用,不想花时间深究,走下面四步基本能覆盖大部分“伪容量”问题:

  1. 换一个模型重试。官方一般会提供两三个可用模型。如果你用的是gpt-5.6-sol,可以临时切到gpt-5.5-codex:
codex --model gpt-5.5-codex exec "你的任务描述"
  1. 清理掉旧的会话上下文。有些时候是历史会话恢复时占用了过多上下文空间,导致调度失败。退出当前交互式会话,删除或重命名~/.codex/sessions里的对应记录,再重新开会话。
  2. 看Retry-After头,按服务端建议的时间间隔等待。不要无脑每隔几秒点一次,规范做法是先等 30 秒,不行就递增到 1 分钟、2 分钟、5 分钟,最久不建议超过 15 分钟。
  3. 重启客户端进程。特别是桌面版和 IDE 插件,长连接断掉后,客户端内部的会话状态经常是坏的。彻底退出进程再启动,比点十次“重新连接”管用。

这套方案打的是“快速恢复任务”的目的,不解决根因,适合临时赶工时用。很多人用完发现半小时后又报了,是正常的——你还没动到真正的根因。

3.2 第二套:续命方案,从配置层排除路由和模型隐患

如果你希望接下来几周不再频繁遇到这个报错,就得把排查重点放到配置文件上。我先给一个最小化官方配置样例:

model = "gpt-5.5-codex" model_provider = "openai" approval_policy = "on-request" [model_providers.openai] name = "OpenAI" base_url = "https://api.openai.com/v1"

对照以下三点逐项检查你的配置:

  1. 模型名和 Provider 是否匹配。如果模型是gpt-5.6-sol,但你在model_providers里自定义了一套第三方端点,必须确认那个端点真的支持这个模型。不支持的话,改回官方端点。
  2. base_url结尾的/v1是否正确。很多第三方兼容服务要求精确到/v1,少了这个路径会 404 或路由异常。
  3. 配置项拼写是否规范。推荐用自带检查命令查看当前配置是否被完整加载:
codex doctor

如果输出里有unrecognized configuration setting之类的警告,说明配置里存在被忽略的无效项,哪怕不影响启动,也应该清理掉。无效配置项很容易制造怪异行为,比如你以为设置了某个模型,实际 Codex 压根没读到。

如果你所在团队或社区里经常出现官方模型容量满的情况,还可以在配置层面预留一条“备援线路”——接入兼容 Codex 协议的其他模型服务。比如有些开发者会把模型供应商切换到国内可直接稳定访问的服务,配置如下(仅供参考,具体参数以你的服务商文档为准):

model = "deepseek-chat" model_provider = "deepseek" [model_providers.deepseek] name = "DeepSeek" base_url = "https://api.deepseek.com/v1"

提示:切换备援线路后,Codex 的 Agent 工作流仍然能跑,但模型能力上限可能和官方最新模型有差距。建议把备援线路留给“只求跑通不求最优”的场景,比如批量文档生成、简单代码解释等。

3.3 第三套:根治方案,从账号与订阅层面解决容量分配

配置层面做完,剩下的问题大多在账号层。这套方案需要你打开浏览器操作,属于一劳永逸的类型:

  • 确认当前账号是个人还是组织成员。如果你是在组织工作区里使用 Codex,个人 Key 的容量优先级往往不如组织分配的项目额度。这时候正确的做法是让组织管理员给你分配项目级 Key,或者在配置文件里加上组织 ID,把请求归入组织额度。
  • 检查订阅档位和用量限额。打开账号的用量详情页,看看是不是已经触达了月度用量上限。如果用了免费额度或低档位订阅,高峰期的调度优先级本身就低,升级档位是最直接的解决方案。
  • 清理占用额度的历史设备。在账号设置里查看已经授权的设备列表,把不用的设备踢掉,避免并发会话把额度占满。
  • 自动化任务建议使用服务账号或专用 Key。如果你的 Codex 同时跑在开发机和 CI 上,建议给 CI 单独建一个专用 Key,并设置独立的用量告警,避免两边互相挤占。

这三套方案可以叠加使用。我的建议是:第一套解决当前,第二套解决一周内,第三套解决长期。如果你只是偶尔用一次,做第一套就够了;如果你靠 Codex 吃饭,至少把第二套和第三套都过一遍。

4. 恢复后的验证清单,以及最容易复发的三件连带故障

容量报错恢复后,先别急着投入大批量任务,按下面的清单做一轮验证,确认不是假恢复。假恢复的情况很常见:你切换模型后任务能跑,但根本原因是配置路由指错了,切换模型只是碰巧绕开了坑。

4.1 三步验证法:短请求、完整任务、用量观测

第一步,发一个短请求,确认响应流畅。第二步,跑一个完整的代码库任务,确认 Codex 的 Agent 循环能正常走完——比如让它读一个文件、改一个函数、再生成测试用例,全程观察有没有中途断开。第三步,回看账号用量页面和本地日志,确认没有隐藏的重试风暴。

如果这三步都正常,说明恢复有效,可以继续使用。如果第二步中途报错,你得回头检查是不是模型能力限制导致工具调用失败,而不是容量问题。这两者的处理方法完全不同。

4.2 连带故障一:reconnecting循环不退出

容量报错解决之后,Codex 客户端有时会一直卡在重新连接状态。这多半是客户端的长连接已经被服务端掐断,但本地进程还在等心跳恢复。处理办法不是硬等,而是彻底退出所有 Codex 相关进程再重启:

# macOS / Linux pkill -f codex

Windows 上可以打开任务管理器,结束所有 Codex 相关进程后重新打开。实测下来,重启一次比反复点重连有效得多。

4.3 连带故障二:组织设置加载失败

如果打开客户端出现codex无法加载组织设置,说明客户端的组织身份信息已经失效了。常见原因有两个:一是你的登录 Token 过期,二是组织管理员调整了权限还没有重新同步。处理办法:

  1. 退出当前账号,重新登录一次。
  2. 检查系统时间是否准确,时间偏差过大会导致 Token 校验失败。
  3. 如果还是不行,删除本地认证缓存后重新登录(具体路径可以在codex doctor输出里看到)。

4.4 连带故障三:配置项被忽略却还在运行

前面提过的unrecognized configuration setting会在容量问题之外继续带来隐性风险。我的建议是,如果codex doctor报告了配置警告,当天就顺手清理掉,不要带着警告往下跑。具体做法是打开配置文件,对照官方文档逐项核验键名,拿不准的键先注释掉,重启后观察行为变化。

5. 长期预防:把容量报错挡在“准备阶段”的实操思路

最后这部分我不讲大道理,直接分享我目前自己在用的预防组合拳,一套是启动脚本,一套是任务侧策略。

5.1 在启动 Codex 前,先让脚本替你做一次“容量探测”

与其看到报错再排查,不如在启动前先用脚本探测一下目标模型当前是否可用。下面是一段基于官方 API 的健康检查脚本(需要提前设置好环境变量OPENAI_API_KEY):

#!/usr/bin/env bash # health_check.sh MODEL="${1:-gpt-5.6-sol}" HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \ https://api.openai.com/v1/models \ -H "Authorization: Bearer $OPENAI_API_KEY" \ --max-time 10) if [ "$HTTP_CODE" = "200" ]; then echo "API 链路正常,继续启动 codex" codex --model "$MODEL" "$@" else echo "健康检查失败 HTTP $HTTP_CODE,尝试切换模型或等待重试" codex --model gpt-5.5-codex "$@" fi

这段脚本不复杂,但能帮你避免把大量时间浪费在等待超时上。尤其是早上刚开工、新模型刚发布这类时段,先探一下再启动,体感差别很大。

5.2 自动化任务必须设计退避与降级策略

如果你在 CI 里跑 Codex,必须在任务层面预设退避逻辑。基本策略是:收到 429 或 capacity 报错后,按指数退避等待:第一次等 30 秒,第二次 1 分钟,第三次 2 分钟,最多间隔 5 分钟,超过三次后直接切换到备援模型。下面是一个用 Python 实现的简化版重试逻辑:

import time import subprocess attempts = 0 max_attempts = 3 wait = 30 while attempts < max_attempts: result = subprocess.run(["codex", "exec", "your task"], capture_output=True, text=True) if "capacity" in result.stderr: attempts += 1 print(f"容量报错,等待 {wait} 秒后重试") time.sleep(wait) wait *= 2 else: break

这套逻辑的实际价值在于,它能区分“临时容量抖动”和“持续不可用”。如果是临时抖动,等一会儿就能继续;如果是持续不可用,三分钟后切模型,不会让整个流水线卡死。

5.3 团队长期使用,固定“黄金模型组合”并关注发布节奏

在团队内部,建议维护一个codex-models.md文档,记录当前验证过好用的模型、备援模型、各自适用的任务类型。每次官方发布新模型后,不要立刻全员切换,先让一两个人跑一天测试,确认稳定性再同步给大家。我自己踩过不少次“新模型发布当天全员切换,第二天集体报错”的坑,这种做法能最大程度避开新模型的容量洪峰。

5.4 养成记录错误时间线的习惯

每次遇到Selected model is at capacity,顺手把时间点、模型名、HTTP 状态码、当时的操作类型记到本地日志里。记录多了之后,你会很容易发现规律:比如每周二下午固定出现,或者每次跑全仓重构任务时才出现。这种规律性信息比任何理论分析都更有指导价值。

实测下来,容量报错本身不可怕,它更像一个信号灯,告诉你当前这套组合在特定时间、特定配置、特定任务类型下已经到达了容量上限。只要把这几个变量拆开排查,绝大多数情况都能在十分钟内恢复,并且能通过调整配置和账号体系避免短期内再次发生。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询