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,说明需要:

  1. 降低请求频率
  2. 升级速率配额
  3. 用多个 API Key 做负载分散

超时设置

  • 普通请求:设 60 秒超时
  • 流式请求:设 120-300 秒超时
  • 不要无限等待

监控建议

在 ofox.ai 控制台可以查看错误率仪表盘。如果某个模型的错误率持续偏高,考虑更换主模型或调整 fallback 策略。

错误处理做好了,你的 AI 应用才能在生产环境稳定运行。


相关阅读