AI API 错误处理最佳实践:别让 429 和 502 搞崩你的应用
调 AI API 不可能永远一帆风顺。429 限流、502 上游故障、503 服务不可用……这些错误迟早会遇到。
关键不是”会不会出错”,而是”出错了怎么办”。本文梳理常见错误和处理方案。
常见错误码
| 状态码 | 类型 | 说明 | 可重试? |
|---|---|---|---|
| 400 | 请求错误 | 参数有误 | ❌ 修改后重试 |
| 401 | 认证错误 | API Key 无效或缺失 | ❌ 检查凭据 |
| 403 | 权限错误 | 账户权限不足 | ❌ 联系支持 |
| 404 | 未找到 | 模型 ID 错误 | ❌ 确认模型名 |
| 429 | 限流 | 请求过于频繁 | ✅ 等待后重试 |
| 500 | 服务错误 | 服务端内部错误 | ✅ 稍后重试 |
| 502 | 上游错误 | 模型供应商故障 | ✅ 切模型或重试 |
| 503 | 不可用 | 服务暂时不可用 | ✅ 稍后重试 |
核心原则
区分可重试和不可重试错误:4xx(除 429)通常是代码问题,重试没用;5xx 和 429 是临时故障,重试有意义。
指数退避重试
import time
import random
def call_with_retry(func, max_retries=3, base_delay=1):
for attempt in range(max_retries):
try:
return func()
except Exception as e:
status = getattr(e, 'status_code', 0)
# 不可重试的错误,直接抛出
if 400 <= status < 500 and status != 429:
raise
if attempt < max_retries - 1:
# 指数退避 + 随机抖动
delay = base_delay * (2 ** attempt) + random.uniform(0, 1)
print(f"请求失败 ({status}),{delay:.1f}s 后重试...")
time.sleep(delay)
else:
raise
用 Fallback 自动切换模型
遇到 502 上游故障时,与其等待重试,不如直接切换到其他模型:
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "你好"}],
extra_body={
"provider": {
"fallback": [
"anthropic/claude-sonnet-4.5",
"google/gemini-2.5-flash"
]
}
}
)
ofox.ai 的 fallback 机制会自动处理 5xx 和 429 错误,秒级切换到备选模型。
429 限流处理
收到 429 时,检查响应头中的 x-ratelimit-reset-requests 字段,它会告诉你什么时候可以重试。
如果经常遇到 429,说明需要:
- 降低请求频率
- 升级速率配额
- 用多个 API Key 做负载分散
超时设置
- 普通请求:设 60 秒超时
- 流式请求:设 120-300 秒超时
- 不要无限等待
监控建议
在 ofox.ai 控制台可以查看错误率仪表盘。如果某个模型的错误率持续偏高,考虑更换主模型或调整 fallback 策略。
错误处理做好了,你的 AI 应用才能在生产环境稳定运行。