Aller au contenu
Français

Délais d'expiration, limitation de débit et nouvelles tentatives

Configurer les délais d'expiration du SDK et les nouvelles tentatives limitées, distinguer les erreurs réessayables des erreurs de configuration, et éviter les soumissions en double.

Corrigez d’abord les erreurs de configuration, puis traitez les pannes temporaires. Limitez le nombre de tentatives, la concurrence et le temps d’attente total ensemble pour éviter de renvoyer la même requête échouée de nombreuses fois en peu de temps.

SituationRecommandation
400 / 401 / 403 / 404Corrigez d’abord la requête, les permissions ou le modèle ; ne répétez pas automatiquement la requête d’origine
429Consultez l’invite de la réponse ; si Retry-After est présent, respectez le délai d’attente et réduisez la concurrence
500 / 502 / 503 / 504 / 529Vous pouvez réessayer de manière limitée ; en cas d’échec persistant, arrêtez et transmettez l’ID de la requête
Échec de connexionVérifiez DNS, proxy et réseau, réessayez de manière limitée dans le délai autorisé par la tâche
Délai d’expiration ou interruption du flux après l’envoi de la requêteLe résultat peut être incertain ; vérifiez d’abord les journaux ; ne supposez pas que l’amont n’a pas encore traité la requête

La portée des nouvelles tentatives de la bibliothèque client ne correspond pas nécessairement exactement au tableau ci-dessus. Utilisez la couche de réessai que vous choisissez et définissez explicitement la stratégie à cette couche.

Utilisez d’abord les nouvelles tentatives intégrées du SDK

Section intitulée « Utilisez d’abord les nouvelles tentatives intégrées du SDK »

Les unités de délai d’expiration diffèrent entre Python et Node.js : Python utilise les secondes, Node.js utilise les millisecondes. L’exemple suivant définit un délai d’expiration de 120 secondes et jusqu’à 2 nouvelles tentatives automatiques ; lors du débogage initial, vous pouvez le mettre à 0.

Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ONEZHE_API_KEY"],
base_url="https://1zheai.com/v1",
timeout=120.0,
max_retries=2,
)

La configuration du délai d’expiration n’est pas la limite de durée totale de l’ensemble de la tâche métier : les nouvelles tentatives et les attentes augmentent la durée totale. Si la couche supérieure réexécute la tâche, définissez un délai global et un mécanisme d’annulation séparément.

Lorsque vous implémentez vos propres nouvelles tentatives

Section intitulée « Lorsque vous implémentez vos propres nouvelles tentatives »

Désactivez les nouvelles tentatives automatiques du SDK pour éviter les superpositions. Utilisez des intervalles d’attente progressifs avec un jitter aléatoire ; limitez explicitement le nombre de tentatives, le temps d’attente maximal et la file d’attente de concurrence. Lors de l’analyse de Retry-After, notez qu’il peut s’agir soit de secondes, soit d’une date HTTP.

Si vous avez déjà affiché une partie des résultats en flux à l’utilisateur, ne rejouez pas automatiquement depuis le début et ne concaténez pas à l’ancien texte. Conservez l’état « incomplet » et laissez l’utilisateur décider de régénérer ou de continuer.

Pour la génération d’images, l’exécution d’outils et d’autres tâches pouvant produire des résultats externes, faites particulièrement attention aux soumissions en double. Ne supposez pas que définir un ID de requête arbitraire permettra au serveur de dédupliquer automatiquement.

Enregistrez suffisamment d’informations de débogage

Section intitulée « Enregistrez suffisamment d’informations de débogage »

Enregistrez l’heure, le point de terminaison, le modèle, le code d’état, la durée, le numéro de tentative et l’ID de requête renvoyé par le serveur. Évitez d’enregistrer les en-têtes d’authentification et les invites privées complètes. Utilisez ces informations pour comparer avec les journaux d’appels.

Pour les paramètres du SDK, consultez OpenAI Python SDK et Node SDK. Pour les erreurs spécifiques, voir codes d’erreur et débogage.