调用 AI API 报错,一堆数字看不懂怎么办
照着教程敲代码,突然弹出一串”401""429""error: invalid_api_key”,心里咯噔一下——是不是代码写错了?是不是账号被封了?先别慌,这篇文章用大白话把最常见的几个报错讲清楚,看完你至少能自己判断”这是我的问题,还是对方的问题”。
一、错误码到底是什么
你请求一个 API(可以理解成”给服务器发一句话,等它回一句话”),服务器每次回复都会带一个”状态码”——一个三位数字,用来告诉你这次请求顺不顺利。200 代表一切正常,你平时根本看不到这个数字,因为程序会直接把结果显示给你。只有出问题的时候,这个数字才会被暴露出来,变成你看到的”报错”。
除了这个数字,服务器通常还会返回一段文字说明,长这样:
{
"error": {
"type": "invalid_request_error",
"message": "Incorrect API key provided: sk-abc***"
}
}
这段 message 才是真正有用的信息——很多人只顾着盯数字慌,却没往下看这一行字,其实答案往往就写在这里。
二、先分清一件事:4 开头还是 5 开头
所有状态码可以先粗暴地分成两大类,光看第一位数字就能判断责任在谁:
| 开头数字 | 大白话 | 责任方 |
|---|---|---|
| 4xx(401、403、404、429…) | ”你发的请求有问题” | 通常是你这边的代码、密钥或参数需要检查 |
| 5xx(500、502、503、504…) | ”对方服务器出问题了” | 通常不是你的错,等一会或联系服务商 |
记住这一条分类规则,遇到没见过的错误码也能先有个方向感,不至于两眼一抹黑。
三、5 个最常见的报错,一次讲清楚
| 状态码 | 大白话翻译 | 最常见原因 | 怎么办 |
|---|---|---|---|
| 401 Unauthorized | ”你没带对’钥匙‘“ | API Key 填错、多打了空格、复制的时候漏了几位 | 重新复制一遍完整密钥,检查前后有没有多余空格 |
| 403 Forbidden | ”钥匙是对的,但这扇门你进不去” | 账号权限不够、余额不足、地区限制 | 查账户余额和权限设置,或联系服务商确认 |
| 404 Not Found | ”你敲错门了” | 接口地址(URL)写错,或者模型名称拼错 | 对照官方文档,逐字核对地址和模型名 |
| 429 Too Many Requests | ”你敲门敲太快了” | 短时间内请求次数超过限制 | 停几秒再试,或者把请求频率降下来 |
| 500 / 502 / 503 / 504 | ”对方家里出故障了” | 服务器临时故障、过载、维护中 | 不是你的问题,等几分钟重试;持续报错就联系服务商 |
划重点:401 和 403 长得很像,很多新手会搞混。简单区分法——401 是”你压根没证明自己是谁”(密钥错了),403 是”你证明了自己是谁,但没资格做这件事”(比如余额不够、套餐不支持这个模型)。
四、429 出现得最频繁,但也最不用慌
新手最容易反复碰到的其实是 429。这不是账号出问题了,而是短时间内请求发得太密集,服务器主动”踩了刹车”。处理办法很简单:
- 先停下来,等 5-10 秒再重试
- 如果是写代码批量调用,在每次请求之间加一个小延迟(比如
time.sleep(1)) - 如果频繁触发,说明你的请求量已经接近套餐的限制,考虑升级套餐或分散调用时间
429 报错本身说明”连接是通的、密钥是对的”,反而是相对省心的一种报错。
五、看不懂的报错,去哪找答案
如果表格里没覆盖到你遇到的那个报错码,按下面顺序排查:
- 先读
message字段的原文,很多时候里面直接写了原因,比如 “model not found” 就是模型名字打错了 - 去官方文档搜这个状态码,OpenAI、Anthropic、Google 等厂商都有专门的错误码文档页面
- 如果用的是中转/代理服务,同样的 401/403/429 在中转层和源站可能含义略有差别,中转商一般会在文档里额外说明
- 实在搞不懂就去问人,但贴报错的时候记得把
message那段文字一起贴出来(密钥本身要打码),只说”报错了”没人能帮你判断
如果你已经能看懂基础报错,想往下深挖故障排查的完整方法论,可以看这篇更系统的AI API 中转常见错误码排查手册,覆盖了 401/403/404/429/500/502/504 在中转场景下的完整排查流程。如果你是想统一处理多个厂商(OpenAI、Anthropic、Gemini)之间不一致的错误码,那是更进阶的话题,可以参考多模型 API 错误码分类与统一处理。
六、新手最容易踩的三个假动作
- 看到报错就重新申请一个新密钥:多数报错和密钥本身没关系,重新申请解决不了问题,反而容易把旧密钥用的地方全部搞乱
- 一看到 500 就以为自己代码写错了:5xx 系列几乎都是对方服务器的问题,回头检查自己代码是白费功夫,等一等或换个时间点重试更实际
- 报错信息只截一半发出去问:只截图数字不带
message文字,别人也看不出问题在哪,完整信息+密钥打码是求助的基本礼貌