先把能直接观察到的结果记下来,再逐项排除,比反复试参数省时间。 在 Windows 本机用 openai 1.40 的脚本调 gpt-4o-mini,控制台一直打印 401 invalid_api_key,原文是 Incorrect API key provided: sk-proj-****,这个 key 十分钟前才在控制台新建,换成 curl 请求结果一样,账单里也有余额。

拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

先分清是哪一类原因

  1. 环境变量里还留着上一次导出的旧 key,脚本读到的其实是旧值
  2. 复制 key 时带进了换行或不可见字符,Authorization 头里多了空格
  3. key 建在另一个组织下,项目 key 与默认组织不匹配
  4. 本机装了企业代理,请求被转发到另一套网关后丢了请求头

按顺序处理

1. 先确认进程实际读到的 key 前后各四位

python -c "import os;k=os.getenv('OPENAI_API_KEY');print(len(k),k[:7],k[-4:])"

2. 绕开 SDK 用 curl 直接验证同一个 key

curl https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"

3. 清掉残留变量后重开终端再导出新值

Remove-Item Env:OPENAI_API_KEY; $env:OPENAI_API_KEY='sk-proj-新key'

4. 在服务启动时加一次自检,把读取结果写进日志

print({'len': len(k), 'head': k[:7], 'tail': k[-4:]})

怎么确认已经恢复

curl 返回 200 且模型列表里能看到 gpt-4o-mini,脚本用同一变量调用不再出现 invalid_api_key,日志里打印的尾号与控制台一致。

容易忽略的地方

PowerShell 与 CMD 的变量作用域是分开的,改完要关掉所有已开的终端和 IDE,否则子进程仍然读到旧值;.env 文件被编辑器缓存的情况也很常见,重启比反复改配置有效。 涉及改配置的操作,改完记得做一次完整的回归,别只看当前这个报错有没有消失。

作者 9823189