Konfiguration von ChromaDB für RAG-Anwendungen
Starten Sie mit ChromaDB: eine leichte und schnelle Vektordatenbank, perfekt für Prototyping und produktive RAG-Systeme.
Warum ChromaDB ?
ChromaDB ist der schnellste Weg, um mit der vector search zu beginnen :
- ✅ Keine Infrastruktur erforderlich
- ✅ Läuft im Speicher oder persistent
- ✅ Integrierte embedding-Funktionen
- ✅ Perfekt für das Prototyping
- ✅ Skaliert bis in die Produktion
Installation (November 2025)
DEVELOPERbashpip install chromadb # Optional: For persistent storage pip install chromadb[server]
Schnellstart
DEVELOPERpythonimport 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"} )
Hinzufügen von Dokumenten
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"] )
Verwendung benutzerdefinierter Embeddings
DEVELOPERpythonfrom 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"] )
Abfragen
DEVELOPERpython# Simple similarity search results = collection.query( query_texts=["machine learning algorithms"], n_results=5 ) print(results['documents']) print(results['distances']) print(results['metadatas'])
Erweiterte Filterung
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" )
Aktualisierung von Dokumenten
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"])
Produktionskonfiguration (2025)
ChromaDB Server-Modus für die Produktion:
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 )
Docker-Bereitstellung
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:
Leistungsoptimierung
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))] )
Hybride Suche (ChromaDB + BM25)
DEVELOPERpythonfrom 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 Alternativen (Nov 2025)
| Fonctionnalité | ChromaDB | Pinecone | Qdrant |
|---|---|---|---|
| Configuration | Instantané | Inscription cloud | Docker |
| Coût | Gratuit | $70/mois+ | Gratuit/auto-hébergé |
| Échelle | 1M+ vectors | Milliards | Milliards |
| Meilleur pour | Prototypage | Production | Fonctionnalités avancées |
Migration zu einer Produktionsdatenbank
Wenn ChromaDB nicht mehr ausreicht :
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)
Bewährte Vorgehensweisen
- Verwenden Sie den persistenten Modus für wichtige Daten
- Batch-Operationen für bessere Performance
- Indizieren Sie die Metadatenfelder, nach denen Sie filtern
- Überwachen Sie die Größe der Collection (ChromaDB ist besser < 10M vectors)
- Regelmäßige Backups bei Nutzung des persistenten Modus
ChromaDB ist perfekt zum Einstieg. Das ist es, was wir bei Ailog für Entwicklung und kleine Deployments verwenden.
Tags
Verwandte Artikel
Beste Vektordatenbanken 2025: Pinecone vs Qdrant vs Weaviate
Umfassender Vergleich von Vektordatenbanken für RAG: Pinecone, Qdrant, Weaviate, Milvus, Chroma. Benchmarks, Preise und Empfehlungen je nach Anwendungsfall.
Qdrant: Erweiterte Funktionen der Vektorsuche
Nutzen Sie die leistungsstarken Funktionen von Qdrant: Payload-Indexierung, quantization, verteilte Bereitstellung für leistungsstarke RAG-Systeme.
Pinecone für RAG in großskaliger Produktion
Setzen Sie produktionsbereite Vektorsuche ein: Konfiguration von Pinecone, Indexierungsstrategien und Skalierung bis zu Milliarden von Vektoren.