Pi Agent 配置 Codex CLI 实战记录:为什么会出现 unsupported_country_region_territory 报错
很多人在 Pi Agent 里接入 Codex 时,以为问题出在配置文件、Provider 设置或者模型参数上。真正开始排查之后会发现,报错信息已经把问题范围缩得很小了。
下面这个错误就是典型案例。
Error: OAuth refresh failed for openai-codex
OpenAI Codex token refresh failed (403):
{
"error":{
"code":"unsupported_country_region_territory",
"message":"Country, region, or territory not supported",
"param":null,
"type":"request_forbidden"
}
}
从实际排查过程来看,这类问题大多数发生在 OAuth 刷新阶段,而不是模型调用阶段。
先确认 Pi Agent 是怎么接入 Codex 的
Pi Agent 当前支持两种方式使用 Codex。
第一种是直接使用 Pi 内置的 OpenAI Codex Provider。
启动 Pi 后执行:
pi
进入交互界面:
/login
选择:
ChatGPT Plus/Pro (Codex)
完成浏览器授权。
授权成功后可以查看当前 Provider:
/provider
或者:
/models
如果登录成功,可以看到:
openai-codex
相关模型。
认证信息会保存在本地:
~/.pi/agent/auth.json
后续刷新 Token 时会自动使用这里保存的 Refresh Token。
第二种方式是让 Pi 调用本机已经安装好的 Codex CLI。
这种模式下首先要确认 Codex CLI 自己能够正常工作。
例如:
codex login
查看当前状态:
codex login status
如果这里已经报错,那么 Pi Agent 基本也无法正常使用。
因为 Pi 本质上还是要依赖 OpenAI 的 OAuth 授权体系。
为什么会出现 unsupported_country_region_territory
很多人看到报错中的 country、region、territory,会直接理解成地区限制。
实际排查过程中,经常出现另外一种情况。
浏览器授权成功。
模型曾经正常调用。
过几个小时或者几天之后突然失效。
随后出现:
unsupported_country_region_territory
这说明最初的登录流程已经通过了验证,问题出在后续 Token 刷新环节。
错误位置很明确:
Pi Agent
↓
OpenAI OAuth Refresh
↓
403 Forbidden
此时继续修改模型配置、Provider 配置或者 Prompt 配置,通常不会产生效果。
最常见的问题是刷新请求没有走代理
很多开发工具存在一种现象。
模型请求和 OAuth 请求并不一定走同一套网络路径。
例如登录时:
浏览器
↓
代理节点
↓
OpenAI
授权成功。
随后刷新 Token 时:
Pi Agent
↓
本机网络
↓
OpenAI
请求没有经过代理。
最终返回:
unsupported_country_region_territory
从表面上看像地区限制,实际上是刷新请求的出口网络发生了变化。
这种情况在 OAuth 工具链里非常常见。
如何确认代理是否真正生效
先查看当前代理环境变量。
Linux 或 macOS:
echo $HTTP_PROXY
echo $HTTPS_PROXY
echo $ALL_PROXY
Windows PowerShell:
echo $env:HTTP_PROXY
echo $env:HTTPS_PROXY
echo $env:ALL_PROXY
正常情况下可以看到类似内容:
http://127.0.0.1:7890
或者:
socks5://127.0.0.1:7890
如果为空,说明当前终端会话没有配置代理。
接下来检查实际出口 IP。
curl https://ipinfo.io
观察返回结果。
如果显示的是预期代理出口,则说明代理配置已经生效。
如果显示的是本地网络出口,那么 OAuth 刷新请求很可能没有经过代理。
给 Pi Agent 强制指定代理
如果本地使用 Clash,可以显式设置:
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7890
然后重新启动:
pi
重新执行登录流程。
这样可以避免 Pi Agent 启动后继承不到代理环境变量。
检查 auth.json 是否保存了失效 Token
OAuth 刷新失败还有一种情况。
本地缓存的 Refresh Token 已经失效。
先查看认证文件:
Linux 或 macOS:
cat ~/.pi/agent/auth.json
Windows:
type $HOME\.pi\agent\auth.json
如果文件中存在:
{
"openai-codex": {
...
}
}
说明本地已经保存过授权信息。
此时可以先退出登录:
/logout openai-codex
或者直接删除认证文件:
rm ~/.pi/agent/auth.json
然后重新登录:
/login openai-codex
重新完成授权。
判断问题到底出在哪一层
实际排查时可以按照下面顺序进行。
第一步检查 Codex CLI。
codex login status
如果这里失败,先解决 Codex CLI 的认证问题。
第二步检查代理。
curl https://ipinfo.io
确认出口网络。
第三步检查 Pi Agent 保存的 Token。
cat ~/.pi/agent/auth.json
确认是否存在历史授权信息。
第四步重新授权。
/logout openai-codex
/login openai-codex
重新生成新的 OAuth Token。
按照这个顺序排查,可以快速确定问题到底属于:
-
OAuth Token 失效 -
代理未生效 -
刷新请求未走代理 -
OpenAI 返回 403 拒绝
而无需在模型参数、Provider 配置和 Prompt 配置上反复尝试。
操作清单
-
[ ] 启动 Pi Agent -
[ ] 查看当前 Provider -
[ ] 检查 Codex CLI 是否正常登录 -
[ ] 检查 HTTP_PROXY -
[ ] 检查 HTTPS_PROXY -
[ ] 检查 ALL_PROXY -
[ ] 使用 curl 验证出口 IP -
[ ] 查看 auth.json -
[ ] 删除失效授权缓存 -
[ ] 重新执行 OAuth 登录
FAQ
Pi Agent 能直接使用 Codex 吗
可以。
Pi 内置支持 OpenAI Codex Provider。
auth.json 在哪里
默认位置:
~/.pi/agent/auth.json
unsupported_country_region_territory 一定是地区限制吗
不一定。
OAuth 刷新请求未经过代理时,也可能出现相同错误。
浏览器能登录为什么 Pi Agent 不能用
浏览器和 Pi Agent 使用的网络出口可能不同。
Codex CLI 能用,Pi Agent 不能用怎么办
优先检查 Pi Agent 是否继承了代理环境变量。
删除 auth.json 会发生什么
本地 OAuth 缓存会被清空,需要重新授权。
修改模型参数能解决这个问题吗
通常不能。
该错误发生在 OAuth 认证阶段。
排查时先看什么
优先检查:
codex login status
确认认证链路是否正常。

