Bug solucionado de Qdrant y subida a de datos extraidos a Redis con referencia al documento
This commit is contained in:
105
backend/RATE_LIMITING.md
Normal file
105
backend/RATE_LIMITING.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user