Selected model is at capacity. Please try a different model. 绕过去不使用Codex, OpenCode 里用 ChatGPT
一、问题背景:
手头有个 ChatGPT 订阅,最近疯狂提示Selected model is at capacity. Please try a different model. ,一般是被风控了,可以绕过去不使用codex,使用opencode。本文章介绍安装opencode网页版和桌面版。
原理是在 OpenCode 里直接 OAuth 登录账号来用。官网文档写得很简单,opencode auth login 就完事,但真上手才发现网页版和桌面版是两套逻辑,坑也各不一样。折腾了半天两边都通了,把过程记下来,省得别人再踩。
二、 网页版:CLI 起的 opencode web
网页版不是独立产品,就是 CLI 起的一个本地服务:
opencode web
浏览器自动打开一个界面,用起来和桌面版差不多。所以网页版的授权就是 CLI 的授权,下面说的就是 CLI 的流程。
登录
opencode auth login
选 OpenAI,浏览器弹出授权页,点完回来终端显示成功。
浏览器显示"登录成功",终端却报错
第一次登就栽在这。后来想明白了:OAuth 是分两半的。浏览器里点授权只是前半截,授权码要跳回 localhost 交给终端,终端再拿它去 OpenAI 服务器换令牌。浏览器显示成功只代表前半截完了,换令牌这步是终端自己发请求,挂了照样失败。
挂的原因九成是:终端不认系统代理。浏览器走系统代理所以授权页能开,但 opencode 终端进程是自己发 HTTP 请求的,Windows 的系统代理设置它不看,只认环境变量。所以登录前,在同一个窗口里先设上:
powershell
$env:HTTPS_PROXY="http://127.0.0.1:7897"
$env:HTTP_PROXY="http://127.0.0.1:7897"
$env:NO_PROXY="localhost,127.0.0.1,::1"
注意 NO_PROXY 得带上 localhost,不然跳回本地回调的请求也被送去代理,又是一种死法。
验证登录
凭据存在 ~/.local/share/opencode/auth.json。两条命令验证:
bash
opencode auth list # 应该能看到 OpenAI oauth
opencode models openai # 列出这个账号能选的模型
模型别乱选
登录成功后我随手选了 gpt-5.4,直接报错:
css
Bad Request: {"detail":"The 'gpt-5.4' model is not supported when using Codex with a ChatGPT account."}
ChatGPT 账号走的是 Codex 后端,不是所有模型都开放。我这个账号能用 gpt-6-astra、gpt-6.1-sol 这批,名字里带 codex 的 codex-spark 反而不行。碰上这个错别慌,不是登录坏了,换个模型就好。
三、桌面版:另一个世界
桌面版从官网下。想装到指定目录的话支持静默参数:
ini
opencode-desktop-win-x64.exe /S /D=D:\OpenCode\Desktop
/D 必须放最后,路径别带引号。
桌面版的凭据和 CLI 不通用
这是最大的坑。我在 CLI 登录得好好的,打开桌面版,模型列表里压根没有 OpenAI 分组。查了半天才发现:桌面版 v2 的凭据存在自己的数据库里 (~/.local/share/opencode/opencode.db 的 credential / account 表),根本不读 CLI 的 auth.json。两边登录状态完全独立。
用桌面版自带的命令行可以验证:
arduino
"%APPDATA%\ai.opencode.desktop\cli\2.0.27\opencode-cli.exe" auth list
显示 "No authenticated integrations",而同一时刻 CLI 的 auth list 明明有 OpenAI。数据库里那两张表也是空的,实锤。
界面里的"连接 OpenAI"按钮 403
桌面版设置里有授权按钮,点了之后浏览器能授权成功,界面却弹"授权失败:Request failed: 403"。
原因是桌面版背后跑着一个内嵌后端,换令牌是它发的,它和 CLI 一样不认系统代理,直连 OpenAI 从国内 IP 出去就是 403 区域拦截。我用带环境变量的方式启动(写了个 start-desktop.cmd,先 set 代理再 start exe),这个按钮还是 403------没完全坐实原因,怀疑是 Cloudflare 把它内嵌后端的请求指纹拦了。反正有别的路,就没再纠结它。
管用的办法:用桌面版自带的 CLI 登录
既然桌面版读自己的数据库,那就让写数据库的程序来登录。桌面版安装后自带一个 v2 命令行:
shell
%APPDATA%\ai.opencode.desktop\cli\2.0.27\opencode-cli.exe
终端里带上代理环境变量跑:
cmd
set HTTPS_PROXY=http://127.0.0.1:7897
"%APPDATA%\ai.opencode.desktop\cli\2.0.27\opencode-cli.exe" auth login
走完浏览器授权,凭据直接进桌面版的数据库。托盘退出桌面版再打开,OpenAI 分组和模型就出来了。
重启桌面版的正确姿势
顺带一个教训:桌面版是单实例的,光关窗口不算退出,后端还在跑,而且新启动时会探测旧后端接着用。我在 CLI 登录后重启桌面版,模型列表死活不更新,查到最后发现它一直连着登录前启动的那个旧后端,缓存了空状态。正确姿势是托盘图标右键退出,再启动。