在 Codex 中切换 WanAPIs 的其它模型
Codex CLI、VS Code 插件、桌面端读的是同一份 ~/.codex/config.toml —— 这意味着改一次,三端同时生效,不用分别配置。本文以 deepseek-v4.1-flash 为例,讲清临时切换、永久切换,以及用 profile 维护多套模型配置随时互换。
接入步骤
- 1
先确认已接入 WanAPIs
config.toml 里应当已经有一个指向 WanAPIs 的 provider。下面的例子把它命名为 wanapis,密钥从环境变量 WANAPIS_API_KEY 读取。
~/.codex/config.tomlmodel_provider = "wanapis" model = "gpt-5.5" [model_providers.wanapis] name = "WanAPIs" base_url = "https://api.wanapis.com/v1" wire_api = "responses" env_key = "WANAPIS_API_KEY" - 2
命令行:临时切换(只影响本次)
加 -m 或 --model 启动即可,适合临时试模型。已经在会话里的话,输入 /model 可以直接调出选择器当场换 —— 注意这是命令行独有的,插件和桌面端没有斜杠命令,见下一步。
shellcodex --model deepseek-v4.1-flash # 非交互执行也一样 codex exec -m deepseek-v4.1-flash '把这个函数改成异步的' - 3
VS Code 插件 / 桌面端:用面板底部的模型选择器
图形界面里没有斜杠命令(输 /model 只会被当成普通文本发出去),切换入口是 Codex 面板【底部】的模型选择器 —— 点开就能同时选模型和推理强度。桌面端还可以按 Ctrl+Shift+M 直接调出它,VS Code 插件没有预设快捷键。
- 4
选择器里没有你要的模型?这是正常的
选择器列的是 Codex 内置认识的那些模型(GPT-5.4 / 5.4-mini / 5.5 等),经自定义 provider 接进来的名字(比如 deepseek-v4.1-flash)默认不在里面。有个很实用的细节:选择器只改 model、不动 model_provider,所以你在 WanAPIs 这个 provider 下选中 GPT-5.5,请求依然发给 WanAPIs —— 这些型号我们都有,选了就能直接用。真正需要动配置的,只有选择器里压根没有的名字,见下一步。
- 5
切到选择器里没有的模型:齿轮 → Open config.toml
不用离开编辑器:点 Codex 侧边栏的齿轮图标 → Codex Settings → Open config.toml,把 model 改掉再重启插件即可。配置三端共用,改完命令行和桌面端也一起变。要经常来回切的话,直接看下一步的 profile 做法更省事。
~/.codex/config.tomlmodel = "deepseek-v4.1-flash" - 6
推荐:用 profile 维护多套配置
经常在不同模型之间来回切的话,与其反复改 model 那一行,不如给每个模型建一个 profile。在 ~/.codex/ 下按 <名字>.config.toml 建文件,启动时用 --profile <名字> 选择。注意这是新版格式:老的 [profiles.xxx] 表写法已经不支持,继续用会直接报错并提示你迁移。
~/.codex/ds.config.tomlmodel = "deepseek-v4.1-flash" model_provider = "wanapis" model_reasoning_effort = "high" model_context_window = 900000 - 7
用 profile 启动
建好之后,一条命令切换整套配置(模型 + 推理强度 + 上下文上限)。可以按需要建多个,例如 ds / gpt / cheap 各一套。
shellcodex --profile ds - 8
进阶:把自定义模型注册进模型目录
如果你希望 Codex 把自定义模型当成「一等公民」—— 不再每次提示 Model metadata not found、上下文上限按真实值算 —— 可以用 model_catalog_json 指向一个模型目录文件,在里面为它写一条元数据。实测注册后那条警告确实消失、上下文按填写的值生效。条目里的 visibility 字段决定它是否列进选择器(list 显示 / hide 隐藏),不过图形界面是否一定会列出自定义条目跟客户端版本有关,没出现就仍按上一步改配置。
~/.codex/config.tomlmodel_catalog_json = "/Users/你的用户名/.codex/models.json" - 9
⚠️ 写模型目录的三个坑
一、格式很严:字段不全会直接报错,比如漏了 shell_type 就是 missing field `shell_type`。二、有些字段不接受 null(如 web_search_tool_type),填 null 会报 invalid type: null。三、也是最要命的 —— 目录文件解析失败会让 Codex 整个起不来(failed to parse model_catalog_json),命令行和插件一起罢工。所以最稳妥的做法不是从零手写,而是复制目录里一条已有条目,只改 slug、display_name、context_window 和推理强度这几项;改之前先备份。
- 10
验证
启动后 Codex 会把当前配置打印在顶部,确认 model 和 provider 两行是你要的即可;也可以到 WanAPIs 控制台「日志」页核对最新一条的模型名与扣费。
启动时的输出model: deepseek-v4.1-flash provider: wanapis reasoning effort: high
常见问题
提示 Model metadata for `xxx` not found 要紧吗?
不要紧,能正常对话。Codex 只内置了 OpenAI 自家模型的元数据,换成别的模型就会退回默认值。影响主要是它对上下文上限的判断 —— 在 profile 里加一行 model_context_window 指定即可。想彻底消掉这条警告,就用 model_catalog_json 给它写一条元数据(见上面的进阶步骤),实测注册后警告不再出现。
deepseek-v4.1-flash 在 Codex 里的上下文能有多大?
我们在网关侧实测到单次请求 94 万 tokens 仍然正常返回,三条线路分别跑到过 94 万 / 85 万 / 72 万。配置里填 model_context_window = 900000 是个留了余量的稳妥值,比 Codex 在缺元数据时退回的默认值大得多。
报错说 [profiles.xxx] 是 legacy 配置怎么办?
新版 Codex 不再支持在 config.toml 里写 [profiles.xxx] 表。把那段配置移到单独的 ~/.codex/<名字>.config.toml 文件里,并从 config.toml 中删掉原来的 [profiles.xxx] 段落即可。
VS Code 插件里输什么指令可以临时切换模型?
插件不支持斜杠命令,输 /model 只会被当作普通文本发出去。切换请点 Codex 面板底部的模型选择器,模型和推理强度都在那里选。要切的是 deepseek-v4.1-flash 这类自定义模型时,选择器里不会列出来,改用齿轮图标 → Codex Settings → Open config.toml(或 profile)改完重启插件。桌面端多一个 Ctrl+Shift+M 快捷键可直接调出选择器。
VS Code 插件和桌面端要单独配置吗?
不用。三端读的都是 ~/.codex/config.toml,改一次全部生效。唯一要注意的是插件和桌面端需要重启才会重新读取配置。
换成便宜模型到底能省多少?
Codex 每一轮都会带上自己的系统提示词和工具定义,即使你只说一句话,输入也有一万多 token。正因为输入量大,换成单价低的模型省下来的绝对金额相当可观,控制台日志里可以逐条对比。
现在就把 Codex 接到 WanAPIs
一个 API Key 调用 GPT、Claude、Gemini、DeepSeek、Kimi、GLM 等模型,国内直连、按 token 实付。