Concepto clave
Un sistema RAG (Retrieval Augmented Generation) combina recuperación de información con generación de texto, permitiendo que modelos de lenguaje accedan a bases de conocimiento externas. Chroma es una base de datos vectorial de código abierto diseñada específicamente para aplicaciones de IA, almacenando embeddings (representaciones vectoriales de texto) y permitiendo búsquedas por similitud semántica.
Imagina que eres un investigador con una biblioteca personal gigante. En lugar de memorizar cada libro, creas fichas con resúmenes vectoriales de cada capítulo. Cuando necesitas información sobre un tema específico, buscas las fichas más similares y usas esos libros como referencia para escribir tu informe. Chroma es tu sistema de fichas vectoriales.
Cómo funciona en la práctica
El flujo básico de un sistema RAG con Chroma sigue estos pasos:
- Preparación de datos: Dividir documentos en fragmentos (chunks) manejables
- Generación de embeddings: Convertir cada fragmento a vectores usando un modelo como sentence-transformers
- Almacenamiento en Chroma: Guardar los embeddings con metadatos asociados
- Consulta: Convertir la pregunta del usuario a embedding y buscar los fragmentos más similares
- Generación: Usar los fragmentos recuperados como contexto para un LLM
Ejemplo con datos concretos:
| Fragmento de texto | Dimensión del embedding | Metadatos |
|---|---|---|
| "ChromDB es una base vectorial optimizada para ML" | 384 números float | {"fuente": "documentación", "página": 12} |
| "Los embeddings capturan significado semántico" | 384 números float | {"fuente": "tutorial", "autor": "Ana López"} |
Caso de estudio
Una empresa de e-learning necesita un asistente que responda preguntas sobre su catálogo de 500 cursos. Implementamos:
- Extracción: Convertir descripciones de cursos a texto plano
- Chunking: Dividir en párrafos de 200-300 palabras
- Embedding: Usar all-MiniLM-L6-v2 (384 dimensiones)
- Chroma: Almacenar con metadatos de categoría y nivel
- Retrieval: Buscar 3 cursos más relevantes por pregunta
- Generación: GPT-3.5 con contexto recuperado
Resultado: 85% de precisión en respuestas vs 45% del LLM solo, con reducción de alucinaciones.
Errores comunes
- Chunks demasiado grandes: Fragmentos mayores a 500 tokens pierden precisión en recuperación. Solución: usar overlap entre chunks (10-20%).
- Metadatos insuficientes: No incluir información de fuente limita trazabilidad. Siempre guardar origen y timestamp.
- Embedding inconsistente: Usar diferentes modelos para indexar y consultar causa desalineación. Estandarizar en un modelo.
- Falta de normalización: Texto sin limpieza (HTML, markdown) afecta calidad. Implementar pipeline de preprocesamiento.
- Olvidar persistencia: Chroma en memoria se pierde al reiniciar. Usar
persist_directorypara almacenamiento permanente.
Checklist de dominio
- ✓ Puedo instalar Chroma y crear una colección con metadatos personalizados
- ✓ Implemento chunking con overlap usando bibliotecas como LangChain o custom
- ✓ Genero embeddings consistentes con modelos sentence-transformers
- ✓ Realizo queries con filtros por metadatos y ajusto k (número de resultados)
- ✓ Integro Chroma con un pipeline de generación (OpenAI, Hugging Face)
- ✓ Evalúo resultados con métricas como precisión@k o relevancia humana
- ✓ Persisto la base de datos y gestiono versiones de embeddings
Implementa un QA System sobre documentación técnica
Objetivo: Crear un sistema que responda preguntas sobre la documentación de Chroma usando RAG.
- Prepara el entorno:
- Instala:
pip install chromadb sentence-transformers - Descarga la documentación de Chroma (README.md y 2-3 páginas de docs)
- Instala:
- Procesa documentos:
- Crea función para dividir texto en chunks de 150-200 palabras con 20% de overlap
- Limpia texto (remueve código, links, formateo)
- Extrae metadatos básicos: fuente, longitud, tipo
- Configura Chroma:
- Crea colección llamada "chroma_docs"
- Usa embedding model
all-MiniLM-L6-v2 - Habilita persistencia en disco
- Indexa documentos:
- Genera embeddings para todos los chunks
- Almacena con IDs únicos y metadatos
- Verifica que se guardaron correctamente
- Implementa query:
- Crea función que tome pregunta, la convierta a embedding
- Recupera 3 chunks más similares
- Muestra resultados con similitud score y metadatos
- Prueba el sistema:
- Haz 3 preguntas sobre instalación, configuración y queries
- Evalúa si los chunks recuperados son relevantes
- Documenta hallazgos en tabla HTML
- Usa Chroma's Client y Collection methods directamente, sin wrappers, para entender la API base
- Para overlap en chunks, considera guardar posición relativa en metadatos
- Prueba diferentes valores de k (1,3,5) y observa cómo cambian los resultados
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.