跳转到主要内容
Codex CLI 是 OpenAI 官方的终端编程工具。接入 AIHubMix 后,你只需一个 API key 就能在终端里调用并自由切换 GLM、Claude、Gemini、DeepSeek 等各家模型,无需绑定单一厂商。本文覆盖两种接入方式:基础方式(profile + 固定单模型,最快上手)与自定义模型方式(用 model_catalog_json 目录文件,在 /model 列表里随时切换)。

安装

官网下载(macOS 版本)

https://openai.com/zh-Hans-CN/codex/

使用命令行安装

环境变量配置

使用配置文件配置

  1. 修改 ~/.codex/config.toml 配置文件,增加如下配置:
  1. 修改 ~/.codex/auth.json 配置文件,修改如下配置:

通过 cc-switch 配置

  1. 运行 CC-Switch,添加供应商。
CC-Switch 添加供应商界面
  1. 在预设列表中选择「AiHubMix」。
在 CC-Switch 预设列表选择 AiHubMix
  1. 在「API Key」栏中填写你的密钥并点击「添加」保存设置。
在 CC-Switch 填写 API Key 并保存
  1. 返回首页,在供应商列表中选择「AiHubMix」,点击「启用」即可使用。
在 CC-Switch 启用 AiHubMix 供应商

使用 Codex

在终端中使用

  1. 打开终端,定位到你的项目目录,然后运行 codex 命令。
  1. 根据需求,设置权限。
Codex 启动时设置审批权限
  1. 根据需求,选择需要使用的模型。
Codex 选择使用的模型
  1. 输入自然语言,若正常响应,则配置成功。
Codex 终端输入自然语言并正常响应

在 Codex 桌面端使用

  1. 打开 Codex 桌面端,选择工作目录。
  2. 在输入框输入任务,若正常响应,则配置成功。
Codex 桌面端输入任务并正常响应

实用命令参考

帮助命令

完整命令选项

在 Codex 中使用自定义模型

Codex 默认只在 /model 列表里展示 OpenAI 官方模型。如果你想直接从列表中选择 AIHubMix 上的任意模型(GLM、Claude、Gemini、DeepSeek、Kimi、Qwen……),可以用官方支持的「自定义模型」机制:通过一个本地 JSON 文件(model_catalog_json)声明可选模型,再用 [model_providers.aihubmix] 把请求指向 AIHubMix。
官方说明:Advanced Configuration · OSS mode / local providers

两种接入方式

本页前面「环境变量配置」讲的是基础方式,本节讲的是自定义模型方式,区别如下,按需选择: 整体流程只有 4 步:生成目录文件 → 改 config.toml → 设环境变量 → 重启选模型

第 1 步:生成模型目录文件

目录文件是一个 { "models": [ ... ] } 结构,数组里每个元素描述一个可在 /model 里选择的模型。下面先用一个固定模型讲清字段,再给批量生成前 30 名的脚本。

1.1 先理解格式:固定一个模型

下面是一份已验证可被 Codex 解析的最小完整目录(只含 glm-5.2 一个模型)。直接存成 ~/.codex/model-catalogs/custom-models.json 就能用;想要更多模型,就往 models 数组里继续追加同样结构的条目。
字段说明(你通常会改的几个):
其余字段是必填且值固定的base_instructionsavailability_nuxupgradesupports_reasoning_summariessupport_verbositydefault_verbosityapply_patch_tool_typetruncation_policysupports_parallel_tool_callsexperimental_supported_tools。新版 Codex(已在 codex-cli 0.130.0 上验证)严格解析,少任何一个,整份目录都会被丢弃并回退到内置目录,报错形如 missing field base_instructions,表现就是「/model 里一个自定义模型都看不到」。所以上面这份示例不能再删字段。
关于 base_instructions:它是该模型的系统提示词。示例里用一句话占位,模型能正常跑;想要最接近原生 Codex 的编码表现,把它换成 codex debug models --bundled 里任一内置模型的完整 base_instructions(下一节的批量脚本就是这么做的)。
官方目录用 snake_case 字段(display_namesupported_in_apivisibility)。两类错误都会让整份目录被丢弃、/model 里看不到模型:缺必填字段会报 missing field ...;用了 displayNamehidden 这类 camelCase 旧格式或不认识的取值会报 unknown variant ...。以本文这套字段为准即可避开。

1.2 批量生成前 30 名

手写多个条目容易漏字段。要把 AIHubMix 模型列表接口 的前 30 个 LLM 一次性写进目录,用下面的脚本——它以一个内置模型为模板克隆,必填字段(含正确的 base_instructions)天生齐全,跨 Codex 版本都不缺。需要 curlpython3 和已安装的 codex CLI:
脚本只覆盖每个模型独有的字段(slugdisplay_namedescriptioncontext_window 等),其余必填字段全部从内置模板克隆而来——这正是 1.1 里那套字段,只是 base_instructions 用的是完整官方提示词。
生成的文件较大(每个条目都含完整 base_instructions,约 1~2 MB),属正常现象。运行后用 codex debug models 验证能否被正确解析(见第 5 步)。
脚本里那行 image_generation 过滤是有意保留的:type=llm 的返回中有极少数模型同时带 image_generation 标签(如 gpt-image-2),不适合对话,脚本会自动跳过后再取前 30。

