解决 Codex 沙箱报错问题(apply_patch 调用失败)

6 月 30 日
 shumtin

Codex 调用 apply_patch 一直报错,尝试过让它自己修,但是一直没解决。


今天发现了这个报错的根本原因: Codex 本身需要使用代理,但沙箱辅助程序也继承了代理环境变量。 之前为了解决 Codex 每次回复前都要 reconnecting 5 次的问题,设置了 Codex 走本地代理

HTTP_PROXY="http://127.0.0.1:10808"
HTTPS_PROXY="http://127.0.0.1:10808"
ALL_PROXY="socks5h://127.0.0.1:10808"
NO_PROXY="localhost,127.0.0.1,::1"

这导致 Codex 在~\.codex\sandbox\setup_marker.json这个文件中反复写入:

"proxy_ports": [ 10808 ],

随后,当执行 apply_patch 时,会触发 codex-windows-sandbox-setup.exe。这个程序会尝试刷新 Windows 沙箱/防火墙状态,于是产生 COM+ 错误。

简单说就是:Codex 主程序可以用代理,但沙箱 helper 不能继承这些代理变量;否则它会反复把代理端口写回配置文件,导致 apply_patch 触发沙箱/防火墙刷新时报错。

但是单独清空 setup_marker.json 并不能持久解决问题,因为旧的 Codex 进程仍然在它们自己的进程环境中保留着这些代理变量,并且会把代理端口再次写回去。

推荐解决方法:保留 Codex 网络代理,但禁止沙箱继承代理环境变量 先完全退出 Codex ,包括托盘和后台进程。然后打开config.toml,在里面加入或合并下面内容:

[features]
network_proxy = true

[shell_environment_policy]
inherit = "all"
exclude = [
  "HTTP_PROXY",
  "HTTPS_PROXY",
  "ALL_PROXY",
  "http_proxy",
  "https_proxy",
  "all_proxy"
]

shell_environment_policy.exclude 可用于移除传给子进程的环境变量,inherit 控制子进程继承环境变量的范围。 这里的逻辑是:Codex 自己仍然可以使用网络代理,但执行工具、沙箱命令、apply_patchGet-Content 等子进程时,不再继承这些代理变量

然后用 PowerShell 结束残留 Codex 进程:

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

再清理一次沙箱 marker ,打开setup_marker.json: 找到类似:

"proxy_ports": [10808]

改成:

"proxy_ports": []

保存后重新启动 Codex ,再测试 apply_patch 、读取文件、查看图片等操作,可以直接让 Codex 执行以下操作简单测试:

请创建一个 apply_patch_test.txt ,内容写入 hello ,然后用 apply_patch 把 hello 改成 hello codex 。

若不报错则代表修复成功。

如果继续出现这个错误,只能考虑临时改成 unelevated 沙箱。

2606 次点击
所在节点    Codex
13 条回复
oldManNewThought
6 月 30 日
牛逼,我也一直受这个问题困扰,让 codex 自己修,各种改,各种出问题,最后又回退到 elevated ,后面强制其使用 powershell,我试试你这方案
Mmnni
6 月 30 日
我上周也遇到这个问题,让它自己改好了
oldManNewThought
6 月 30 日
大哥不行啊,前面测试 apply_patch 通过了,但是后面再用,又弹窗,然后失败,跟着我打开 setup_marker.json,发现 proxy_ports 又有值了。。。
shumtin
6 月 30 日
@oldManNewThought 是不是 config.toml 没改好?我现在三台设备都是这样操作,完全正常,proxy_ports 没值的
shumtin
6 月 30 日
@oldManNewThought 我测试了一下确实还存在问题,你可以先把 network_proxy 改成 false ,可以保证本地 apply_patch 正常调用,但是沙箱就没法联网了
oldManNewThought
7 月 1 日
@shumtin #5 这样不完美,大家一起再研究研究
shumtin
7 月 1 日
@oldManNewThought 似乎是这次更新的原因,我之前是老版本这样是可以的,更新之后出了问题,后续再研究一下
shumtin
7 月 1 日
@oldManNewThought 刚刚为了测试,我把 config.toml 里修改的内容全都回退了,清空 proxy_ports,然后把进程清理干净重启 codex,发现不报错了,setup_marker.json 也没有自动更新.目前没搞清楚什么原因,使用了 2 小时一切正常.
daxy223
7 月 2 日
为什么不用 tun
dsg001
7 月 5 日
切换到管理员模式打开 ps ,没有这问题
Feedmo
7 月 6 日
@shumtin 现在这个问题你还会出现吗
shumtin
7 月 6 日
@Feedmo 直接用 tun 了现在
xiyuesaves
7 月 8 日
感谢,禁止沙箱继承代理环境变量后功能就正常了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1223923

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX