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.
Las API del modelo de lenguaje limitan tu tráfico de dos maneras a la vez: cuántas solicitudes se envían por minuto (RPM) y cuántos tokens se usan por minuto (TPM). Puede mantenerse bien por debajo del límite de solicitudes y seguir sufriendo limitación de tasa porque algunos prompts largos han consumido el presupuesto de tokens. Al alcanzar cualquiera de los límites, la API responde con 429 Too Many Requests y la aplicación tiene que esperar.
Cómo cuentan OpenAI, Azure OpenAI y Anthropic
| Provider | Limitaciones | Lo que necesita saber |
|---|---|---|
| OpenAI | RPM, solicitudes por día, TPM, tokens por día, etc., por organización y proyecto, por modelo | Alcanzas el límite que se alcanza primero. Para el límite de tokens, una solicitud se considera el valor mayor entre max_tokens y una estimación en función de sus caracteres. También se cuentan las solicitudes fallidas. |
| Azure OpenAI | TPM que se asigna a cada implementación, además de un límite de RPM establecido en proporción a ella | RPM se comprueba en las ventanas de 1 o 10 segundos, por lo que una ráfaga obtiene un 429 incluso cuando el total por minuto está bien. La estimación del token incluye max_tokens. |
| Antrópica | RPM, tokens de entrada por minuto (ITPM) y tokens de salida por minuto (OTPM), por modelo | La capacidad se rellena continuamente y podría aplicarse 60 RPM como 1 solicitud por segundo. Para la mayoría de los modelos, los tokens de entrada almacenados en caché no cuentan para ITPM y max_tokens no cuenta para OTPM. |
Si establece max_tokens en 4000 y obtiene 200 tokens de vuelta, OpenAI y Azure OpenAI siguen contando los 4000 para su límite. Así es como puede obtener 429s mientras que las métricas de uso se ven muy por debajo de la cuota.
Qué significa un 429 para cada proveedor
No todos los errores 429 desaparecen con solo esperar.
| Provider | Esperar y reintentar | Detente y dile a alguien |
|---|---|---|
| OpenAI | 429 para solicitudes o tokens, 429 slow_down (el tráfico creció demasiado rápido, incluso dentro de sus límites) y 503 server_is_overloaded. Espere a Retry-After cuando esté presente. |
429 con credit_balance_exhausted, organization_spend_limit_exceeded, project_spend_limit_exceededo organization_usage_limit_exceeded en error.code. Volver a intentarlo no restaurará el acceso. |
| Azure OpenAI | 429 para el TPM o RPM de la implementación, para la capacidad del sistema o para una reducción temporal de su límite de tasa. Espere a retry-after-ms. |
429s sostenidos en producción mientras estás por debajo de la cuota aprobada. Compruebe la asignación de TPM de la implementación y abra una solicitud de soporte técnico. |
| Antrópica | 429 rate_limit_error con un retry-after encabezado, incluidos los límites de aceleración después de un aumento nítido del uso y 529 overloaded_error. |
429 para el límite de gasto mensual. No tiene encabezado retry-after , error.details.error_code es enforced_spend_limit_reachedy sigue fallando hasta que se reanuda el acceso. |
Cómo controlar los límites de tasa de LLM
- Comprueba qué 429 tienes. Los errores de facturación, gasto y cuota necesitan una persona, no un reintento.
- Espere tanto tiempo como lo solicite la API. OpenAI y Anthropic envían
retry-afteren segundos. Azure OpenAI envíaretry-after-msen milisegundos. Sin una sugerencia, aplique retroceso exponencial con jitter aleatorio y limite tanto el número de intentos como el tiempo total. - Sepa lo que ya hace el SDK. Los SDK de Python de OpenAI y Anthropic reintentan los errores de conexión y las respuestas
408,409,429y 5xx 2 veces de forma predeterminada. Si agrega su propio bucle de reintento, desactive los reintentos del SDK, por ejemplo, conmax_retries=0en Python, como recomienda Azure OpenAI, o los intentos se multiplican. - Reduzca lo que importa. En OpenAI y Azure OpenAI, establezca
max_tokensen un valor cercano al tamaño de respuesta esperado. En Anthropic, almacene en caché contenido repetido como instrucciones del sistema. - Sube gradualmente. Un salto agudo en el tráfico desencadena los límites de aceleración de OpenAI
slow_downy Anthropic, incluso dentro de sus límites. OpenAI sugiere que una vez que llegue a 1 millón de tokens de entrada por minuto, no crezca más de 50% cada 15 minutos. - No reproduzca una secuencia que ya haya consumido. Un error después de que se inicie una secuencia puede llegar como un evento de secuencia y OpenAI desaconseja volver a reproducir automáticamente una solicitud después de consumir la salida.
- Indique al usuario cuando una solicitud se queda bloqueada por un error 429, en lugar de mostrar un spinner.
Cómo probar que la aplicación controla los límites de velocidad de LLM
| Approach | Lo que encuentras | Lo que te pierdes |
|---|---|---|
| Simula el cliente del SDK en las pruebas o deja que tu agente de código escriba el mock | Si se ejecuta la rama de error | Los códigos de estado real, los códigos de error y los encabezados del proveedor y los propios reintentos del SDK. La aplicación también necesita una opción solo para pruebas para acceder al mock. |
| Llame a la API real hasta que te limite la tasa de solicitudes. | Comportamiento real | Pagas por cada token y no puedes desencadenar slow_down, una sobrecarga o un límite de gasto a voluntad |
| Intercepte el tráfico real de la aplicación y devuelva los errores del proveedor, o aplique limitación de velocidad en función de los tokens que usa la aplicación. | Direcciones URL reales, la directiva de reintento del SDK y los cuerpos de error del proveedor, con un límite que elija | Tu código aislado. Deja eso para las pruebas unitarias. |
Pruébalo en la aplicación
Dev Proxy intercepta las solicitudes de la aplicación a la API del modelo de lenguaje y devuelve los propios errores del proveedor, mientras que la aplicación sigue llamando a la dirección URL real. Para OpenAI, descargue la configuración preestablecida e inicie Dev Proxy con ella:
devproxy config get openai-throttling
devproxy --config-file "~dataFolder/configs/openai-throttling/.devproxy/devproxyrc.json"
El openai-throttling valor preestablecido falla en el 90 % de las solicitudes a https://api.openai.com/* con un error aleatorio: rate_limit_exceeded para TPM o RPM, slow_down, credit_balance_exhausted o 503 server_is_overloaded. El anthropic-throttling valor preestablecido hace lo mismo para https://api.anthropic.com/* con RPM, token de entrada, token de salida y aceleración 429s y 529 overloaded_error. Ambos valores preestablecidos incluyen RetryAfterPlugin, que indica cuándo la aplicación vuelve a llamar a la API antes de que se agote el tiempo retry-after de un 429. No comprueba las respuestas 503 y 529.
Para aplicar límites según los tokens que use realmente la aplicación, usa el LanguageModelRateLimitingPlugin. Cuenta los tokens de solicitud y finalización que cada respuesta notifica y devuelve 429 con retry-after cuando la aplicación supera los límites establecidos. Funciona con API compatibles con OpenAI, incluidos Azure OpenAI y modelos locales:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "LanguageModelRateLimitingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "languageModelRateLimitingPlugin"
}
],
"urlsToWatch": [
"https://api.openai.com/*",
"https://*.openai.azure.com/openai/deployments/*/chat/completions*"
],
"languageModelRateLimitingPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/languagemodelratelimitingplugin.schema.json",
"promptTokenLimit": 1000,
"completionTokenLimit": 500,
"resetTimeWindowSeconds": 60
}
}
El plugin no reproduce el max_tokens valor estimado. Su cuerpo predeterminado 429 usa el insufficient_quota código. Para devolver el cuerpo del error que la aplicación espera para un límite de tasa, establezca whenLimitExceeded en Custom y apunte customResponseFile a su propia respuesta. Para instalar Dev Proxy, consulte Configurar Dev Proxy.