先看现象。清理控制台时把三个久未使用的项目归档,第二天其中一个项目的定时任务全部 401,原文 Project is archived,key 本身并没有被删除。
原因不止一个,得分开看。归档项目下所有 key 立即失效,而且不能恢复成活跃状态。还有一种是归档不影响已经产生的用量与账单记录,只影响调用。
不容易想到的是,定时任务里把 key 写死在脚本中,没有轮换机制。
还有一种情况,项目名相似,归档时选错了对象。
上来先列出项目状态确认哪个被归档
curl -s https://api.openai.com/v1/organization/projects -H "Authorization: Bearer $ADMIN_KEY" | jq -r '.data[]|"\(.id) \(.status)"'
随后在活跃项目下新建一个 key
curl -s https://api.openai.com/v1/organization/projects/proj_abc/api_keys -H "Authorization: Bearer $ADMIN_KEY" -H "Content-Type: application/json" -d '{"name":"cron"}' | jq -r '.value'
接着用新 key 跑一次定时任务的探测请求
curl -s -o /dev/null -w '%{http_code}\n' https://api.openai.com/v1/models -H "Authorization: Bearer $NEW_KEY"
剩下的就是确认脚本是从环境变量读 key
python -c "import os;print(bool(os.getenv('OPENAI_API_KEY')))"
恢复的判定其实很直接。探测请求返回 200,定时任务日志里不再出现 Project is archived,控制台成员页能看到新 key 的创建时间与名称。
这里还有个坑。归档是不可逆的,key 也不会进回收站,删项目之前先按用量接口确认最近 90 天有没有调用记录。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
