Codex迁移冲突:恢复对话失败
markdown。

项目场景:
迁移 Codex 对话时,需要从旧的配置文件恢复历史会话数据。本地配置文件位于 C:\Users\ziyitty\.codex\config.toml,其中自定义了多个模型提供商(model providers),包括一个与内置 ID 重名的 openai 节点。
例如:通过 Codex 命令行工具执行对话迁移指令,期望加载原有会话并继续使用。
问题描述
执行迁移命令后,Codex 提示恢复对话失败,并输出如下错误信息:
failed to load configuration: C:\Users\ziyitty\.codex\config.toml:7:2: model_providers contains reserved built-in provider IDs: `openai`. Built-in providers cannot be overridden. Rename your custom provider (for example, "openai-custom").
配置文件中的相关片段(简化):
[model_providers.openai]
name = "openai"
base_url = "https://woshiapi.com/v1"
wire_api = "responses"
迁移过程被中断,无法继续加载历史对话。
原因分析:
Codex 内置了若干保留的提供商 ID,如 openai、anthropic、google、azure 等。这些 ID 对应的默认配置由 Codex 内部管理,不允许用户在 config.toml 中重新定义或覆盖。当解析配置文件时,如果发现 model_providers 下出现了与保留 ID 完全相同的节点(例如 [model_providers.openai]),就会触发冲突检测,抛出上述错误,阻止配置加载。
这种设计是为了防止用户意外修改内置提供商的核心行为(如 API 端点、认证方式等),同时避免配置解析时的歧义。迁移对话需要完整、有效的配置,因此一旦配置校验失败,整个迁移过程就会被终止。
在本例中,用户自定义的 openai 提供商并非要覆盖内置 OpenAI 服务,而是想使用第三方兼容端点(https://woshiapi.com/v1),但因为使用了保留 ID 而被误判为非法覆盖。
解决方案:
将自定义的提供商 ID 从保留字改为其他唯一名称(例如 xcode-openai),同时保持内部 name 字段可以继续使用 "openai" 用于显示。修改后 Codex 不再将其视为对内置提供商的覆盖,配置即可正常加载,迁移也能顺利完成。
具体操作步骤:
- 打开配置文件
C:\Users\ziyitty\.codex\config.toml - 找到
[model_providers.openai]这一段 - 将方括号中的
openai改为xcode-openai(或任意非保留名称,如openai-custom) - (可选)同步修改内部的
name字段,但非必须 - 保存文件,重新执行迁移命令
修改前:
[model_providers.openai]
name = "openai"
base_url = "https://woshiapi.com/v1"
wire_api = "responses"
修改后:
[model_providers.xcode-openai]
name = "openai"
base_url = "https://woshiapi.com/v1"
wire_api = "responses"
验证结果:
修改后再次运行迁移命令,配置加载成功,不再报错,对话恢复功能正常使用。原会话列表和聊天记录均可读取。
注意:
- 如果你在模型中引用了这个 provider(例如
model = "openai/gpt-4"),则需要同步改为model = "xcode-openai/gpt-4"。本例中默认使用的 provider 是Xcode,未依赖该节点,因此无需额外修改。- 其他内置保留 ID(
anthropic、
更多推荐



所有评论(0)