OpenAI API Python调用报401错误(API密钥错误)但curl正常且产生费用
OpenAI API Python调用报401错误(curl正常且已产生费用)
问题详情
测试OpenAI API时,使用curl格式调用官方示例可正常返回结果,但Python格式调用出现401错误,提示openai.error.APIError: HTTP code 401 from API (wrong api key)。已将OPENAI_API_KEY设置为系统变量,但问题依旧,且API后台usage显示已产生调用费用。
可用的curl调用代码
curl https://api.openai.com/v1/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "text-davinci-003", "prompt": "Say this is a test", "max_tokens": 7, "temperature": 0 }'
报错的Python调用代码
import os import openai openai.api_key = os.getenv("OPENAI_API_KEY") openai.Completion.create( model="text-davinci-003", prompt="Say this is a test", max_tokens=7, temperature=0 )
解决方案
1. 直接验证API密钥有效性
跳过环境变量,直接在代码中写入curl里使用的有效API密钥测试:
import openai openai.api_key = "你的实际API密钥" # 替换为curl中使用的密钥 openai.Completion.create( model="text-davinci-003", prompt="Say this is a test", max_tokens=7, temperature=0 )
如果此代码能成功返回结果,说明问题出在环境变量读取环节。
2. 排查环境变量读取问题
在Python代码中先打印环境变量值,确认是否正确读取:
import os print(os.getenv("OPENAI_API_KEY"))
- 若输出为
None:说明环境变量未生效,需重启运行Python的终端/IDE(环境变量修改后必须重启才能被进程读取),同时确认系统变量名称为OPENAI_API_KEY(注意大小写,Linux/macOS严格区分)。 - 若输出的密钥与实际不符:检查系统变量中存储的密钥是否有多余空格、换行或特殊字符。
3. 更新OpenAI Python库
旧版本库可能存在API请求逻辑缺陷,执行以下命令更新到最新版:
pip install --upgrade openai
4. 检查代理或自定义API地址配置
如果本地使用代理服务,或曾修改过OpenAI的API base URL,需在代码中明确指定官方API地址:
import openai openai.api_base = "https://api.openai.com/v1" openai.api_key = os.getenv("OPENAI_API_KEY") # 后续调用代码不变
关于费用产生的说明
即使返回401错误,API服务器仍可能已处理请求并记录使用量,这种情况属于偶发异常。后续修复调用问题后,可关注后台费用统计是否正常。
内容的提问来源于stack exchange,提问作者Xujie Yuan
相关产品推荐
相关产品推荐

