Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
En un clin d’œil
Objectif: Tester la gestion des erreurs de l’API OpenAI
Heure : 10 minutes
Plugins :GenericRandomErrorPlugin, RetryAfterPlugin
Prérequis :configurer le proxy de développement
Lorsque vous utilisez des API OpenAI dans votre application, vous devez tester la façon dont votre application gère les erreurs d’API. Le proxy de développement vous permet de simuler des erreurs sur n’importe quelle API OpenAI à l’aide de GenericRandomErrorPlugin. Avec RetryAfterPlugin, le proxy de développement vérifie également que votre application attend la durée indiquée dans l’en-tête Retry-After avant d’appeler à nouveau l’API.
Conseil / Astuce
Téléchargez cette présélection en exécutant l’invite de commandes devproxy config get openai-throttling.
Dans votre dossier de projet, créez un fichier nommé devproxyrc.json. Ouvrez le fichier dans un éditeur de code.
Créez un objet dans le plugins tableau référençant le GenericRandomErrorPlugin. Définissez l’URL de l’API OpenAI pour que Dev Proxy la surveille et ajoute une référence à la configuration du plug-in.
Fichier : devproxyrc.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "openAIAPI"
}
],
"urlsToWatch": [
"https://api.openai.com/*"
]
}
Ajoutez RetryAfterPlugin et créez l’objet de configuration du plug-in pour fournir à GenericRandomErrorPlugin l’emplacement des réponses d’erreur et le pourcentage de requêtes devant échouer.
Fichier : devproxyrc.json (configuration complète)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "RetryAfterPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
},
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "openAIAPI"
}
],
"urlsToWatch": [
"https://api.openai.com/*"
],
"openAIAPI": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.schema.json",
"errorsFile": "openai-errors.json",
"rate": 90
}
}
Caution
Ajoutez le RetryAfterPlugin avant le GenericRandomErrorPlugin dans votre fichier de configuration. Si vous l'ajoutez après, GenericRandomErrorPlugin fait échouer la requête avant que RetryAfterPlugin puisse la vérifier.
Dans le même dossier, créez le openai-errors.json fichier. Ce fichier contient les réponses d'erreur que Dev Proxy sélectionne lorsqu'il fait échouer une requête. Ils correspondent aux erreurs retournées par l’API OpenAI :
| Status | error.code |
Ce qu’il simule |
|---|---|---|
| 429 | rate_limit_exceeded |
Votre application a atteint sa limite de jetons par minute (TPM) ou de requêtes par minute (RPM). |
| 429 | slow_down |
Le taux de demandes de votre application a augmenté trop rapidement. |
| 429 | credit_balance_exhausted |
Votre organisation n’a plus de crédits prépayés. Réessayer ne sert à rien. |
| 503 | server_is_overloaded |
Le modèle est temporairement surchargé. |
Pour plus d’informations sur ces erreurs, consultez les codes d’erreur dans la documentation OpenAI.
Fichier : openai-errors.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.errorsfile.schema.json",
"errors": [
{
"request": {
"url": "https://api.openai.com/*"
},
"responses": [
{
"statusCode": 429,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
},
{
"name": "Retry-After",
"value": "@dynamic"
}
],
"body": {
"error": {
"message": "Rate limit reached for gpt-4.1 in organization org-K7hT684bLccDbBRnySOoK9f2 on tokens per min (TPM): Limit 30000, Used 30000, Requested 1200. Please try again in 2.4s. Visit https://platform.openai.com/settings/organization/limits to learn more.",
"type": "tokens",
"param": null,
"code": "rate_limit_exceeded"
}
}
},
{
"statusCode": 429,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
},
{
"name": "Retry-After",
"value": "@dynamic"
}
],
"body": {
"error": {
"message": "Rate limit reached for gpt-4.1 in organization org-K7hT684bLccDbBRnySOoK9f2 on requests per min (RPM): Limit 500, Used 500, Requested 1. Please try again in 120ms. Visit https://platform.openai.com/settings/organization/limits to learn more.",
"type": "requests",
"param": null,
"code": "rate_limit_exceeded"
}
}
},
{
"statusCode": 429,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
},
{
"name": "Retry-After",
"value": "@dynamic"
}
],
"body": {
"error": {
"message": "Your request rate increased too quickly. Reduce your request rate and increase it gradually.",
"type": "rate_limit_error",
"param": null,
"code": "slow_down"
}
}
},
{
"statusCode": 429,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
}
],
"body": {
"error": {
"message": "Your organization has no prepaid credits remaining. Add credits to continue using the API. For more information on this error, read the docs: https://developers.openai.com/api/docs/guides/error-codes.",
"type": "insufficient_quota",
"param": null,
"code": "credit_balance_exhausted"
}
}
},
{
"statusCode": 503,
"headers": [
{
"name": "content-type",
"value": "application/json; charset=utf-8"
}
],
"body": {
"error": {
"message": "The requested model is temporarily overloaded. Please try again later.",
"type": "service_unavailable_error",
"param": null,
"code": "server_is_overloaded"
}
}
}
]
}
]
}
La valeur @dynamic définit l’en-tête Retry-After et indique à RetryAfterPlugin de suivre la durée pendant laquelle votre application doit attendre. La credit_balance_exhausted réponse n’a pas d’en-tête Retry-After , car l’attente ne le corrige pas.
Démarrez le proxy de développement dans votre dossier de projet :
devproxy
Lorsque votre application appelle les API OpenAI, Dev Proxy fait échouer 90 % des requêtes en renvoyant une erreur aléatoire provenant du fichier openai-errors.json. Si votre application rappelle l'API avant la fin du délai indiqué dans l'en-tête Retry-After, le RetryAfterPlugin le signale et limite le débit de la requête.
Vérifiez que votre application :
- Attend le délai
Retry-Afteraprès une erreurrate_limit_exceededouslow_down. - Arrête d'appeler l'API après une erreur
credit_balance_exhausted, au lieu de réessayer. - Effectue une nouvelle tentative après une erreur
server_is_overloaded, en respectant un délai d'attente, et affiche un message clair lorsque toutes les tentatives sont épuisées.
En savoir plus sur GenericRandomErrorPlugin.