Módulo 4: ChromaDB Setup y Configuración
Módulo 4: ChromaDB Setup y Configuración
Descripción del módulo
¡Llegó el momento de implementar! Después de 3 módulos conceptuales (Por qué, Cómo, Qué features), ahora construirás tu primer vector database con ChromaDB.
Este módulo es 80% hands-on: Código ejecutable, configuración real, debugging práctico. Aplicarás todo lo aprendido:
- Configurar HNSW con parámetros óptimos (Módulo 2)
- Implementar metadata filtering (Módulo 3)
- Batch ingestion eficiente (Módulo 3)
- Monitoreo básico (Módulo 3)
Al finalizar este módulo, tendrás:
- ✅ ChromaDB funcionando localmente
- ✅ Collection configurada con HNSW optimizado
- ✅ Pipeline de ingestion para 10K-100K documentos
- ✅ Queries con metadata filtering funcionales
- ✅ Benchmarks de performance (latency, throughput)
Este módulo es 80% código, 20% conceptual. Prepara tu IDE!
🎯 Objetivo del módulo
Objetivo profesional:
Implementar y configurar ChromaDB localmente con HNSW optimizado, metadata filtering, y batch ingestion eficiente, validando performance con benchmarks reales (latency <50ms, throughput >1K docs/sec).
¿Por qué ChromaDB para empezar?
- ✅ Zero setup: Funciona en Python sin servidor externo
- ✅ HNSW nativo: Alta accuracy (98%) out-of-the-box
- ✅ Perfecto para MVP: 10K-500K vectores sin complejidad
- ✅ Migration path: ChromaDB → Pinecone/Weaviate cuando escales
Analogía: ChromaDB es como SQLite para vector databases. Simple, local, perfecto para aprender y prototipar.
📚 Contenido del módulo
Cápsula 01: Introducción al módulo (estás aquí)
- Objetivo y filosofía del módulo
- Por qué ChromaDB para aprender
- Setup requirements y progresión
Cápsula 02: ChromaDB Installation y Setup
- Installation (pip install chromadb)
- Client modes (ephemeral, persistent, client-server)
- Primera collection (hello world)
- Verificar instalación funcional
Cápsula 03: Collection Configuration (HNSW Parameters)
- Configurar HNSW (M, efConstruction, efSearch)
- Distance metrics (cosine, L2, dot product)
- Collection metadata y settings
- Validar configuración óptima
Cápsula 04: Metadata Filtering Implementation
- Agregar metadata a documentos
- Where clauses (equality, range, logical)
- Pre-filtering vs post-filtering en ChromaDB
- Benchmark filtering impact (latency reduction)
Cápsula 05: Batch Ingestion Pipeline
- Single vs batch insert (benchmark)
- Optimal batch size para ChromaDB (1000-5000)
- Progress tracking y error handling
- Concurrent batches (ThreadPoolExecutor)
Cápsula 06: Query Optimization
- Basic query (top-k similarity)
- Query con metadata filtering
- Ajustar n_results según accuracy needed
- Benchmark query performance (p50, p95, p99)
Cápsula 07: Persistence y Durability
- Ephemeral vs persistent client
- Data directory configuration
- Backup strategies (simple copy)
- Recovery y migrations
Cápsula 08: Mini-Proyecto - Document Search System
- Problema: Indexar 10K Wikipedia articles
- Pipeline completo (embed → batch insert → query)
- Metadata filtering por category y date
- Benchmark final (latency, accuracy, throughput)
- Resumen y transición a Módulo 5
🔗 Conexión con otros módulos
Prerequisitos:
- Módulo 1: Por qué Vector DBs (entiendes necesidad)
- Módulo 2: Cómo funcionan HNSW (configurarás parámetros informadamente)
- Módulo 3: Features esenciales (implementarás filtering, batch ops)
Este módulo prepara para:
- Módulo 5: ChromaDB + RAG completo (integrarás LLM + vector DB)
- Módulo 6-8: Production (escalarás, migrarás, optimizarás)
Flujo completo:
Módulo 1-3: Fundamentos conceptuales (100% teoría)
↓
Módulo 4: ChromaDB Setup ← Estás aquí (80% código)
↓
Módulo 5: ChromaDB + RAG (90% código, integración completa)
↓
Módulo 6-8: Production considerations (70% práctico)
⏱️ Tiempo estimado
Lectura + Código: 90-120 minutos
Desglose por cápsula:
- Cápsula 01: 5 min (introducción)
- Cápsula 02: 12-15 min (installation + setup)
- Cápsula 03: 12-15 min (HNSW configuration)
- Cápsula 04: 12-15 min (metadata filtering)
- Cápsula 05: 15-18 min (batch ingestion)
- Cápsula 06: 10-12 min (query optimization)
- Cápsula 07: 8-10 min (persistence)
- Cápsula 08: 25-30 min (mini-proyecto)
Total: 99-130 minutos
Nota: Este módulo requiere ejecutar código (no solo leer). Planea tiempo para experimentar.
🎓 ¿Qué aprenderás en este módulo?
Al finalizar este módulo, serás capaz de:
1. Setup ChromaDB correctamente
- ✅ Instalar ChromaDB (pip)
- ✅ Elegir client mode (ephemeral vs persistent)
- ✅ Crear collections con configuración óptima
- ✅ Debuggear errores comunes (dependency issues)
2. Configurar HNSW inteligentemente
- ✅ Ajustar M, efConstruction, efSearch según requisitos
- ✅ Elegir distance metric (cosine, L2, dot product)
- ✅ Validar accuracy vs latency trade-off
- ✅ Benchmark configuraciones (A/B testing)
3. Implementar metadata filtering
- ✅ Agregar metadata estructurada (category, date, tags)
- ✅ Queries con where clauses (equality, range, logical)
- ✅ Medir impact en latency (10x speedup esperado)
- ✅ Debuggear queries lentos (profiling)
4. Optimizar batch ingestion
- ✅ Implementar batch insert (1000-5000 batch size)
- ✅ Progress tracking (tqdm, logging)
- ✅ Error handling (retry logic)
- ✅ Concurrent batches (4x speedup)
5. Benchmark performance
- ✅ Medir latency (p50, p95, p99)
- ✅ Medir throughput (docs/sec, queries/sec)
- ✅ Medir accuracy (retrieval recall@10)
- ✅ Identificar bottlenecks (profiling)
💡 Filosofía del módulo
Por qué hands-on después de 3 módulos conceptuales
Podrías preguntarte: "¿Por qué no empezar con código desde Módulo 1?"
Respuesta: Fundamentos primero → Implementación informada.
Sin fundamentos (típico tutorial):
# Tutorial típico: "Copia este código"
collection = client.create_collection("docs")
collection.add(documents=["Hello"], ids=["1"])
results = collection.query(query_texts=["Hi"], n_results=1)
# ❌ Problema: No entiendes POR QUÉ funciona, CÓMO optimizar
Con fundamentos (este curso):
# Con conocimiento de Módulos 1-3
collection = client.create_collection(
name="docs",
metadata={
# Módulo 2: Configurar HNSW inteligentemente
"hnsw:M": 32, # Alta accuracy (entiendes trade-off)
"hnsw:construction_ef": 200,
"hnsw:search_ef": 100,
"hnsw:space": "cosine" # Text embeddings
}
)
# Módulo 3: Batch insert (100x faster que single)
collection.add(
documents=batch_docs, # 1000 docs
metadatas=batch_metadata, # Filtering support
ids=batch_ids
)
# Módulo 3: Metadata filtering (10x speedup)
results = collection.query(
query_texts=["Hi"],
where={"category": "support"}, # Pre-filter
n_results=10
)
# ✅ Ventaja: Entiendes cada parámetro, puedes optimizar
Diferenciador clave vs competencia
90% de tutoriales ChromaDB:
- Muestran código básico sin explicar configuración
- No cubren batch ingestion, metadata filtering optimization
- No benchmarking (no sabes si es rápido o lento)
Este módulo:
- Código con contexto (POR QUÉ cada parámetro)
- Benchmarks reales (latency, throughput antes/después)
- Decision framework (cuándo ajustar M, efSearch)
🚫 Qué NO cubre este módulo
Este módulo NO cubre:
❌ Integración con LLM (eso es Módulo 5)
- No conectarás OpenAI API todavía
- No construirás RAG system completo
- Solo vector database aislada
❌ Production deployment (eso es Módulos 6-8)
- No Docker, Kubernetes, cloud deployment
- Solo local development
- Migration a Pinecone viene después
❌ Advanced features (eso es Módulo 7-8)
- No distributed sharding
- No custom distance metrics
- No multi-tenancy avanzado
Scope claro: Este módulo es sobre ChromaDB fundamentals bien hechos. Integración y production vienen después.
✅ Criterios de éxito
Completaste exitosamente este módulo cuando:
Puedes ejecutar estos comandos sin errores:
import chromadb
# 1. Setup
client = chromadb.PersistentClient(path="./chroma_db")
# 2. Collection con HNSW optimizado
collection = client.create_collection(
name="test",
metadata={"hnsw:M": 32, "hnsw:space": "cosine"}
)
# 3. Batch insert
collection.add(
documents=["doc1", "doc2", "doc3"],
metadatas=[{"cat": "a"}, {"cat": "b"}, {"cat": "a"}],
ids=["1", "2", "3"]
)
# 4. Query con filtering
results = collection.query(
query_texts=["doc1"],
where={"cat": "a"},
n_results=2
)
print(results) # ✅ Debe devolver ["doc1", "doc3"]
Puedes responder estas preguntas:
-
✅ ¿Cuál es optimal batch size para ChromaDB?
- Respuesta: 1000-5000 docs (625K docs/min throughput)
-
✅ ¿Cómo configurar HNSW para accuracy >95%?
- Respuesta: M=32, efConstruction=200, efSearch=100-200
-
✅ ¿Cuándo usar ephemeral vs persistent client?
- Respuesta: Ephemeral para testing/prototyping, Persistent para desarrollo/producción
-
✅ ¿Cómo medir si metadata filtering está optimizado?
- Respuesta: Benchmark latency con/sin filtering. Esperado: 10x speedup si filter reduce search space 90%
-
✅ ¿Cuál es latency esperada para 100K vectores con HNSW?
- Respuesta: p50 ~15ms, p95 ~40ms, p99 ~80ms (1536-dim, cosine)
Si respondiste 4-5/5 correctamente Y código ejecuta sin errores → ✅ Módulo completado
🛠️ Setup Requirements
Software necesario
Python:
- Python 3.8+ (recomendado 3.10+)
- pip (package manager)
Librerías:
pip install chromadb
pip install numpy # Para embeddings mock
pip install tqdm # Progress bars
IDE recomendado:
- VS Code con Python extension
- Jupyter Notebook (alternativa)
- PyCharm Community Edition
Hardware mínimo:
- RAM: 8 GB (16 GB recomendado)
- Storage: 5 GB free space
- CPU: Cualquier CPU moderno (HNSW es CPU-bound)
Preparación antes de empezar
1. Verificar Python version:
python --version # Debe ser >= 3.8
2. Crear virtual environment (recomendado):
python -m venv venv
source venv/bin/activate # Mac/Linux
# venv\Scripts\activate # Windows
3. Instalar ChromaDB:
pip install chromadb
4. Verificar instalación:
import chromadb
print(chromadb.__version__) # Debe imprimir version (e.g., 0.4.22)
Si todos los pasos funcionan → ✅ Listo para empezar
📖 Cómo usar este módulo
Estrategia recomendada:
-
Lee + Ejecuta código en paralelo
- Lee cápsula en un monitor/window
- Ejecuta código en otro
- Experimenta con parámetros
-
No copies código ciegamente
- Entiende cada línea (usa comentarios)
- Experimenta: Cambia M=16 a M=32, mide diferencia
- Rompe código intencionalmente (aprende debugging)
-
Benchmarking es crítico
- Ejecuta benchmarks antes/después de optimizaciones
- Valida que optimizaciones funcionan (no assumptions)
- Ejemplo: "Batch insert debería ser 100x faster" → Medir!
-
Mini-proyecto es obligatorio
- Cápsula 08 es donde consolidas todo
- No saltees: Es donde aprendes debugging real
- Si falla, debuggea (mejor aprendizaje)
Tiempo sugerido:
Opción A: Dos sesiones (recomendado)
- Sesión 1: Cápsulas 01-04 (setup, config, filtering) = 45-60 min
- Sesión 2: Cápsulas 05-08 (batch, query, mini-proyecto) = 60-70 min
Opción B: Una sesión intensa
- Todo de corrido = 120-130 min
- Ventaja: Contexto fresco
- Desventaja: Fatiga (mucho código)
Recomendación: Opción A (dos sesiones con breaks).
🔗 Recursos para este módulo
Documentación oficial:
- ChromaDB Docs - Getting started, API reference
- ChromaDB GitHub - Issues, examples
Notebooks de ejemplo:
- ChromaDB Quickstart - Official tutorial
- ChromaDB with LangChain - Integration example
Debugging:
- ChromaDB Troubleshooting - Common issues
- Stack Overflow tag:
chromadb
Nota: Este módulo es autocontenido (no requieres leer docs externas). Recursos son para profundizar después.
🚀 ¿Listo para empezar?
Próximo paso:
Ve a Cápsula 02: ChromaDB Installation y Setup
Ahí aprenderás:
- Installation (pip install chromadb)
- Client modes (ephemeral vs persistent vs client-server)
- Primera collection (hello world funcional)
- Verificar que todo funciona correctamente
Antes de continuar, asegúrate de:
- ✅ Python 3.8+ instalado
- ✅ Virtual environment activado (recomendado)
- ✅ ChromaDB instalado (
pip install chromadb) - ✅ IDE abierto y listo
Si todo está listo → Sigue a Cápsula 02!
Tiempo de lectura: 5 minutos
Siguiente: 02-installation-setup.md