1. 问题现象

Codex在ChatGPT Plus账号和第三方API之间切换后,可能出现以下几类错误。

情况一:第三方 Key 被发送到 OpenAI 官方接口

错误中的请求地址为:

https://api.openai.com/v1/responses

这说明 Codex 当前连接的是 OpenAI 官方 API,但使用的 Key 并不是有效的 OpenAI 官方 API Key。

常见原因是:

  • 使用了 PackyCode、PackyAPI 等第三方平台的 Key;

  • 但接口地址仍然是 api.openai.com

  • 第三方 Key 被当作 OpenAI 官方 Key 使用。

情况二:切回 ChatGPT Plus 后,仍然请求第三方接口

unexpected status 401 Unauthorized:无效的令牌
url: https://www.packyapi.com/v1/responses

错误中的请求地址为:

https://www.packyapi.com/v1/responses

这说明虽然 Codex 界面已经登录 ChatGPT Plus 账号,但配置文件中仍指定了 PackyAPI。

典型残留配置如下:

model_provider = "packycode"
model = "gpt-5.4"

[model_providers.packycode]
name = "packycode"
base_url = "https://www.packyapi.com/v1"
wire_api = "responses"
requires_openai_auth = true

只要以下配置仍然存在:

model_provider = "packycode"

Codex 就会继续选择 PackyCode 提供商,而不会因为重新登录 ChatGPT 账号自动恢复官方模式。

情况三:Key 与第三方接口不属于同一平台

unexpected status 401 Unauthorized:
{"code":"INVALID API KEY","message":"Invalid API key"}
url: https://api.aigocode.com/responses

这种错误说明请求已经到达第三方服务器,但该服务器不认可当前 Key。

例如:

PackyCode Key
    ↓
AIGoCode 接口
    ↓
401 Invalid API Key

sk- 只是常见的 Key 前缀,不能据此判断 Key 属于哪个平台。

2. 问题根源

Codex 是否使用 ChatGPT Plus 额度,不能只看当前登录的账号,还要看模型提供商配置。

影响请求走向的主要内容包括:

登录方式
model_provider
base_url
API Key
模型名称
接口协议

其中:

  • 登录方式决定当前使用哪种认证;

  • model_provider 决定使用哪个模型提供商;

  • base_url 决定请求发送到哪个服务器;

  • API Key 必须由对应服务器签发;

  • 模型名称必须是该平台实际支持的模型;

  • wire_api 决定使用 Responses API 还是其他接口。

一套可用配置必须满足:

API Key、Base URL、模型名称和接口协议属于同一平台

只切换账号而不修改 config.toml,很容易导致认证方式和请求地址不匹配。

3. 先查看错误中的 URL

处理 401 时,应先检查错误信息里的:

url: ...

它比“Invalid API key”更能直接说明问题。

OpenAI 官方接口

https://api.openai.com/v1/responses

如果这里使用的是第三方 Key,OpenAI 会返回:

Incorrect API key provided

PackyAPI 接口

https://www.packyapi.com/v1/responses

如果已经切回 ChatGPT Plus,但仍出现这个地址,说明第三方 provider 配置还没有清除。

AIGoCode 接口

https://api.aigocode.com/responses

如果 Key 并非 AIGoCode 签发,该平台会返回无效 Key。

可以按照下面的关系快速判断:

当前认证或 Key 实际请求地址 结果
第三方 Key api.openai.com 401
ChatGPT Plus 登录 www.packyapi.com 401
非 AIGoCode Key api.aigocode.com 401
PackyAPI Key PackyAPI 对应接口 正常或进入下一步校验
ChatGPT Plus 登录 Codex 官方账号模式 使用 Plus 额度

4. 检查 Codex 配置文件

Windows 版 Codex 的用户配置文件通常位于:

C:\Users\当前用户名\.codex\config.toml

在 PowerShell 中执行:

Get-Content "$HOME\.codex\config.toml" |
Select-String -Pattern "packy|aigocode|base_url|model_provider|requires_openai_auth|env_key|wire_api|^model\s*="

如果输出包含:

model_provider = "packycode"
base_url = "https://www.packyapi.com/v1"

说明当前仍在使用 PackyAPI。

如果要切回 ChatGPT Plus,就不能继续保留:

model_provider = "packycode"

5. Windows 桌面版中的本地地址

部分 Windows 版 Codex 配置中会出现:

base_url = "http://127.0.0.1:15721/v1"

这个地址是 Codex 桌面应用使用的本地服务地址,不是第三方公网接口,也不是 OpenAI 官方 API 地址。

配置文件后面还可能包含:

[mcp_servers]

[mcp_servers.node_repl]
type = "stdio"
command = 'C:\Users\...\node_repl.exe'
startup_timeout_sec = 120

以及:

[mcp_servers.node_repl.env]

这些通常是桌面应用自动生成的 MCP、浏览器控制和运行时配置。

因此,恢复 ChatGPT Plus 模式时,不应直接清空整个 config.toml,也不应随意删除 mcp_servers 部分。最安全的方法是恢复切换第三方 API 之前保存的原始配置。

6. 检查环境变量

部分客户端会通过环境变量读取 Key 或接口地址,因此还应检查 Windows 环境变量。

下面的命令会隐藏 Key 和 Token 的值:

foreach ($scope in @("Process", "User", "Machine")) {
    [Environment]::GetEnvironmentVariables($scope).GetEnumerator() |
    Where-Object {
        "$($_.Key)" -match "OPENAI|PACKY|AIGOCODE|CODEX"
    } |
    ForEach-Object {
        $sensitive = "$($_.Key)" -match "KEY|TOKEN|SECRET"

        [PSCustomObject]@{
            Scope = $scope
            Name  = $_.Key
            Value = if ($sensitive) {
                "<已隐藏>"
            } else {
                "$($_.Value)"
            }
        }
    }
}

