Gestion des erreurs
Ce guide présente le format des réponses d'erreur de l'API 诺玛AI, les scénarios d'erreur courants ainsi que les stratégies de traitement recommandées.
Format des réponses d'erreur#
Toutes les réponses d'erreur suivent un format JSON unifié :
{
"error": {
"code": "invalid_api_key",
"message": "La clé API fournie est invalide, veuillez vérifier et réessayer.",
"type": "authentication_error"
}
}Codes de statut HTTP#
Code de statut
Type
Description
Réessayer ?
`400`
`invalid_request_error`
Erreur de paramètre de requête
❌ Corriger les paramètres
`401`
`authentication_error`
API Key invalide ou absente
❌ Vérifier l'API Key
`403`
`permission_error`
Permissions insuffisantes
❌ Vérifier les permissions du compte
`404`
`not_found_error`
Modèle ou ressource introuvable
❌ Vérifier l'ID du modèle
`429`
`rate_limit_error`
Limite de débit atteinte
✅ Attendre puis réessayer
`500`
`internal_error`
Erreur interne du serveur
✅ Réessayer plus tard
`502`
`upstream_error`
Erreur du fournisseur de modèle en amont
✅ Changer de modèle ou réessayer
`503`
`service_unavailable`
Service temporairement indisponible
✅ Réessayer plus tard
Erreurs courantes et solutions#
401 — API Key invalide
{"error": {"code": "invalid_api_key", "message": "The API key provided is invalid."}}Solutions :
- Vérifiez que l'API Key est correctement copiée (avec le préfixe `sk-`)
- Confirmez que la Key n'a pas expiré et n'est pas désactivée
- Vérifiez que les variables d'environnement sont correctement chargées
429 — Limite de débit
Solutions :
- Vérifiez `x-ratelimit-reset-requests` dans les en-têtes de réponse
- Mettez en place une nouvelle tentative avec backoff exponentiel
- Si vous avez besoin d'un quota plus élevé, contactez le support pour demander un ajustement
502 — Erreur en amont
Solutions :
- Utilisez le repli (fallback) pour basculer automatiquement vers un modèle de secours
- Réessayez plus tard
- Consultez la page de statut du fournisseur de modèles
Stratégie de nouvelle tentative#
Il est recommandé d'utiliser une stratégie de **backoff exponentiel (Exponential Backoff)** :
import time
import random
from openai import OpenAI, APIError, RateLimitError, APIConnectionError
client = OpenAI(
base_url="https://as.apinoma.com/v1",
api_key="<你的 APINOMA_API_KEY>"
)
def chat_with_retry(max_retries=5, **kwargs):
"""Wrapper de réessai avec backoff exponentiel"""
for attempt in range(max_retries):
try:
return client.chat.completions.create(**kwargs)
except RateLimitError:
# 429: attendre puis réessayer
wait = (2 ** attempt) + random.uniform(0, 1)
print(f"Limite de débit atteinte, attente de {wait:.1f}s avant réessai...")
time.sleep(wait)
except APIConnectionError:
# Erreur réseau : courte attente puis réessai
wait = 2 ** attempt
print(f"Erreur de connexion, attente de {wait}s avant réessai...")
time.sleep(wait)
except APIError as e:
if e.status_code and e.status_code >= 500:
# 5xx : erreur serveur, réessai
wait = 2 ** attempt
time.sleep(wait)
else:
# 4xx : erreur client, pas de réessai
raise
raise Exception(f"Échec après {max_retries} tentatives")
# Utilisation
response = chat_with_retry(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Bonjour"}]
)Configuration du délai d'expiration#
Il est conseillé de définir un délai d'expiration raisonnable pour les appels API :
# Python OpenAI SDK
client = OpenAI(
base_url="https://as.apinoma.com/v1",
api_key="<你的 APINOMA_API_KEY>",
timeout=60.0, # Délai de 60 secondes
max_retries=3 # Réessais intégrés au SDK
)Pour les requêtes en streaming, il est recommandé d'utiliser un délai plus long (120 à 300 secondes), car le modèle peut avoir besoin de plus de temps pour générer l'intégralité du contenu.
Bonnes pratiques#
- Distinguer les erreurs réessayables des non-réessayables — les 4xx nécessitent généralement une correction de la requête, les 5xx peuvent être réessayées
- Utiliser le backoff exponentiel — éviter les réessais fréquents en cas de limitation de débit
- Définir un nombre maximum de tentatives — éviter les boucles infinies
- Enregistrer les journaux d'erreurs — facilite le débogage
- Configurer le repli automatique — utiliser le paramètre `provider.fallback` de 诺玛AI pour basculer automatiquement vers un autre modèle
- Surveiller le taux d'erreurs — suivre les tendances d'erreurs dans la console
Dernière mise à jour le 23 juin 2026