Configuration de ChromaDB pour les applications RAG
Démarrez avec ChromaDB : base de données vectorielle légère et rapide, parfaite pour le prototypage et les systèmes RAG en production.
- Auteur
- Équipe de Recherche Ailog
- Date de publication
- Temps de lecture
- 9 min de lecture
- Niveau
- beginner
- Étape du pipeline RAG
- Storage
Pourquoi ChromaDB ?
ChromaDB est le moyen le plus rapide de commencer avec la recherche vectorielle : • ✅ Aucune infrastructure requise • ✅ Fonctionne en mémoire ou persistant • ✅ Fonctions d'embedding intégrées • ✅ Parfait pour le prototypage • ✅ Évolue vers la production
Installation (novembre 2025)
``bash pip install chromadb
Optional: For persistent storage pip install chromadb[server] `
Démarrage rapide
`python import chromadb
Create client (in-memory) client = chromadb.Client()
Or persistent client = chromadb.PersistentClient(path="./chroma_db")
Create collection collection = client.create_collection( name="my_documents", metadata={"description": "RAG knowledge base"} ) `
Ajout de documents
`python Add documents with automatic embedding collection.add( documents=[ "This is about machine learning", "Python is a programming language", "Vector databases store embeddings" ], metadatas=[ {"source": "ml_book", "page": 1}, {"source": "python_guide", "page": 5}, {"source": "db_manual", "page": 12} ], ids=["doc1", "doc2", "doc3"] ) `
Utilisation d'embeddings personnalisés
`python from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
Generate embeddings texts = ["doc1 text", "doc2 text"] embeddings = model.encode(texts).tolist()
Add with pre-computed embeddings collection.add( embeddings=embeddings, documents=texts, ids=["id1", "id2"] ) `
Requêtes
`python Simple similarity search results = collection.query( query_texts=["machine learning algorithms"], n_results=5 )
print(results['documents']) print(results['distances']) print(results['metadatas']) `
Filtrage avancé
`python Filter by metadata results = collection.query( query_texts=["python"], n_results=10, where={"source": "python_guide"} Only from python_guide )
Filter by ID results = collection.query( query_texts=["databases"], where_document={"$contains": "vector"} Document must contain "vector" ) `
Mise à jour des documents
`python Update existing document collection.update( ids=["doc1"], documents=["Updated content about ML"], metadatas=[{"source": "ml_book", "page": 2, "updated": True}] )
Delete documents collection.delete(ids=["doc2"]) `
Configuration production (2025)
Mode serveur ChromaDB pour la production :
`bash Start server chroma run --host 0.0.0.0 --port 8000 `
`python Connect from client import chromadb
client = chromadb.HttpClient( host="localhost", port=8000 ) `
Déploiement Docker
`yaml docker-compose.yml version: '3.8' services: chromadb: image: chromadb/chroma:latest ports: • "8000:8000" volumes: • chroma_data:/chroma/chroma environment: • ALLOW_RESET=true
volumes: chroma_data: `
Optimisation des performances
`python Batch operations for speed batch_size = 100 for i in range(0, len(docs), batch_size): batch = docs[i:i+batch_size] collection.add( documents=batch, ids=[f"doc_{j}" for j in range(i, i+len(batch))] ) `
Recherche hybride (ChromaDB + BM25)
`python from rank_bm25 import BM25Okapi
BM25 for keyword search tokenized_docs = [doc.split() for doc in documents] bm25 = BM25Okapi(tokenized_docs)
Query both def hybrid_search(query, n_results=5, alpha=0.7): Vector search (ChromaDB) vector_results = collection.query( query_texts=[query], n_results=n_results*2 )
Keyword search (BM25) bm25_scores = bm25.get_scores(query.split())
Merge results ... (combine scores with alpha weighting)
return top_results `
ChromaDB vs Alternatives (nov 2025)
| Fonctionnalité | ChromaDB | Pinecone | Qdrant | |---------|----------|----------|--------| | Configuration | Instantané | Inscription cloud | Docker | | Coût | Gratuit | $70/mois+ | Gratuit/auto-hébergé | | Échelle | 1M+ vecteurs | Milliards | Milliards | | Meilleur pour | Prototypage | Production | Fonctionnalités avancées |
Migration vers base de données de production
Lorsque ChromaDB devient insuffisant :
`python Export from ChromaDB chroma_docs = collection.get()
Import to Pinecone/Qdrant for doc, emb in zip(chroma_docs['documents'], chroma_docs['embeddings']): production_db.upsert(doc, emb) ``
Bonnes pratiques Utilisez le mode persistant pour les données importantes Opérations par batch pour les performances Indexez les champs de métadonnées sur lesquels vous filtrez Surveillez la taille de la collection (ChromaDB est meilleur < 10M vecteurs) Sauvegardez régulièrement si vous utilisez le mode persistant
ChromaDB est parfait pour démarrer. C'est ce que nous utilisons chez Ailog pour le développement et les petits déploiements.