Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
De un vistazo
Objetivo: Prueba del control de errores de OpenAI API
Hora: 10 minutos
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Requisitos previos:Configuración del proxy de desarrollo
Al usar las API de OpenAI en la aplicación, debe probar cómo controla la aplicación los errores de API. El proxy de desarrollo permite simular errores en cualquier API de OpenAI mediante GenericRandomErrorPlugin. Con RetryAfterPlugin, Dev Proxy también comprueba que la aplicación espere el tiempo indicado en el encabezado Retry-After antes de llamar a la API de nuevo.
Sugerencia
Descargue este valor preestablecido ejecutando en el símbolo del sistema devproxy config get openai-throttling.
En la carpeta del proyecto, cree un archivo denominado devproxyrc.json. Abra el archivo en un editor de código.
Cree un nuevo objeto en la plugins matriz que haga referencia a GenericRandomErrorPlugin. Defina la dirección URL de la API de OpenAI para que el proxy de desarrollo supervise y agregue una referencia a la configuración del complemento.
Archivo: 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/*"
]
}
Agregue el RetryAfterPlugin y cree el objeto de configuración del complemento para proporcionar a GenericRandomErrorPlugin la ubicación de las respuestas de error y el porcentaje de solicitudes que fallarán.
Archivo: devproxyrc.json (configuración completa)
{
"$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
Añada el RetryAfterPlugin antes del GenericRandomErrorPlugin en su archivo de configuración. Si lo agrega después, el GenericRandomErrorPlugin rechaza la solicitud antes de que el RetryAfterPlugin pueda comprobarla.
En la misma carpeta, cree el openai-errors.json archivo. Este archivo contiene las respuestas de error que Dev Proxy elige cuando no puede procesar una solicitud. Coinciden con los errores que devuelve la API de OpenAI:
| Status | error.code |
Lo que simula |
|---|---|---|
| 429 | rate_limit_exceeded |
La aplicación ha alcanzado su límite de tokens por minuto (TPM) o de solicitudes por minuto (RPM). |
| 429 | slow_down |
La tasa de solicitudes de la aplicación ha aumentado demasiado rápidamente. |
| 429 | credit_balance_exhausted |
Su organización no tiene créditos de prepago restantes. Reintentar no ayuda. |
| 503 | server_is_overloaded |
El modelo está temporalmente sobrecargado. |
Para obtener más información sobre estos errores, consulte Códigos de error en la documentación de OpenAI.
Archivo: 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"
}
}
}
]
}
]
}
El valor @dynamic establece el encabezado Retry-After y le indica al RetryAfterPlugin que realice un seguimiento de cuánto tiempo debe esperar la aplicación. La credit_balance_exhausted respuesta no tiene encabezado Retry-After, porque esperar no lo soluciona.
Inicie el proxy de desarrollo en la carpeta del proyecto:
devproxy
Cuando la aplicación llama a las API de OpenAI, Dev Proxy falla en el 90 % de las solicitudes con un error aleatorio del archivo openai-errors.json. Si la aplicación vuelve a llamar a la API antes de la hora indicada en el encabezado Retry-After, la RetryAfterPlugin lo indica y limita la solicitud.
Compruebe que su aplicación:
- Espera el tiempo de
Retry-Afterdespués de un errorrate_limit_exceededoslow_down. - Deja de llamar a la API después de un error
credit_balance_exhausted, en lugar de volver a intentarlo. - Reintenta con un retraso después de un
server_is_overloadederror y muestra un mensaje claro cuando se agoten los reintentos.
Obtenga más información sobre GenericRandomErrorPlugin.