Instalación y configuración de ChromaDB
ChromaDB representa un salto cualitativo respecto a FAISS en términos de persistencia y gestión de datos vectoriales. Mientras que FAISS requiere implementar manualmente la persistencia, ChromaDB ofrece almacenamiento automático y una arquitectura cliente-servidor que facilita el desarrollo de aplicaciones RAG robustas.
Instalación mediante Docker
La forma más eficiente de ejecutar ChromaDB es mediante Docker. Crea un archivo docker-compose.yml:
version: '3.8'
services:
chroma:
container_name: chroma
image: chromadb/chroma:1.0.10
ports:
- "8000:8000"
environment:
- CHROMA_SERVER_HOST=0.0.0.0
- CHROMA_SERVER_HTTP_PORT=8000
- IS_PERSISTENT=TRUE
- PERSIST_DIRECTORY=/chroma/chroma
volumes:
- chroma_data:/chroma/chroma
volumes:
chroma_data:
Para iniciar el servicio:
docker-compose up -d
Instalación de dependencias Python
ChromaDB requiere paquetes específicos para integrarse correctamente con LangChain:
pip install chromadb langchain-chroma langchain-openai
Configuración básica del cliente
Una vez que el servidor ChromaDB esté ejecutándose, configura el cliente Python:
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
import chromadb
client = chromadb.HttpClient(host="localhost", port=8000)
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector_store = Chroma(
client=client,
collection_name="documentos_rag",
embedding_function=embeddings,
)
Configuración de colecciones
ChromaDB organiza los datos en colecciones, que funcionan como espacios de nombres independientes:
vector_store_legal = Chroma(
client=client,
collection_name="documentos_legales",
embedding_function=embeddings,
)
vector_store_tecnico = Chroma(
client=client,
collection_name="documentos_tecnicos",
embedding_function=embeddings,
)
Persistencia y colección de documentos
La persistencia automática de ChromaDB elimina la complejidad de gestionar manualmente el almacenamiento de vectores.
Almacenamiento de documentos
Para añadir documentos a una colección de ChromaDB:
from langchain_core.documents import Document
documentos = [
Document(
page_content="Python es un lenguaje de programación interpretado y de alto nivel.",
metadata={"categoria": "programacion", "nivel": "basico", "fecha": "2025-01-15"}
),
Document(
page_content="FastAPI es un framework web moderno para construir APIs con Python.",
metadata={"categoria": "web", "nivel": "intermedio", "fecha": "2025-01-16"}
),
Document(
page_content="Docker permite empaquetar aplicaciones en contenedores ligeros.",
metadata={"categoria": "devops", "nivel": "intermedio", "fecha": "2025-01-17"}
)
]
vector_store.add_documents(documentos)
Gestión de identificadores personalizados
Cuando necesites control sobre los identificadores de documentos:
documentos_con_ids = [
Document(
page_content="Machine Learning es una rama de la inteligencia artificial.",
metadata={"categoria": "ia", "autor": "equipo_datos"}
),
Document(
page_content="Deep Learning utiliza redes neuronales profundas.",
metadata={"categoria": "ia", "autor": "equipo_datos"}
)
]
ids_personalizados = ["ml_intro_001", "dl_intro_002"]
vector_store.add_documents(
documents=documentos_con_ids,
ids=ids_personalizados
)
Búsqueda y recuperación de documentos
La búsqueda por similitud constituye la funcionalidad principal:
consulta = "¿Qué es el aprendizaje automático?"
documentos_similares = vector_store.similarity_search(
query=consulta,
k=3
)
for doc in documentos_similares:
print(f"Contenido: {doc.page_content}")
print(f"Metadatos: {doc.metadata}")
Búsqueda con puntuación de similitud
Para obtener información sobre la relevancia de los resultados:
resultados_con_score = vector_store.similarity_search_with_score(
query="frameworks web para Python",
k=2
)
for documento, score in resultados_con_score:
print(f"Puntuación: {score:.4f}")
print(f"Contenido: {documento.page_content}")
Filtrado por metadatos
ChromaDB permite filtrar resultados basándose en los metadatos almacenados:
documentos_programacion = vector_store.similarity_search(
query="lenguajes de programación",
k=5,
filter={"categoria": "programacion"}
)
# Filtro más complejo con múltiples condiciones
filtro_avanzado = {
"$and": [
{"categoria": {"$in": ["programacion", "web"]}},
{"nivel": "intermedio"}
]
}
documentos_filtrados = vector_store.similarity_search(
query="desarrollo de aplicaciones",
k=3,
filter=filtro_avanzado
)
Eliminación de documentos
Para mantener las colecciones actualizadas:
ids_a_eliminar = ["ml_intro_001", "dl_intro_002"]
vector_store.delete(ids=ids_a_eliminar)
ChromaDB proporciona una solución robusta para aplicaciones RAG que requieren persistencia y escalabilidad. En la siguiente lección exploraremos PGVector, que ofrece integración con PostgreSQL para entornos empresariales.
Fuentes y referencias
Documentación oficial y recursos externos para profundizar en LangChain
Documentación oficial de LangChain
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, LangChain es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de LangChain
Explora más contenido relacionado con LangChain y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
Instalar y configurar ChromaDB con Docker, crear colecciones vectoriales, almacenar y buscar documentos usando ChromaDB, trabajar con metadatos y filtros, y entender las ventajas de ChromaDB sobre soluciones en memoria.
Cursos que incluyen esta lección
Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje