本地 Codex 报错 stream disconnected before completion 的排查与修复记录
摘要
最近在本地使用 OpenAI Codex 时,发送消息出现了如下报错:
stream disconnected before completion: error sending request for url (http://127.0.0.1:57321/v1/responses)
一开始以为是 Codex 本身、模型或者网络问题,后来排查发现,真正原因是:Codex 被配置成走本地自定义代理 CodexPlusPlus,请求地址指向了 127.0.0.1:57321/v1/responses,但本地 57321 端口没有服务在监听。
最终解决方式是:删除本地代理配置,恢复 ChatGPT 账号登录模式,并更换可正常访问 OpenAI 授权接口的代理。
本文记录完整排查过程和后续遇到同类问题时的处理流程。
一、问题现象
本地 Codex 发送消息时报错:
stream disconnected before completion: error sending request for url (http://127.0.0.1:57321/v1/responses)
关键信息是这段 URL:
http://127.0.0.1:57321/v1/responses
这说明 Codex 并不是直接访问官方 OpenAI 服务,而是在请求本机的一个本地服务或代理。
二、第一步:检查本地 57321 端口是否有服务
在 Windows CMD 中执行:
netstat -ano | findstr 57321
结果是:
C:\Users\Lenovo>netstat -ano | findstr 57321
C:\Users\Lenovo>
没有任何输出。
这说明:本地 57321 端口没有服务在监听。
也就是说,Codex 试图访问:
http://127.0.0.1:57321/v1/responses
但这个地址背后根本没有服务,所以请求自然会失败。
三、第二步:排查环境变量
继续检查是否是环境变量把 Codex 指向了本地代理:
echo %OPENAI_BASE_URL%
echo %OPENAI_API_BASE%
输出为:
C:\Users\Lenovo>echo %OPENAI_BASE_URL%
%OPENAI_BASE_URL%
C:\Users\Lenovo>echo %OPENAI_API_BASE%
%OPENAI_API_BASE%
这说明系统环境变量中没有设置:
OPENAI_BASE_URL
OPENAI_API_BASE
因此,127.0.0.1:57321 不是从环境变量来的。
四、第三步:检查 Codex 配置文件
接下来查看 Codex 配置文件:
C:\Users\Lenovo.codex\config.toml
发现原配置里有如下内容:
model_provider = "CodexPlusPlus"
model = "deepseek-v4-flash"
[model_providers.CodexPlusPlus]
name = "CodexPlusPlus"
wire_api = "responses"
requires_openai_auth = true
base_url = "http://127.0.0.1:57321/v1"
experimental_bearer_token = "sk-xxx"
这就是问题根因。
配置含义大概是:
Codex → CodexPlusPlus → http://127.0.0.1:57321/v1/responses
其中:
wire_api = "responses"
表示 Codex 会走 Responses API。
而:
base_url = "http://127.0.0.1:57321/v1"
表示 Codex 会请求本地 57321 端口。
但实际情况是,57321 端口没有服务,因此就会报:
stream disconnected before completion
五、修复方向
这里有两种修复方式。
方案一:继续使用本地代理
如果确实要继续用 CodexPlusPlus 或其他本地代理,那就需要重新启动对应服务。
启动后再次执行:
netstat -ano | findstr 57321
正常应该看到类似:
TCP 127.0.0.1:57321 0.0.0.0:0 LISTENING xxxx
然后还需要确认代理是否支持:
/v1/responses
因为 Codex 当前请求的是 Responses API,而很多本地模型代理只支持:
/v1/chat/completions
如果本地代理不支持 /v1/responses,即使端口启动了,也可能继续报错。
方案二:恢复 ChatGPT 账号登录模式
如果不想走本地代理,而是想用 ChatGPT 账号登录 Codex,可以删除自定义 provider 配置。
最终我采用的是方案二。
六、修改后的 Codex 配置
将 config.toml 顶部改成:
model = "gpt-5.5"
forced_login_method = "chatgpt"
disable_response_storage = true
删除或注释掉这些内容:
model_provider = "CodexPlusPlus"
[model_providers.CodexPlusPlus]
name = "CodexPlusPlus"
wire_api = "responses"
requires_openai_auth = true
base_url = "http://127.0.0.1:57321/v1"
experimental_bearer_token = "sk-xxx"
需要注意的是,不能只改模型:
model = "gpt-5.5"
如果还保留:
model_provider = "CodexPlusPlus"
Codex 仍然可能继续走自定义 provider。
所以关键是删除:
model_provider = "CodexPlusPlus"
以及对应的:
[model_providers.CodexPlusPlus]
配置块。
七、重新登录 Codex
修改配置后,在 CMD 中执行:
codex logout
codex login
如果浏览器登录打不开,可以使用设备码登录:
codex login --device-auth
登录成功后检查状态:
codex login status
正常结果:
Logged in using ChatGPT
此时说明 Codex 已经切换为 ChatGPT 账号登录模式。
八、登录过程中遇到 token exchange failed
在恢复 ChatGPT 登录时,我还遇到了另一个错误:
Sign-in could not be completed
Token exchange failed: error sending request for url (https://auth.openai.com/oauth/token)
Error code
token_exchange_failed
这个问题已经不是 127.0.0.1:57321 了,而是 Codex 在登录最后一步访问:
https://auth.openai.com/oauth/token
失败。
这种情况一般和网络、代理、VPN 有关。
我更换了一个代理后,问题解决。
可以用下面命令简单测试网络:
curl -I https://auth.openai.com/oauth/token
curl -I https://api.openai.com
curl -I https://chatgpt.com
如果访问失败,需要更换代理、节点或网络环境。
九、最终启动成功
重新登录后执行:
codex login status
输出:
Logged in using ChatGPT
然后启动 Codex:
codex
启动成功:
╭───────────────────────────────────────╮
│ >_ OpenAI Codex (v0.142.0) │
│ │
│ model: gpt-5.5 /model to change │
│ directory: ~ │
╰───────────────────────────────────────╯
至此,Codex 已经恢复正常。
十、额外问题:SKILL.md 警告
启动后还看到一个黄色警告:
Skipped loading 1 skill(s) due to invalid SKILL.md files.
C:\Users\Lenovo.agents\skills\roadshow\SKILL.md: missing YAML frontmatter delimited by ---
这个不是登录问题,也不是模型调用问题。
它的意思是某个本地 skill 文件格式不规范,缺少 YAML frontmatter。
解决方式是在文件顶部补上:
---
name: roadshow
description: 用于生成、优化和审查路演脚本、路演方案、演示材料和客户沟通内容。
---
# 路演材料 Skill
这里保留原来的 skill 内容。
保存后重启 Codex 即可。
十一、后续再遇到同类问题怎么处理
如果以后再次遇到:
stream disconnected before completion: error sending request for url (http://127.0.0.1:57321/v1/responses)
可以按下面流程处理。
1. 查端口
netstat -ano | findstr 57321
如果没有输出,说明本地 57321 代理没启动。
2. 查配置残留
findstr /S /I /N "57321 CodexPlusPlus model_provider base_url" "%USERPROFILE%.codex*"
重点检查:
C:\Users\Lenovo.codex\config.toml
3. 删除本地代理配置
删除:
model_provider = "CodexPlusPlus"
以及:
[model_providers.CodexPlusPlus]
base_url = "http://127.0.0.1:57321/v1"
4. 恢复最小可用配置
model = "gpt-5.5"
forced_login_method = "chatgpt"
disable_response_storage = true
5. 重新登录
codex logout
codex login
codex login status
如果登录报 token exchange failed,优先换代理或网络。
十二、总结
这次问题的根因并不是模型不可用,也不是账号密码错误,而是 Codex 配置里残留了本地代理:
CodexPlusPlus → http://127.0.0.1:57321/v1/responses
但本地 57321 端口没有服务在监听,所以发送消息时报:
stream disconnected before completion
最终解决路径是:
1. netstat 确认 57321 没有服务
2. 检查环境变量,排除 OPENAI_BASE_URL / OPENAI_API_BASE
3. 检查 config.toml,发现 CodexPlusPlus 本地代理配置
4. 删除 model_provider 和 base_url
5. 改回 ChatGPT 登录模式
6. 重新 codex logout / codex login
7. 更换可访问 OpenAI auth 的代理
8. codex login status 显示 Logged in using ChatGPT
最终 Codex 成功恢复正常。