Concepto clave
Las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) son el núcleo de cualquier sistema de base de datos, incluyendo las bases de datos vectoriales como Chroma. En el contexto de Chroma, estas operaciones se adaptan para manejar vectores en lugar de filas tradicionales. Imagina que Chroma es como una biblioteca especializada donde cada libro (vector) tiene un resumen numérico único que permite encontrar rápidamente libros similares por tema, en lugar de buscar por título o autor.
La inserción de vectores en Chroma implica agregar representaciones numéricas de datos (como texto, imágenes o audio) junto con metadatos asociados. La consulta, por otro lado, usa un vector de entrada para encontrar los vectores más similares en la base de datos mediante cálculos de similitud, como la similitud coseno. Esto es esencial en sistemas RAG (Retrieval Augmented Generation), donde recuperas información relevante para mejorar respuestas generadas por modelos de lenguaje.
Cómo funciona en la práctica
Para implementar operaciones CRUD con Chroma, sigue estos pasos clave. Primero, instala Chroma usando pip: pip install chromadb. Luego, importa la biblioteca y crea una colección, que es el contenedor principal para tus vectores.
import chromadb
chroma_client = chromadb.Client()
collection = chroma_client.create_collection(name="mi_coleccion")Para insertar vectores, usa el método add. Debes proporcionar embeddings (vectores), IDs únicos, y metadatos opcionales. Por ejemplo, para agregar documentos de texto:
collection.add(
embeddings=[[0.1, 0.2, ...], [0.3, 0.4, ...]],
documents=["Documento 1", "Documento 2"],
metadatas=[{"fuente": "web"}, {"fuente": "libro"}],
ids=["id1", "id2"]
)Para consultar, usa query con un vector de búsqueda. Chroma devolverá los vectores más similares basados en similitud coseno, junto con sus metadatos y documentos asociados.
results = collection.query(
query_embeddings=[[0.15, 0.25, ...]],
n_results=2
)
print(results['documents'])Caso de estudio
Considera un sistema RAG para un asistente de soporte técnico. Queremos almacenar soluciones a problemas comunes en Chroma y recuperarlas cuando un usuario hace una pregunta. Supongamos que tenemos los siguientes datos:
| ID | Documento (texto) | Embedding (vector simplificado) | Metadatos |
|---|---|---|---|
| sol1 | Reinicia el router para resolver problemas de conexión | [0.5, 0.3, 0.8] | {"categoría": "red", "prioridad": 1} |
| sol2 | Actualiza el controlador de la tarjeta gráfica | [0.2, 0.9, 0.4] | {"categoría": "hardware", "prioridad": 2} |
Al insertar estos en Chroma, podemos consultar con un vector derivado de la pregunta del usuario, como "Mi internet no funciona", que podría tener un embedding similar a [0.6, 0.2, 0.7]. La consulta devolverá "Reinicia el router..." como el resultado más relevante, permitiendo al sistema RAG generar una respuesta precisa.
En sistemas RAG, la calidad de los embeddings determina directamente la precisión de la recuperación. Usa modelos como Sentence-BERT para generar embeddings de texto efectivos.
Errores comunes
- Dimensiones inconsistentes de vectores: Asegúrate de que todos los vectores insertados tengan la misma dimensión. Chroma lanzará un error si varían, lo que puede romper consultas.
- Falta de normalización: No normalizar vectores antes de la inserción puede llevar a resultados de similitud inexactos. Normaliza a longitud unitaria para usar similitud coseno correctamente.
- Metadatos excesivos: Incluir demasiados metadatos puede ralentizar las operaciones. Limítalos a información esencial para filtrado y recuperación.
- IDs duplicados: Chroma sobrescribirá vectores con IDs duplicados sin advertencia. Usa IDs únicos para evitar pérdida de datos.
- Consultas sin embeddings: Intentar consultar sin proporcionar
query_embeddingsresultará en un error. Siempre genera un embedding para tu consulta.
Checklist de dominio
- Puedo crear una colección en Chroma y configurar parámetros como distancia de similitud.
- Sé insertar vectores con embeddings, documentos, metadatos e IDs únicos usando el método
add. - Puedo realizar consultas con
query, especificando el número de resultados y filtrando por metadatos. - Entiendo cómo normalizar vectores para optimizar la similitud coseno en Chroma.
- Puedo manejar errores comunes, como dimensiones inconsistentes o IDs duplicados, en operaciones CRUD.
- Sé integrar Chroma en un flujo de trabajo RAG, desde la inserción de datos hasta la recuperación para generación.
- Puedo evaluar el rendimiento de consultas ajustando parámetros como
n_resultso usando métricas de similitud.
Implementa un sistema de búsqueda de documentos con Chroma
En este ejercicio, construirás un sistema básico de búsqueda de documentos usando Chroma para practicar operaciones CRUD. Sigue estos pasos:
- Instala Chroma si no lo tienes:
pip install chromadb. - Crea un script Python que importe chromadb y cree un cliente.
- Define una colección llamada
docs_busquedacon distancia de similitud coseno. - Prepara datos de ejemplo: tres documentos de texto cortos (ej., "Aprende Python", "Base de datos vectoriales", "Sistemas RAG") y genera embeddings simples (usa listas de números, ej., [0.1, 0.2] para simular).
- Inserta los documentos en Chroma usando
add, con IDs únicos y metadatos que incluyan una categoría (ej., "programación", "datos"). - Realiza una consulta con un embedding de búsqueda (ej., [0.15, 0.25]) para recuperar los 2 documentos más similares.
- Imprime los resultados, incluyendo documentos y metadatos, y verifica que la búsqueda funcione correctamente.
- Usa chromadb.Client() para inicializar el cliente y create_collection para la colección.
- Para embeddings simples, puedes usar listas de números de longitud fija, como [0.1, 0.2, 0.3].
- Asegúrate de que los IDs sean únicos, por ejemplo, 'doc1', 'doc2', 'doc3'.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.