第 2 步:修改 config.toml

编辑 ~/.codex/config.toml,在根级别加上 model_catalog_json,并定义 aihubmix provider:
wire_api = "responses" 是关键,漏写或写成 chat 都连不上。Codex 新版只走 OpenAI 的 Responses API(/v1/responses),AIHubMix 已原生兼容 Responses API,所以直接指向 https://aihubmix.com/v1 即可,无需自建转换代理。
如果想顺便指定默认模型默认推理档位(启动时直接用,不用每次手点),可以用这份更完整的配置:
配好后 config.toml 大致如下(红框为本步的关键项:根级别的 model / model_provider / model_catalog_json,以及 [model_providers.aihubmix] 段): config.toml 中 model_catalog_json 与 aihubmix provider 配置

第 3 步:设置环境变量

把上面 env_key 指定的环境变量配好(注意 = 两侧不要有空格):
建议写进 ~/.zshrc / ~/.bashrc 持久化。在 AIHubMix 控制台 获取 Key。

第 4 步:重启并选择模型

重启 Codex App / TUI 让目录文件生效,然后:
输入 /model 后会列出目录里声明的全部模型,方向键选中、回车确认: Codex /model 选择器显示 AIHubMix 自定义模型列表 选中模型后,/model 还会让你选推理档位(effort),按需求选 low / medium / high 即可。

第 5 步:验证是否生效

  1. 进入 Codex 后输入 /model,确认能看到目录里声明的模型,并切到其中一个(如 glm-5.2)。
  2. 随便提一个问题验证链路打通。注意:不要靠「你是哪个模型」来判断——base_instructions 里写着「You are Codex… based on GPT-5」,所有模型都会照此自称 GPT-5,问了也分辨不出真实模型。要确认实际调用的模型,登录 AIHubMix 控制台「日志」页看那条请求记录的 model_id,这才是真相。
切换成功后顶部会提示 Model changed to ...,底部状态栏也会显示当前模型与上下文窗口(下图切到了 glm-5.2,窗口 258K): Codex 切换到 glm-5.2 后的会话与底部状态栏

自定义模型常见问题

  • /model 里看不到自定义模型? 按先后顺序排查:
    1. 先跑 codex debug models。若报 missing field ...(最常见,缺必填字段)或 unknown variant ...(字段名/取值不对),说明整份目录解析失败被丢弃——用第 1 步「克隆内置模板」脚本重新生成即可。
    2. 确认 model_catalog_json 写在 config.toml 根级别,不在 [model_providers.*] 段里;
    3. 确认 JSON 用的是 snake_case 官方字段、visibilitylist
    4. 如果 codex debug models 已经能看到全部模型,但**桌面端(Desktop App)**里只剩一两个、当前模型显示为「自定义」——这是桌面端的已知 bug:它会在本地目录之上再套一层官方 slug 白名单过滤,把非官方模型从选择器里删掉(见 GitHub Issue #19694#15138)。此时模型其实仍按 config.toml 里的 model = "..." 正常调用(去 AIHubMix 日志可证实),只是名字显示不出来。要正确显示就用终端 codex CLI / TUI;桌面端只能直接在 config.toml 里写死 model = "你要的模型",等官方修复。
  • 目录是「替换」不是「合并」。 model_catalog_json替换整个模型列表,而不是追加(实测:目录里只放 2 个模型,codex debug models 就只剩这 2 个,内置的 gpt-5.x 全部消失)。如果你两类都想要,就把它们一并写进自定义目录。
  • 请求报协议错误 / 连不上。 多半是 provider 的 base_urlwire_api 没配对。AIHubMix 必须 wire_api = "responses" + base_url = "https://aihubmix.com/v1"。若你接的是只支持 Chat Completions 的第三方,则需要本地转换代理,AIHubMix 用户无需此步。
  • 频繁 “Reconnecting” 重连。 部分网络/代理环境下 WebSocket(WSS)不通,可在 provider 段加 supports_websockets = false 强制走 HTTP。
  • 解析报 missing field ...(如 missing field base_instructions)。 条目缺了必填字段。新版 Codex 严格解析,base_instructionsavailability_nuxupgradesupports_reasoning_summariessupport_verbositydefault_verbosityapply_patch_tool_typetruncation_policysupports_parallel_tool_callsexperimental_supported_tools 等都必须存在。用第 1 步「克隆内置模板」脚本可一次性补齐。
  • 解析报 unknown variant 目录 JSON 里有 Codex 不认识的字段名或取值(常见于 displayName/hidden 等 camelCase 旧格式)。改用本文的 snake_case 字段集即可。

相关文档

参考文章


更新时间:2026-06-25