3.1 KiB
Configuración de Rate Limiting para Azure OpenAI
Este documento explica cómo configurar el rate limiting para evitar errores 429 RateLimitReached en Azure OpenAI.
Variables de Entorno
Agrega estas variables en tu archivo .env:
# Rate limiting para embeddings
EMBEDDING_BATCH_SIZE=16
EMBEDDING_DELAY_BETWEEN_BATCHES=1.0
EMBEDDING_MAX_RETRIES=5
Configuración según Azure OpenAI Tier
S0 Tier (Gratis/Básico)
- Límite: ~1-3 requests/minuto, ~1,000 tokens/minuto
- Configuración recomendada:
EMBEDDING_BATCH_SIZE=16 EMBEDDING_DELAY_BETWEEN_BATCHES=1.0 EMBEDDING_MAX_RETRIES=5
Standard Tier
- Límite: ~10-20 requests/segundo, ~100,000 tokens/minuto
- Configuración recomendada:
EMBEDDING_BATCH_SIZE=50 EMBEDDING_DELAY_BETWEEN_BATCHES=0.5 EMBEDDING_MAX_RETRIES=3
Premium Tier
- Límite: ~100+ requests/segundo, ~500,000+ tokens/minuto
- Configuración recomendada:
EMBEDDING_BATCH_SIZE=100 EMBEDDING_DELAY_BETWEEN_BATCHES=0.1 EMBEDDING_MAX_RETRIES=3
Cómo Funciona el Rate Limiting
1. Batching
Los textos se dividen en lotes de tamaño EMBEDDING_BATCH_SIZE. Un lote más pequeño reduce la probabilidad de exceder el rate limit.
2. Delays entre Batches
Después de procesar cada lote, el sistema espera EMBEDDING_DELAY_BETWEEN_BATCHES segundos antes de procesar el siguiente.
3. Retry con Exponential Backoff
Si ocurre un error 429 (rate limit):
- Reintento 1: espera 2 segundos
- Reintento 2: espera 4 segundos
- Reintento 3: espera 8 segundos
- Reintento 4: espera 16 segundos
- Reintento 5: espera 32 segundos
Después de EMBEDDING_MAX_RETRIES reintentos, el proceso falla.
Monitoreo de Logs
Cuando procesas documentos, verás logs como:
📊 Procesando batch 1/10 (16 textos)...
✓ Batch 1/10 completado exitosamente
📊 Procesando batch 2/10 (16 textos)...
⚠️ Rate limit alcanzado en batch 2/10. Reintento 1/5 en 2s...
✓ Batch 2/10 completado exitosamente
...
✅ Embeddings generados exitosamente: 150 vectores de 3072D
Cálculo de Tiempo de Procesamiento
Para estimar cuánto tardará el procesamiento:
Tiempo estimado = (total_chunks / EMBEDDING_BATCH_SIZE) * EMBEDDING_DELAY_BETWEEN_BATCHES
Ejemplos:
- 100 chunks con S0 config:
(100/16) * 1.0 = ~6.25 segundos(sin contar reintentos) - 1000 chunks con S0 config:
(1000/16) * 1.0 = ~62.5 segundos(sin contar reintentos)
Ajuste Dinámico
Si experimentas muchos errores 429:
- Reduce
EMBEDDING_BATCH_SIZE(ej: de 16 a 8) - Aumenta
EMBEDDING_DELAY_BETWEEN_BATCHES(ej: de 1.0 a 2.0) - Aumenta
EMBEDDING_MAX_RETRIES(ej: de 5 a 10)
Si el procesamiento es muy lento y NO tienes errores 429:
- Aumenta
EMBEDDING_BATCH_SIZE(ej: de 16 a 32) - Reduce
EMBEDDING_DELAY_BETWEEN_BATCHES(ej: de 1.0 a 0.5)
Upgrade de Azure OpenAI Tier
Para aumentar tu límite, visita: https://aka.ms/oai/quotaincrease
Después del upgrade, ajusta las variables de entorno según tu nuevo tier.