4. StorageDébutant

Configuration de ChromaDB pour les applications RAG

12 novembre 2025
9 min de lecture
Équipe de Recherche Ailog

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.

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)

DEVELOPERbash
pip install chromadb # Optional: For persistent storage pip install chromadb[server]

Démarrage rapide

DEVELOPERpython
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

DEVELOPERpython
# 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

DEVELOPERpython
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

DEVELOPERpython
# 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é

DEVELOPERpython
# 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

DEVELOPERpython
# 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 :

DEVELOPERbash
# Start server chroma run --host 0.0.0.0 --port 8000
DEVELOPERpython
# Connect from client import chromadb client = chromadb.HttpClient( host="localhost", port=8000 )

Déploiement Docker

DEVELOPERyaml
# 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

DEVELOPERpython
# 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)

DEVELOPERpython
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éChromaDBPineconeQdrant
ConfigurationInstantanéInscription cloudDocker
CoûtGratuit$70/mois+Gratuit/auto-hébergé
Échelle1M+ vecteursMilliardsMilliards
Meilleur pourPrototypageProductionFonctionnalités avancées

Migration vers base de données de production

Lorsque ChromaDB devient insuffisant :

DEVELOPERpython
# 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

  1. Utilisez le mode persistant pour les données importantes
  2. Opérations par batch pour les performances
  3. Indexez les champs de métadonnées sur lesquels vous filtrez
  4. Surveillez la taille de la collection (ChromaDB est meilleur < 10M vecteurs)
  5. 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.

Tags

chromadbbase-de-données-vectorielleconfigurationdémarrage-rapide

Articles connexes

Ailog Assistant

Ici pour vous aider

Salut ! Pose-moi des questions sur Ailog et comment intégrer votre RAG dans vos projets !