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

FeatureChromaDBPineconeWeaviateQdrant
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
DeploymentLocal/ServerManagedSelf/ManagedSelf/Managed
Cost (1M vecs)$0 (self)$70/month$0-200$0-150
Best forMVP, prototypingProduction SaaSHybrid searchHigh 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:

  1. ✅ Metadata filtering (10x latency + 25% accuracy)
  2. ✅ Hybrid search (15-20% accuracy en specific queries)
  3. ✅ Multi-tenancy (SaaS isolation)
  4. ✅ Batch operations (100x speedup ingestion)
  5. ✅ Distance metrics (cosine default)
  6. ✅ 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:

  1. Metadata filtering (reduce search space)
  2. 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:

  1. Batch insert (size=1000) → 1.6 min (100x speedup)
  2. Concurrent batches (4 workers) → 24 sec (4x adicional)
  3. 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:

  1. ChromaDB installation y setup
  2. Collection configuration (HNSW params)
  3. Metadata filtering implementation
  4. Batch ingestion pipeline
  5. 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