Vector Database
Eine Vector Database speichert und durchsucht hochdimensionale Vektoren (Embeddings) effizient – sie ist das Herzstück moderner Retrieval-Augmented-Generation-Systeme und semantischer Suche.
Was ist eine Vector Database?
Eine Vector Database ist ein spezialisiertes Datenbanksystem, das darauf ausgelegt ist, Embeddings (numerische Vektorrepräsentationen von Text, Bildern oder anderen Daten) zu speichern und blitzschnell nach semantischer Ähnlichkeit zu durchsuchen – anstatt nach exakten Treffern wie bei klassischen SQL-Datenbanken.
Warum brauche ich das als Entwickler?
Wenn du einem LLM eigene Dokumente, Wissensdatenbanken oder Firmeninterna zugänglich machen willst (RAG-Pattern), brauchst du eine Vector Database als Langzeitgedächtnis. Das Prinzip:
- Dokumente werden in Chunks aufgeteilt und per Embedding-Modell in Vektoren umgewandelt
- Diese Vektoren werden in der Vector DB gespeichert
- Bei einer Nutzeranfrage wird auch die Anfrage in einen Vektor umgewandelt
- Die DB findet die k nächsten Nachbarn (kNN) per Cosine Similarity oder Dot Product
- Die gefundenen Chunks werden dem LLM als Kontext übergeben
Gängige Vector Databases
| Tool | Besonderheit |
|---|---|
| Chroma | Lokal, einfach, ideal für Prototypen |
| Pinecone | Managed Cloud-Service, produktionsreif |
| Weaviate | Open Source, hybrid search |
| pgvector | Postgres-Extension, kein extra Stack |
| Qdrant | Rust-basiert, sehr performant |
Code-Beispiel mit Chroma
import chromadb
from chromadb.utils import embedding_functions
client = chromadb.Client()
# OpenAI Embeddings verwenden
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
api_key="sk-...",
model_name="text-embedding-3-small"
)
collection = client.create_collection(
name="meine_docs",
embedding_function=openai_ef
)
# Dokumente speichern
collection.add(
documents=[
"Die Rückgabefrist beträgt 30 Tage.",
"Versand erfolgt innerhalb von 2 Werktagen.",
"Zahlungsmethoden: Kreditkarte, PayPal, Überweisung."
],
ids=["doc1", "doc2", "doc3"]
)
# Semantische Suche
results = collection.query(
query_texts=["Wie lange kann ich etwas zurückschicken?"],
n_results=2
)
print(results["documents"])
# → [['Die Rückgabefrist beträgt 30 Tage.', ...]]
Wichtige Konzepte
- Approximate Nearest Neighbor (ANN): Die meisten Vector DBs finden nicht den exakt nächsten Vektor, sondern einen sehr guten Annäherungswert – deutlich schneller bei Millionen von Einträgen
- Index-Typen: HNSW (Hierarchical Navigable Small World) ist der de-facto Standard für Geschwindigkeit vs. Genauigkeit
- Metadata-Filtering: Vektoren können mit Metadaten (z. B.
{"quelle": "handbuch", "datum": "2024"}) kombiniert werden, um die Suche einzuschränken - Dimensionalität: Je nach Embedding-Modell haben Vektoren 384 bis 3072 Dimensionen
Typische Fallstricke
- Chunk-Größe matters: Zu kleine Chunks verlieren Kontext, zu große rauschen zu viel – 256–512 Tokens sind ein guter Startpunkt
- Embedding-Konsistenz: Abfrage und Dokumente müssen dasselbe Embedding-Modell verwenden
- Stale Data: Vektoren müssen neu berechnet werden, wenn sich die Quelldokumente ändern
Inhouse statt Nachschlagewerk
Für den Transfer ins Unternehmen sind die Inhouse-Schulungen der passende nächste Schritt.