Módulo 3: Features Esenciales para RAG
Cápsula 08: Features Comparison y Resumen del Módulo
🎯 Objetivo
Consolidar aprendizajes del Módulo 3 con checklist de features por escenario, comparación de vector databases, y decision matrix para elegir DB correcta.
Tiempo estimado: 8-10 minutos
📋 Checklist de Features por Escenario
Escenario A: RAG Chatbot (Customer-facing)
Features críticas:
- ✅ Metadata filtering (category, language)
- ✅ Low latency (<500ms)
- ⚠️ Hybrid search (si queries específicos)
- ❌ Multi-tenancy (single customer)
- ⚠️ Batch operations (MVP puede usar single inserts)
- ✅ Monitoring (accuracy crítica)
Database recomendada: ChromaDB (MVP) → Pinecone (scale)
Escenario B: RAG SaaS (Multi-tenant)
Features críticas:
- ✅ Metadata filtering
- ✅ Multi-tenancy (metadata o collection strategy)
- ✅ Security/isolation
- ✅ Batch operations (onboarding customers)
- ✅ Monitoring (SLA)
- ⚠️ Hybrid search (según queries)
Database recomendada: Pinecone (managed) o Weaviate (self-hosted)
Escenario C: Internal Knowledge Base
Features críticas:
- ✅ Metadata filtering
- ✅ Hybrid search (technical queries)
- ✅ Batch operations (bulk ingestion)
- ❌ Multi-tenancy (single org)
- ⚠️ Low latency (no crítico)
- ⚠️ Monitoring (basic metrics OK)
Database recomendada: ChromaDB (self-hosted) o Weaviate
Escenario D: E-commerce Search
Features críticas:
- ✅ Metadata filtering (category, price, availability)
- ✅ Hybrid search (product names exactos)
- ✅ Batch operations (catálogo updates)
- ⚠️ Multi-tenancy (si marketplace)
- ✅ High throughput (1000+ QPS)
- ✅ Monitoring
Database recomendada: Weaviate (hybrid nativo) o Elasticsearch + vector plugin
🗂️ Comparación: ChromaDB vs Pinecone vs Weaviate vs Qdrant
| Feature | ChromaDB | Pinecone | Weaviate | Qdrant |
|---|---|---|---|---|
| Metadata Filtering | ✅ Post-filter | ✅ Pre-filter | ✅ Pre-filter | ✅ Pre-filter |
| Hybrid Search | ❌ Manual | ❌ Manual | ✅ Native | ⚠️ Plugin |
| Multi-tenancy | ⚠️ Metadata | ✅ Namespace | ✅ Tenants | ✅ Collections |
| Batch Operations | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
| Monitoring | ⚠️ Basic | ✅ Advanced | ✅ Prometheus | ✅ Metrics |
| Deployment | Local/Server | Managed | Self/Managed | Self/Managed |
| Cost (1M vecs) | $0 (self) | $70/month | $0-200 | $0-150 |
| Best for | MVP, prototyping | Production SaaS | Hybrid search | High performance |
🎯 Decision Matrix
Paso 1: Evaluar features críticas
Feature Priority (1-5):
Metadata filtering: 5 (siempre crítico)
Hybrid search: ___ (evalúa según queries)
Multi-tenancy: ___ (solo si SaaS)
Batch operations: ___ (solo si >100K docs)
Low latency (<50ms): ___ (chatbot = 5, analytics = 2)
High throughput: ___ (e-commerce = 5, MVP = 2)
Monitoring: ___ (production = 5, MVP = 2)
Managed service: ___ (prefer = 5, self-host = 1)
Paso 2: Calcular score por database
def calculate_score(features_priority, db_support):
"""
features_priority: dict {"metadata_filtering": 5, ...}
db_support: dict {"metadata_filtering": 1.0, ...} # 0-1
"""
total_score = 0
max_score = 0
for feature, priority in features_priority.items():
support = db_support.get(feature, 0)
total_score += priority * support
max_score += priority
return (total_score / max_score) * 100 # Percentage
# Ejemplo: RAG Chatbot
priorities = {
"metadata_filtering": 5,
"hybrid_search": 3,
"multi_tenancy": 1,
"batch_ops": 2,
"low_latency": 5,
"monitoring": 4
}
chromadb_support = {
"metadata_filtering": 0.8, # Post-filter (menos eficiente)
"hybrid_search": 0.3, # Manual implementation
"multi_tenancy": 0.5, # Metadata only
"batch_ops": 1.0,
"low_latency": 0.9,
"monitoring": 0.4
}
score_chromadb = calculate_score(priorities, chromadb_support)
# = 67% (aceptable para MVP)
pinecone_support = {
"metadata_filtering": 1.0, # Pre-filter
"hybrid_search": 0.4, # Manual pero mejor que ChromaDB
"multi_tenancy": 1.0, # Namespace nativo
"batch_ops": 1.0,
"low_latency": 0.95,
"monitoring": 1.0
}
score_pinecone = calculate_score(priorities, pinecone_support)
# = 88% (mejor para production)
Paso 3: Decision
Score > 80%: ✅ Excelente match
Score 60-80%: ⚠️ Aceptable (evaluar trade-offs)
Score < 60%: ❌ Buscar alternativa
🚫 Anti-patterns Comunes
Anti-pattern 1: No usar metadata filtering
# ❌ MAL
results = db.query(query_embedding, k=10)
# ✅ BIEN
results = db.query(
query_embedding,
where={"category": "support"},
k=10
)
Impact: 10x latency + 25% accuracy loss.
Anti-pattern 2: Single inserts para bulk data
# ❌ MAL: 2.7 horas
for doc in 1M_docs:
db.add(documents=[doc])
# ✅ BIEN: 1.6 minutos
for batch in batches(1M_docs, size=1000):
db.add(documents=batch)
Impact: 100x tiempo.
Anti-pattern 3: No monitorear accuracy
# ❌ MAL: No testing
deploy_to_prod()
# ✅ BIEN: Daily accuracy test
@daily
def test_accuracy():
accuracy = evaluate(test_set)
if accuracy < baseline * 0.95:
alert("Accuracy dropped 5%")
Impact: Degradación silenciosa (users frustrados).
Anti-pattern 4: Pure semantic para queries específicos
# ❌ MAL: "GPT-4 docs" → Devuelve GPT-3
results = db.query(embed("GPT-4 documentation"), k=10)
# ✅ BIEN: Hybrid search
results = hybrid_search(
query="GPT-4 documentation",
alpha=0.5 # 50% keyword, 50% semantic
)
Impact: 20-30% accuracy loss en specific queries.
✅ Resumen del Módulo 3
Lo que dominaste
Features esenciales:
- ✅ Metadata filtering (10x latency + 25% accuracy)
- ✅ Hybrid search (15-20% accuracy en specific queries)
- ✅ Multi-tenancy (SaaS isolation)
- ✅ Batch operations (100x speedup ingestion)
- ✅ Distance metrics (cosine default)
- ✅ Monitoring (latency, throughput, accuracy)
Habilidades desbloqueadas:
- ✅ Evaluar vector DB según features
- ✅ Diseñar arquitectura RAG production-ready
- ✅ Evitar anti-patterns comunes
- ✅ Calcular trade-offs (features vs cost)
🎓 Test Final del Módulo
Pregunta 1
Tu RAG tiene 500K docs, queries incluyen "Invoice #12345", accuracy debe ser >90%.
¿Qué features necesitas?
Solución
Features críticas:
- Metadata filtering (reduce search space)
- Hybrid search (captura "Invoice #12345" exacto)
Database: Weaviate (hybrid nativo) o Pinecone + Elasticsearch
Config:
results = hybrid_search(
query="Invoice #12345",
alpha=0.7, # 70% keyword (ID exacto)
where={"category": "invoices"}
)
Pregunta 2
Tu SaaS tiene 5000 clientes pequeños (1K docs cada uno).
¿Qué multi-tenancy strategy?
Solución
Strategy: Metadata filtering (shared collection)
Razón:
- 5000 collections = overhead excesivo
- Metadata filtering escala bien (>10K tenants)
Implementation:
results = db.query(
query_embedding,
where={"tenant_id": current_user.tenant_id},
k=10
)
Security: Middleware enforce tenant_id (no confiar en client).
Pregunta 3
Tu ingestion pipeline tarda 2 horas para 1M docs.
¿Cómo optimizar?
Solución
Optimizaciones:
- Batch insert (size=1000) → 1.6 min (100x speedup)
- Concurrent batches (4 workers) → 24 sec (4x adicional)
- Disable auto-indexing + rebuild al final → 6.6 min total
Implementation:
with ThreadPoolExecutor(max_workers=4) as executor:
batches = [docs[i:i+1000] for i in range(0, len(docs), 1000)]
executor.map(ingest_batch, batches)
collection.rebuild_index()
Resultado: 2 horas → 6.6 min (18x speedup). Si respondiste 2-3/3 correctamente → ✅ DOMINASTE MÓDULO 3
🚀 Próximo Paso: Módulo 4
Ya entiendes:
- ✅ POR QUÉ vector databases (Módulo 1)
- ✅ CÓMO funcionan (HNSW, IVF, PQ) (Módulo 2)
- ✅ QUÉ features necesitas (Filtering, Hybrid, Multi-tenancy) (Módulo 3)
Ahora implementarás:
- 🎯 ChromaDB setup y configuración (Módulo 4)
Módulo 4: ChromaDB Hands-On
Temas:
- ChromaDB installation y setup
- Collection configuration (HNSW params)
- Metadata filtering implementation
- Batch ingestion pipeline
- Monitoring básico
Duración: 60-75 minutos (40% conceptual, 60% código)
¿Listo? Ve a Módulo 4 - ChromaDB Hands-On
Tiempo de lectura: 8-10 minutos
Siguiente módulo: ../../../module-04-chromadb-setup/es/01-introduccion-modulo.md