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 = 120127.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 → 新建会话验证对话列表在不同登录方式下发生变化时,也不应立即判断为数据丢失。应先切回原登录方式确认,并通过项目内交接文档保存长期上下文。
