通过 NVIDIA NIM 连接模型服务
官方主路径是用户层 [model_providers.nim],wire_api = responses,env_key = NIM_API_KEY,base_url 是本机 NIM 的 /v1。再用 ~/.codex/nim.config.toml 和 --profile nim。
NVIDIA NIM 官方 Codex 网关:用户层 [model_providers.nim],base_url 是 http://localhost:8000/v1,env_key 读 NIM_API_KEY。
这是换 Codex 使用的模型,不是添加 MCP 服务,也不是 npx skills add nvidia/skills。Codex 直接打 NIM 的 OpenAI Responses 入口 /v1/responses,中间不需要翻译代理。自定义供应商必须 wire_api = "responses",不要写 chat。
官方示例把 model 和 model_provider 写进用户 ~/.codex/config.toml,会变成所有会话的默认后端。更稳妥是独立 profile(用户层 $CODEX_HOME,不是项目 .codex):
# ~/.codex/nim.config.toml
model = "nvidia/nemotron-3-super-120b-a12b"
model_provider = "nim"
[model_providers.nim]
name = "NVIDIA NIM"
base_url = "http://localhost:8000/v1"
env_key = "NIM_API_KEY"
wire_api = "responses"
export NIM_API_KEY="not-used"
codex --profile nim
model 必须和 NIM /v1/models 返回的 id 一字不差。带斜杠的名字合法,例如 nvidia/nemotron-3-super-120b-a12b。换模型前先:
curl -s http://localhost:8000/v1/models
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8000/v1/health/ready
base_url 必须带 /v1 后缀。本机默认是 http://localhost:8000/v1;远程 NIM 换成主机名,端口跟 NIM_SERVER_PORT 走。env_key 是变量名。NIM 不校验这把钥匙,但 Codex 要求进程里有非空值,占位字符串即可。必须出现在启动 Codex 的那个进程里。从已经 export NIM_API_KEY 的终端启动;Dock 打开的桌面不会读你刚改的 zshrc。拉镜像用的 NGC_API_KEY 不是这颗 env_key。
0.134 起不要再写 [profiles.nim]。profile 名跟文件名 nim.config.toml 对齐。供应商表也可以放进用户 ~/.codex/config.toml,但不要写进项目 .codex/config.toml:项目文件无法修改 model_provider / model_providers。
NIM 默认没开 Codex 依赖的 vLLM 参数。起容器时要同时带 --enable-auto-tool-choice、匹配模型的 --tool-call-parser,推理模型再加 --reasoning-parser。官方 Nemotron 3 Super 示例是 qwen3_coder 和 nemotron_v3。缺 tool parser 时模型会把工具调用写成散文,Codex 不动作;缺 reasoning parser 时思考文本会当成答案打印出来。用 NIM_SERVED_MODEL_NAME 钉住对外模型名,和 profile 里的 model 对齐。
gpt-oss 走 Harmony Responses,只接受 function、web_search_preview、code_interpreter、container。Codex 默认还会发 web_search 和 namespace(Skills / 子代理),会 400。官方要求一次关掉这些,而不是修一个再爆下一个。web_search 是裸顶层键,必须写在所有 [section] 之前;写在 [model_providers.nim] 或 Codex 自动追加的 [projects."…"] 后面,会静默变成 model_providers.nim.web_search,tool type web_search not supported 还在:
# ~/.codex/nim.config.toml
web_search = "disabled"
model = "YOUR_GPT_OSS_MODEL_ID"
model_provider = "nim"
[model_providers.nim]
name = "NVIDIA NIM"
base_url = "http://localhost:8000/v1"
env_key = "NIM_API_KEY"
wire_api = "responses"
[agents]
enabled = false
[features]
multi_agent_v2 = false
[skills.bundled]
enabled = false
[orchestrator.skills]
enabled = false
[orchestrator.mcp]
enabled = false
非 gpt-oss 模型走普通 Responses,不必抄这段关闭项。
配置说明:
- 不要把这张表当成
npx skills add nvidia/skills --agent codex。那是 cuOpt / Jetson 技能,不是换模型。 - 不要覆盖内置 ID
openai、ollama、lmstudio。nim是新 ID,可以。 - 不要写
wire_api = "chat",也不要省略base_url的/v1。 - 不要把密钥写进
http_headers。 - 不要把
OPENAI_BASE_URL当主路径。走[model_providers.nim]。
改完新开会话。codex --profile nim 启动后,发送一条简短请求验证连接。404 先对照 /v1/models 改 model;连不上先看 /v1/health/ready 是不是 200。长会话把上下文超出限制时提高 NIM_MAX_MODEL_LEN,无关任务新开一轮。