在这里插入图片描述

项目场景:

迁移 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,如 openaianthropicgoogleazure 等。这些 ID 对应的默认配置由 Codex 内部管理,不允许用户在 config.toml 中重新定义或覆盖。当解析配置文件时,如果发现 model_providers 下出现了与保留 ID 完全相同的节点(例如 [model_providers.openai]),就会触发冲突检测,抛出上述错误,阻止配置加载。

这种设计是为了防止用户意外修改内置提供商的核心行为(如 API 端点、认证方式等),同时避免配置解析时的歧义。迁移对话需要完整、有效的配置,因此一旦配置校验失败,整个迁移过程就会被终止。

在本例中,用户自定义的 openai 提供商并非要覆盖内置 OpenAI 服务,而是想使用第三方兼容端点(https://woshiapi.com/v1),但因为使用了保留 ID 而被误判为非法覆盖。


解决方案:

将自定义的提供商 ID 从保留字改为其他唯一名称(例如 xcode-openai),同时保持内部 name 字段可以继续使用 "openai" 用于显示。修改后 Codex 不再将其视为对内置提供商的覆盖,配置即可正常加载,迁移也能顺利完成。

具体操作步骤:

  1. 打开配置文件 C:\Users\ziyitty\.codex\config.toml
  2. 找到 [model_providers.openai] 这一段
  3. 将方括号中的 openai 改为 xcode-openai(或任意非保留名称,如 openai-custom
  4. (可选)同步修改内部的 name 字段,但非必须
  5. 保存文件,重新执行迁移命令

修改前:

[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(anthropicgoogle 等)同样不可覆盖,如有自定义需求请一律重命名。
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