重点检查以下变量:

OPENAI_API_KEY
OPENAI_BASE_URL
OPENAI_API_BASE
PACKY_API_KEY
AIGOCODE_API_KEY

如果没有任何输出,说明当前问题大概率来自 config.toml 或应用内部配置,而不是系统环境变量。

7. 切回 ChatGPT Plus 的解决方法

7.1 完全关闭 Codex

在修改配置前,应先退出 Codex。

可以在 PowerShell 中终止残留进程:

Get-Process |
Where-Object { $_.ProcessName -match "Codex" } |
Stop-Process -Force

修改配置后如果不重启,旧进程仍可能继续使用启动时读取的配置。

7.2 备份当前第三方配置

Copy-Item "$HOME\.codex\config.toml" `
"$HOME\.codex\config.toml.thirdparty-$(Get-Date -Format 'yyyyMMdd-HHmmss')"

这样以后还需要使用第三方 API 时,可以恢复对应配置。

7.3 恢复原始配置

如果之前已经保存了官方模式下的备份,例如:

config.toml.backup-20260627-154357

可以执行:

Copy-Item "$HOME\.codex\config.toml.backup-20260627-154357" `
"$HOME\.codex\config.toml" -Force

恢复后检查:

Get-Content "$HOME\.codex\config.toml" |
Select-String -Pattern "packy|aigocode|base_url|model_provider|requires_openai_auth|env_key|wire_api|^model\s*="

如果输出只剩:

base_url = "http://127.0.0.1:15721/v1"

并且没有以下内容:

model_provider = "packycode"
https://www.packyapi.com/v1

说明第三方 provider 已经移除。

7.4 重新登录 ChatGPT Plus

重新打开 Codex 后:

  1. 使用自己的 ChatGPT 账号登录;

  2. 确认账号页面显示 Plus;

  3. 新建一个会话;

  4. 发送简单测试请求;

  5. 检查是否还出现第三方接口地址。

如果错误中仍出现:

https://www.packyapi.com/v1/responses

说明第三方配置没有完全切换。

如果不再出现第三方 URL,并且 Codex 能正常响应,则已恢复 ChatGPT Plus 模式。

8. 配置第三方 API 时的基本要求

使用第三方 API 时,不能只获得一串 Key,还必须明确以下信息:

平台名称
Base URL
模型名称
接口协议
是否支持 Codex

例如一套第三方配置可能类似:

model_provider = "第三方提供商名称"
model = "第三方支持的模型ID"

[model_providers.第三方提供商名称]
name = "第三方提供商名称"
base_url = "第三方提供的Base URL"
wire_api = "responses"
requires_openai_auth = true

具体值必须以第三方平台提供的说明为准,不能根据 Key 前缀猜测。

常见错误包括:

PackyCode Key + OpenAI Base URL
AIGoCode Key + PackyAPI Base URL
ChatGPT Plus 登录 + 第三方 model_provider
第三方 Key + 不受支持的模型名称

9. 建议分别保存两套配置

频繁在 ChatGPT Plus 和第三方 API 之间切换时,可以分别保存配置。

ChatGPT Plus 配置

config.toml.chatgpt

第三方 API 配置

config.toml.packycode

切换到 ChatGPT Plus:

Copy-Item "$HOME\.codex\config.toml.chatgpt" `
"$HOME\.codex\config.toml" -Force

切换到第三方 API:

Copy-Item "$HOME\.codex\config.toml.packycode" `
"$HOME\.codex\config.toml" -Force

每次切换后都应:

关闭 Codex
替换 config.toml
重新启动 Codex
新建会话
检查实际请求 URL

不要在 Codex 正在运行时直接切换配置。

10. API Key 安全

API Key 不应直接出现在:

  • CSDN 文章;

  • 截图;

  • GitHub 仓库;

  • 聊天记录;

  • 日志文件;

  • 公开配置示例。

文章中统一使用:

sk-********************************

如果完整 Key 已经被公开,应立即在对应平台:

  1. 撤销旧 Key;

  2. 创建新 Key;

  3. 更新本地配置;

  4. 停止使用已泄露的 Key。

11. 排查顺序

遇到 Codex 401 时,可以按下面的顺序处理。

第一步:看 URL

api.openai.com
www.packyapi.com
api.aigocode.com

先确认请求实际发到了哪里。

第二步:确认 Key 来源

确认 Key 是 OpenAI 官方、PackyCode、AIGoCode,还是其他平台生成的。

第三步:检查 config.toml

Get-Content "$HOME\.codex\config.toml" |
Select-String -Pattern "base_url|model_provider|model|wire_api"

第四步:检查环境变量

排除 OPENAI_API_KEYOPENAI_BASE_URL 等变量覆盖配置。

第五步:检查匹配关系

确认以下内容属于同一平台:

API Key
Base URL
模型名称
接口协议

第六步:恢复对应配置

切回 ChatGPT Plus 时,恢复官方模式下的 config.toml

第七步:彻底重启 Codex

配置修改后必须重新启动应用。


总结

Codex 切换 ChatGPT Plus 和第三方 API 后出现 401,通常不是单纯的 Key 失效,而是以下内容没有同步切换:

认证方式
model_provider
base_url
API Key
模型名称

排查时不要只看“Invalid API key”,应优先查看错误中的实际请求 URL。

只要确保:

API Key、Base URL、模型名称和接口协议属于同一平台

并在切换后恢复正确的 config.toml、完全重启 Codex,大多数 401 问题都可以解决。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