Codex切换ChatGPT账号与第三方API后报错、会话不可见的处理方法
一、问题表现
在 Codex Desktop 中切换 ChatGPT 账号登录和第三方 API 后,常见问题主要有两类。
第一类是请求直接报 401 Unauthorized:
unexpected status 401 Unauthorized:Incorrect API key provided
url: https://api.openai.com/v1/responses
或者:
unexpected status 401 Unauthorized:无效的令牌
url: https://www.packyapi.com/v1/responses
第二类是切换登录方式后,原来的对话列表不再显示。重新切回之前的登录方式,对话又重新出现。
这两个问题表面上都发生在“切换账号”之后,但原因并不相同:
-
401通常是认证信息和接口地址不匹配; -
对话不可见通常与当前登录身份、模型提供商配置或本地会话视图有关,并不一定代表对话文件已经被删除。
二、先根据请求地址判断问题
排查 401 时,首先查看报错中的 url。
1. 请求发到了 OpenAI 官方接口
https://api.openai.com/v1/responses
如果此时使用的是 PackyCode、PackyAPI 或其他第三方平台发放的 Key,OpenAI 官方接口不会认可该 Key,因此会返回:
Incorrect API key provided
这类情况可以概括为:
第三方 Key
↓
OpenAI 官方接口
↓
401 invalid_api_key
解决方法不是反复更换模型,而是将 Key、接口地址和模型提供商改为同一家平台。
2. 请求仍然发到了第三方接口
例如:
https://www.packyapi.com/v1/responses
如果已经重新登录 ChatGPT Plus,但报错地址仍然是 PackyAPI,说明第三方配置没有被清除。
Codex 当前登录的是哪个账号,与请求最终发往哪个模型提供商,并不完全是同一件事。
登录状态可能已经切换,但 config.toml 仍然保留:
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 就可能继续请求 PackyAPI,而不是使用当前 ChatGPT 账号对应的服务。
3. 请求发到了其他第三方接口
例如:
https://api.aigocode.com/responses
并返回:
INVALID API KEY
说明请求已经到达 AIGoCode,但当前 Key 没有通过该平台的认证。
可能的原因包括:
-
Key 属于另一家平台;
-
Key 已经失效;
-
Key 复制不完整;
-
当前账号没有相应权限;
-
接口地址或认证方式配置错误。
不能仅凭 sk- 前缀判断 Key 的来源,因为不少第三方兼容平台也使用相同前缀。
三、检查当前 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"
model = "gpt-5.4"
base_url = "https://www.packyapi.com/v1"
wire_api = "responses"
说明当前仍处于第三方 provider 配置中。
如果准备切回 ChatGPT Plus,仅仅在界面中重新登录账号还不够,还需要恢复原来的配置文件。
四、不要误删桌面版的本地代理配置
Codex Desktop 的原始配置中可能出现:
base_url = "http://127.0.0.1:15721/v1"
后面还可能包含:
[mcp_servers]
[mcp_servers.node_repl]
type = "stdio"
command = 'C:\Users\...\node_repl.exe'
startup_timeout_sec = 120
127.0.0.1:15721 是 Codex Desktop 使用的本地服务地址,不是 OpenAI 公网 API,也不是第三方 API。
因此,不建议为了清除第三方配置而直接删除整个 config.toml。否则可能把桌面应用自动生成的 MCP、浏览器控制和运行时配置一并删除。
更稳妥的方法是:
-
先备份当前配置;
-
恢复切换第三方 API 之前的配置;
-
完全退出并重新启动 Codex。
五、恢复 ChatGPT 账号模式
1. 完全关闭 Codex
Get-Process |
Where-Object { $_.ProcessName -match "Codex" } |
Stop-Process -Force
配置通常在应用启动时读取。如果 Codex 没有完全退出,即使修改了配置,旧进程也可能继续使用原来的 provider。
2. 备份当前第三方配置
Copy-Item "$HOME\.codex\config.toml" `
"$HOME\.codex\config.toml.thirdparty-$(Get-Date -Format 'yyyyMMdd-HHmmss')"
不要直接覆盖而不留备份,后续还需要使用第三方 API 时,可以恢复这份文件。
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 已经移除。
随后重新启动 Codex,使用 ChatGPT 账号登录并新建会话测试。
六、检查环境变量是否覆盖配置
有些第三方接入方式会通过环境变量设置 Key 或 Base URL。
可以执行:
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
如果没有任何输出,说明当前没有通过常见环境变量设置第三方接口。
七、为什么切换后对话列表会变化
切换 ChatGPT 账号、API Key 或模型提供商后,Codex 显示的会话列表可能发生变化。
常见现象是:
账号登录模式:显示一组历史会话
API Key 模式:显示另一组会话
切回账号模式:原会话重新出现
从实际表现看,这通常意味着会话没有真正被删除,而是当前认证环境下没有加载到原来的会话视图。
需要区分两件事:
-
项目文件和代码修改是否还在;
-
Codex 左侧的对话记录是否可见。
即使旧对话暂时不可见,只要没有执行删除、清理缓存或重置应用数据,项目目录中的代码和文档一般不会因此消失。
对于重要任务,不建议只依赖聊天记录保存进度。可以在项目中维护一个交接文件:
CODEX_HANDOFF.md
内容包括:
# 项目目标
# 已完成工作
# 修改过的文件
# 关键技术决策
# 当前存在的问题
# 下一步任务
切换登录方式后,在新会话中让 Codex 读取该文件,即可恢复主要上下文。
八、建议分别保存两套配置
经常切换 ChatGPT Plus 和第三方 API 时,可以保留两份独立配置。
config.toml.chatgpt
config.toml.packycode
切换到 ChatGPT 账号模式:
Copy-Item "$HOME\.codex\config.toml.chatgpt" `
"$HOME\.codex\config.toml" -Force
切换到第三方模式:
Copy-Item "$HOME\.codex\config.toml.packycode" `
"$HOME\.codex\config.toml" -Force
切换顺序建议固定为:
完全关闭 Codex
→ 替换 config.toml
→ 重新启动 Codex
→ 确认登录方式
→ 新建会话测试
不要在 Codex 运行过程中直接覆盖配置。
九、第三方 API 配置的基本原则
第三方 API 不能只拿到一串 Key 就直接使用,还需要确认:
平台名称
Base URL
模型 ID
接口协议
是否支持 Responses API
是否支持 Codex
正确的匹配关系应为:
平台 A 的 Key
+
平台 A 的 Base URL
+
平台 A 支持的模型
+
平台 A 支持的接口协议
以下组合都会导致异常:
PackyCode Key + OpenAI 官方接口
AIGoCode Key + PackyAPI 接口
ChatGPT 账号令牌 + 第三方 provider
第三方 Key + 不受支持的模型名称
排查时,先看请求 URL,再看 model_provider,通常比反复更换 Key 更有效。
十、API Key 安全
API Key 不应出现在:
-
公开文章;
-
截图;
-
GitHub 仓库;
-
聊天记录;
-
日志;
-
视频录屏。
示例中应统一写成:
sk-********************************
如果完整 Key 曾经公开,应立即撤销并重新生成。
总结
Codex Desktop 在 ChatGPT 账号和第三方 API 之间切换后出现 401,通常不是单纯的 Key 失效,而是以下配置没有同步切换:
登录身份
model_provider
base_url
API Key
模型名称
接口协议
处理时可按以下顺序排查:
查看报错 URL
→ 确认 Key 来源
→ 检查 config.toml
→ 检查环境变量
→ 恢复对应配置
→ 完全重启 Codex
→ 新建会话验证
对话列表在不同登录方式下发生变化时,也不应立即判断为数据丢失。应先切回原登录方式确认,并通过项目内交接文档保存长期上下文。
更多推荐



所有评论(0)