106 lines
3.1 KiB
Markdown
106 lines
3.1 KiB
Markdown
# 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`:
|
|
|
|
```bash
|
|
# 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**:
|
|
```bash
|
|
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**:
|
|
```bash
|
|
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**:
|
|
```bash
|
|
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:
|
|
1. **Reduce** `EMBEDDING_BATCH_SIZE` (ej: de 16 a 8)
|
|
2. **Aumenta** `EMBEDDING_DELAY_BETWEEN_BATCHES` (ej: de 1.0 a 2.0)
|
|
3. **Aumenta** `EMBEDDING_MAX_RETRIES` (ej: de 5 a 10)
|
|
|
|
Si el procesamiento es muy lento y NO tienes errores 429:
|
|
1. **Aumenta** `EMBEDDING_BATCH_SIZE` (ej: de 16 a 32)
|
|
2. **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.
|