两份 config.toml 只有一行不同,实际请求也不一定由这一行决定。应把“文件差异”和“客户端最终采用的值”做成两份结果。本页以 Codex 为例;Claude Code 的 settings.json 有自己的规则,见配置不生效排查。
准备脱敏副本
以下两个文件是教学数据,域名是不可用于真实请求的占位地址,不要覆盖现有配置。
config-a.toml:
model = "service-model"
model_provider = "provider_a"
[model_providers.provider_a]
name = "Service A"
base_url = "https://api-a.example.invalid/v1"
env_key = "SERVICE_A_KEY"
wire_api = "responses"
config-b.toml:
model = "service-model"
model_provider = "provider_b"
[model_providers.provider_b]
name = "Service B"
base_url = "https://api-b.example.invalid/v1"
env_key = "SERVICE_B_KEY"
wire_api = "responses"
这两份副本没有真实 Key。实际文件中若存在内嵌认证值,应先在本地脱敏;不要直接输出整份 auth.json。保留字段名与一致的替身标识,才能看出两个配置是否指向同一凭证来源。
先得到可复核的差异
安装 Git 后,可以在副本目录运行:
git diff --no-index -- config-a.toml config-b.toml
这个命令只是比较两个文件,退出码 1 通常表示有差异,不代表配置损坏。不要把它接到遇到非零就“自动修复”的脚本里。
给 Codex 的任务:
只读 config-a.toml 和 config-b.toml。
按模型、Provider、地址、协议、凭证变量名对比。
每一项引用原字段;只说明文件差异,不判断哪家服务可用,也不发 API 请求。
预期差异如下:
| 项目 | A | B | 意义 |
|---|---|---|---|
| model | service-model | service-model | 字面相同,不证明两家服务都提供它 |
| model_provider | provider_a | provider_b | 选中的 Provider 不同 |
| base_url | api-a.example.invalid/v1 | api-b.example.invalid/v1 | 请求目标不同 |
| env_key | SERVICE_A_KEY | SERVICE_B_KEY | 读取的凭证变量不同 |
| wire_api | responses | responses | 声明的接口类型相同,不证明服务端兼容 |
再加入真实加载上下文
假设用户配置完整定义了 provider_a、provider_b,而受信任项目的 .codex/config.toml 只写:
model_provider = "provider_b"
在没有更高优先级覆盖时,这个项目选择 provider_b;切换到另一个没有项目配置的仓库,可能回到用户配置中的 provider_a。如果从命令行启动时又明确设置:
codex -c 'model_provider="provider_a"'
这次命令行覆盖优先于项目文件。该例需要用户配置中确实存在 provider_a;上面的占位服务不能据此真实连通。
截至 2026-10-11,官方文档的配置顺序从高到低为命令行覆盖、受信任项目配置、所选 profile 文件、用户配置、云端管理默认配置、系统配置、内置默认值;组织约束是另一层限制。项目不受信任时,其 .codex/config.toml 会被跳过。先确认工作目录和信任状态,再解释为什么看起来“改了没用”。
检查凭证来源,不输出凭证
在将要启动 Codex 的 PowerShell 中,只输出变量是否存在:
[pscustomobject]@{
SERVICE_A_KEY = -not [string]::IsNullOrWhiteSpace($env:SERVICE_A_KEY)
SERVICE_B_KEY = -not [string]::IsNullOrWhiteSpace($env:SERVICE_B_KEY)
}
True 只能说明当前进程环境有值,不证明 Key 有效、权限足够或余额可用。已经启动的桌面程序也不必然继承这个终端后来设置的环境。不同认证方式另见手动 API 配置。
CC Switch 等管理工具可能改写文件或启用本地路由,应记录它实际改了哪份配置以及活动模式;不要给所有管理工具虚构一个固定的“最高优先级”。
交付应留下两个结论
第一份是文件差异表,第二份是有效配置推导:当前目录、已加载来源、启动参数、选中的 Provider 和未验证项。完成一次只读客户端任务后,如果服务有请求记录,再核对请求归属。模型自报名称、配置中一串地址和头像都不能单独证明流量走向。
资料来源
- Codex 基础配置
2026-10-11 核对项目与用户配置、profile和启动参数优先级。
下一步
继续阅读与你当前问题相关的教程:



