Kurs
Der Aufstieg von LLMs und der semantischen Suche hat die Art und Weise, wie wir Such-, Empfehlungs- und Abrufsysteme entwickeln, total verändert. Die klassische Stichwortsuche – egal ob mitSQL- -LIKE, Lucene Inverted oder Volltextindizes – reicht immer weniger aus, wenn Leute ein Verständnis natürlicher Sprache erwarten.
Hier geht's um Einbettungen und Vektordatenbanken ins Spiel.
MongoDB hat sich in diesem Bereich mit Atlas Vector Searchschnell weiterentwickelt und bietet Entwicklern jetzt eine einzige Datenbank für Dokumente, Metadaten und Vektoren – alles unter einer API. In diesem Leitfaden gehen wir auf Folgendes ein:
- Was ist MongoDB?
- Was sind Query Embeddings und warum sind sie wichtig?
- Wann du Einbettungen verwenden solltest.
- Wie man Einbettungen in MongoDB speichert.
- Wie man sie mit Python erstellt und abfragt.
Dieses Tutorial ist praxisorientiert und kann direkt in deine Retrieval-Augmented Generation (RAG), Ähnlichkeitssuche oder Empfehlungspipeline einbauen kannst.
Was ist MongoDB?
MongoDB ist eine dokumentenorientierte nosql-Datenbank, die Daten in flexiblen BSON-Dokumentenspeichert –BSON ist eine binär codierte JavaScript Object Notation (JSON) – eine textbasierte Objektnotation, die häufig für die Übertragung und Speicherung von Daten in webbasierten Anwendungen genutzt wird. Im Gegensatz zu starren relationalen Datenbanken macht MongoDB die Schemaentwicklung einfach und bietet:
- Horizontale Skalierbarkeit (Sharding).
- Umfangreiches Aggregations-Framework.
- Volltextsuche.
- Vektorsuche.
- Zeitreihen-Sammlungen.
- Flexibilität des Schemas.
MongoDB Atlas – der komplett verwaltete Cloud-Dienst – bietet zusätzlich:
- Atlas-Suche (basierend auf Lucene).
- Atlas-Vektorsuche (semantische Suche über HNSW-Indizierung).
- Automatische Skalierung, Backups, Sicherheit und Überwachung.
MongoDB ist eine super Wahl für KI-Aufgaben geworden, weil Vektoren oft zusammen mit Metadaten vorkommen und MongoDB Atlas das alles in einem System zusammenfasst.
Was sind Einbettungen und warum nutzen wir Abfrageeinbettungen?
Wenn du mit Such- oder Abrufvorgängen in KI-Anwendungen arbeitest, ist eines der ersten Konzepte, auf die du stößt, die Einbettungen.
Eine Einbettung ist im Grunde eine numerische Darstellung, eine lange Liste von Fließkommawerten, die die Bedeutung eines Textes (oder Bildes, Audios usw.) erfasst. Anstatt die genauen Wörter zu betrachten, ordnen Einbettungen den Text in einen Vektorraum ein, in dem ähnliche Ideen nahe beieinander liegen. Schau dir zum Beispiel drei verschiedene Benutzeranweisungen an:
- Problem mit der Rechnungsstellung
- Fehler bei der Zahlung
- Gehalt nicht gutgeschrieben
Auch wenn die Wörter unterschiedlich sind, beschreiben alle drei ein finanzielles Problem. Ein gutes Einbettungsmodell platziert diese Texte im Vektorraum nahe beieinander, sodass du sie anhand ihrer Bedeutung statt anhand von Schlüsselwörtern abrufen kannst.
Das ist besonders wichtig, wenn der Nutzer eine Suche macht. Der Text, den sie eingeben – „Warum kommt mein Gehalt zu spät?“ – wird auch in eine Einbettung umgewandelt. Dieser neue Vektor heißt„ “ und ist eineAbfrageeinbettung. Dann vergleichst du diesen Abfragevektor mit allen gespeicherten Einbettungen, um herauszufinden, welche Dokumente sich semantisch ähneln. Je näher die Vektoren beieinander liegen, desto relevanter ist das Ergebnis.
MongoDB Atlas macht diesen ganzen Arbeitsablauf mit Atlas Vector Searchecht einfach . Nachdem deine Dokumente und ihre Einbettungen in einer MongoDB-Sammlung gespeichert wurden, erstellt Atlas einenVektorindex namens „ “ (, der intern HNSW nutzt), der schnell ähnliche Dokumente in großem Umfang abrufen kann. Wenn du zum Beispiel Support-Artikel mit ihren Einbettungen speicherst, könnte eine Abfrage wie ...
query = "Why isn't my salary showing up this month?"
query_vec = get_embedding(query) # Explained in below examples
…kann direkt in MongoDB verwendet werden:
results = collection.aggregate([
{
"$vectorSearch": {
"path": "embedding",
"queryVector": query_vec,
"index": "vector_index",
"limit": 3
}
}
])
MongoDB zeigt dir automatisch die drei Support-Artikel an, deren Einbettungen am besten zur Suchanfrage passen – ohne dass du irgendwelche Keyword-Abgleiche oder manuelle Bewertungen machen musst.
Das ist das Besondere an Einbettungen in MongoDB Atlas: Du speicherst nicht nur Text, sondern auch Bedeutung, und du suchst nicht nur nach Wörtern, sondern nach der Absicht dahinter. Dieser Wandel ist der Grund, warum Einbettungen zu einem wichtigen Baustein für die semantische Suche, RAG-Systeme, KI-Assistenten und intelligente Wissensdatenbanken geworden sind.
Wann man Query Embeddings benutzt
Verwende Einbettungen, wenn du semantische Ähnlichkeit, wie zum Beispiel:
Retrieval-Augmented Generation (RAG)
- Gib deinem LLM genaue Infos aus deiner Wissensdatenbank
- Ersetze die veraltete Stichwortsuche
Chatbots, die ein tiefes Verständnis brauchen
- Portal-Helpdesk
- Kundenservice
Produktempfehlung
- „Ähnliche Artikel wie dieser Artikel“
Erkennung von Dokumenten oder Duplikaten
- Clustering
- Themengruppierung
Wenn die Stichwortsuche nicht klappt
- Fragen wie „Verzögerung der Gehaltsgutschrift“ vs. „Problem bei der Zahlungsabwicklung“
Mach verwende verwende keine Einbettungen, wenn:
- Du brauchst eine exakte Übereinstimmung (IDs, Rechnungsnummern).
- Dein Datensatz ist winzig (einfache Suche funktioniert).
- Du brauchst numerische Filterung/Vergleiche (das sollten die Metadaten übernehmen).
Wie man Einbettungen in MongoDB speichert
Das Coole an MongoDB ist, dass Einbettungen einfach in Dokumente reinpassen. Du speicherst sie einfach als Arrays von Fließkommazahlen.
Beispiel für ein Dokumentenschema
Hier ist eine typische Dokumentstruktur:
{
"_id": "uuid-123",
"text": "This is a sample document about MongoDB vector search.",
"embedding": [0.123, -0.241, 0.998, ...],
"tags": ["mongodb", "vector", "ai"],
"createdAt": "2025-01-01T10:20:00Z"
}
Wichtige Dinge, die du beachten solltest:
- Jede Einbettung in einer Sammlung muss die gleiche Dimension.
- Einbettungen sollten am besten als float32 gespeichert werden (MongoDB wandelt sie intern in float64 um).
- Wenn deine Dokumente lang sind, teil sie , bevor du sie einbettest.
- Metadaten separat speichern – Tags, Kategorie, URL, Zeitstempel usw. Das macht die hybride Suche echt stark.
Erstellen eines Vektorindex in MongoDB (wichtiger Schritt)
Bevor du Einbettungen speicherst oder abfragst, musst du einen Vektorsuchindex in MongoDB Atlas erstellen.
Geh in MongoDB Atlas zu: Atlas → Datenbank → Sammlungen → Suche → Suchindex erstellen
Verwende eine Definition wie:
{
"fields": [
{
"type": "vector",
"path": "embedding",
"numDimensions": 1536,
"similarity": "cosine"
}
]
}
Das sagt MongoDB:
- Das Feld enthält enthält Vektoren.
- Jeder Vektor hat 1536 Dimensionen.
- Benutze die Kosinusähnlichkeit für die Rangfolge.
Dieser Index unterstützt alle Vektorsuchanfragen.
MongoDB hat native Vektorsuchfunktionen und unterstützt:
- Kosinusähnlichkeit.
- Euklidische Distanz.
- dotProduct-Bewertung.
Entscheide dich je nach deinem Einbettungsmodell – aber woher wissen wir, was wir wählen sollen? Lass uns mal richtig eintauchen.
Kosinusähnlichkeit
Was es misst
Es zeigt an, wie gut zwei Vektorenaufeinander ausgerichtet sind – also den Winkel zwischen ihnen. Es ignoriert die Größe und konzentriert sich nur auf die Richtung.
Intuition
- Wenn zwei Vektoren in die gleiche Richtung zeigen → Ähnlichkeit nahe bei 1
- Entgegengesetzte Richtungen → –1
- Orthogonal (unabhängig) → 0
Wann man es benutzt
Benutze den Kosinus, wenn die Größe egal ist, sondern nur das Muster oder Konzept , das ausgedrückt wird.
Häufige Verwendungszwecke
- Text embeddings/NLP
- Semantische Suche
- Empfehlungssysteme, die auf Bedeutung basieren, nicht auf Größe
Cosinus ist für die meisten Einbettungsmodelle die sicherste Standardeinstellung.
Euklidische Distanz
Was es misst
Es misst die Entfernung in einer geraden Linie zwischen zwei Vektoren im Raum.
Intuition
- Kleiner Abstand → Vektoren sind ähnlich
- Großer Abstand → Vektoren liegen weit auseinander
Wann man es benutzt
Verwende euklidisch, wenn es auf absolute Werte und Größenordnungen ankommtund nicht nur die Richtung wichtig sind.
Häufige Verwendungszwecke
- Bild-Einbettungen
- Physikalische Messungen/Sensordaten
- Clustering-Algorithmen wie K-Means (das intern euklidische Algorithmen nutzt)
Wenn deine Daten von Natur aus in einer geometrischen Raum (z. B. Pixelintensitäten) gespeichert sind, ist euklidisch oft sinnvoller.
Skalarprodukt
Was es misst
Es misst eine Mischung aus Ähnlichkeit und Größe.
Mathematisch ausgedrückt: dot(u, v) = |u| × |v| × cos(θ)
Intuition
- Größere Stärke UND Ausrichtung → höhere Punktzahl
- Empfindlich gegenüber Vektorlänge
- Nicht automatisch normalisiert
Wann man es benutzt
Benutze das Skalarprodukt, wenn du möchtest, dass längere Vektoren mehr Einfluss haben oder wenn das Einbettungsmodell mit Blick auf das Skalarprodukt trainiert wurde.
Häufige Verwendungszwecke
- Große Sprachmodell-Einbettungen, die das innere Produkt als Bewertung
- Ähnlichkeitsschichten neuronaler Netze
- Empfehlungsmodelle, bei denen die „Stärke“ der Merkmale wichtig ist
Schnelle Faustregel
|
Metrisch |
Gut für |
Vermeide es, wenn |
|
Cosinus |
Text, semantische Suche, allgemeine Einbettungen |
Die Größe ist wichtig |
|
Euklidisch |
Bilder, geometrische Merkmale, Clustering |
Die Daten haben eine willkürliche Skalierung. |
|
Skalarprodukt |
Mit innerem Produkt trainierte Modelle, Recsys |
Größenordnungen verzerren die Ähnlichkeit |
Embeddings in MongoDB erstellen, speichern und abfragen (Python-Tutorial)
Lass uns das durchgehen, als würden wir ein echtes System aufbauen.
Installiere Abhängigkeiten
pip install pymongo openai
Embeddings erstellen
Mit OpenAI (du kannst jeden beliebigen Embedding-Anbieter nehmen):
import os
from openai import OpenAI
os.environ["OPENAI_API_KEY"] = "your_api_key_here"
client = OpenAI()
def get_embedding(text: str):
response = client.embeddings.create(
model="text-embedding-3-small",
input=text
)
return response.data[0].embedding
Verbinde dich mit MongoDB und füge Dokumente ein
Mit OpenAI (du kannst jeden beliebigen Embedding-Anbieter nehmen):
from pymongo import MongoClient
import uuid
mongo = MongoClient("<MONGODB_ATLAS_URI>")
db = mongo["vector_db"]
collection = db["documents"]
text = "This is a sample document about MongoDB vector search."
embedding = get_embedding(text)
document = {
"_id": str(uuid.uuid4()),
"text": text,
"embedding": embedding,
"tags": ["mongodb", "search"],
}
collection.insert_one(document)
print("Document inserted successfully!")
Jetzt sind deine Daten bereit für die semantische Suche.
Abfragen von Einbettungen in MongoDB
Jetzt kommt der spannende Teil: das Abrufen ähnlicher Dokumente mithilfe einer Vektorabfrage. MongoDB nutzt „ “ und „$vectorSearch“ in einer Aggregationspipeline.
Abfragevektor erstellen
from pymongo import MongoClient
query = "How does MongoDB handle semantic search?"
query_vec = get_embedding(query)
Vektorsuche durchführen (Abfrage-Einbettungen)
results = collection.aggregate([
{
"$vectorSearch": {
"index": "vector_index",
"path": "embedding",
"queryVector": query_vec,
"numCandidates": 100,
"limit": 5,
"similarity": "cosine"
}
},
{
"$project": {
"text": 1,
"score": {"$meta": "vectorSearchScore"}
}
}
])
for r in results:
print(r)
Das gibt die fünf Dokumente zurück, die semantisch am ähnlichsten sind.
Das ist super für RAG-Pipelines, wo du eine semantische Suche brauchst.
Schrittweise Erklärung der obigen Frage
$vectorSearch → Sucht nach Dokumenten, deren Einbettungsfeld am nächsten ist queryVector am nächsten kommt, indem die angegebene Ähnlichkeitsmetrik benutzt wird.
Anzahl der Kandidaten → Wie viele mögliche Treffer soll die Suchmaschine prüfen, bevor sie die besten Ergebnisse anzeigt?
Begrenzung → Anzahl der ähnlichen Endergebnisse, die zurückgegeben werden sollen
$project → Gibt den Originaltext plus ein spezielles Feld namens score
Was ist ein Punktfeld?
MongoDB Atlas Vector Search gibt ein spezielles Metadatenfeld zurück: „score”: {„$meta”: „vectorSearchScore”}, das dir sagt, wie ähnlich ein gespeicherter Vektor mit deinem Abfragevektor ist.
Die Bedeutung der Punktzahl hängt von der Ähnlichkeitsmetrik ab , die du wählst, wie unten erklärt:
|
Ähnlichkeitsmetrik |
Was die Punktzahl bedeutet |
Höhere Punktzahl = ähnlicher? |
Punktespektrum |
|
Kosinus |
Winkelähnlichkeit zwischen Vektoren |
Ja |
von -1 bis +1 |
|
euklidisch |
Negativer L2-Abstand |
Nein – näher an 0 = ähnlicher |
–∞ bis 0 |
|
dotProduct |
Ausrichtung der Vektorgröße |
Ja |
–∞ bis +∞ |
Bewährte Verfahren
- Teile lange Dokumente (jeweils 300–500 Token) in kleinere Teile auf: Bessere Relevanz + vermeidet das Einbetten langer Blobs
- Metadaten separat speichern: Hilft beim Filtern und Bewerten
- Batch-Einbettungsgenerierung: Verbessert den Durchsatz und senkt die Modellkosten
- Verwende float32-Einbettungen in deinem Modell: MongoDB nutzt intern float64, akzeptiert aber auch float32-Arrays.
- Nur das Vektorfeld indexieren: Zusätzliche Felder im Index erhöhen den Speicherbedarf und die Latenzzeit.
Häufige Fallstricke, die du vermeiden solltest
|
Problem |
Warum das passiert |
|
Dimensionsfehlanpassung |
Abfragevektor dim ≠ Index dim |
|
Unwichtige Ergebnisse |
Unterschiedliche Modelle für Speicherung und Abfrage |
|
Langsame Suche |
Zu viele numCandidates oder große Cluster-Anforderungen |
|
Dokument ist zu groß |
Dokumentengrenze von 16 MB |
|
Falsche Ähnlichkeitsmetrik |
Modell für Kosinus trainiert, aber mit Skalarprodukt |
Abschließende Gedanken
Einbettungen und semantische Suche sind jetzt echt wichtig für moderne KI-Produkte. Egal, ob du einen Chatbot, eine RAG-Pipeline, eine Empfehlungsmaschine oder eine intelligente Suchschicht entwickelst – du brauchst eine zuverlässige Möglichkeit, Vektoren zu speichern und effizient abzufragen.
MongoDB bietet dir eine einheitliche Plattform, auf der du:
- Dein Text lebt.
- Deine Metadaten leben.
- Deine Einbettungen leben.
- Deine Vektorsuche läuft.
- Alles passt zusammen.
So vermeidest du die Komplexität, die mit dem Jonglieren verschiedener Datenbanken einhergeht, und kannst dich ganz auf die Entwicklung von Produktfunktionen konzentrieren, statt auf die Infrastruktur.
FAQs
Brauche ich eine eigene Vektordatenbank, wenn ich MongoDB für Einbettungen nutze?
Nein. MongoDB Atlas Vector Search ist schon eingebaut, sodass du Dokumente, Metadaten und Vektoren am selben Ort speichern kannst, ohne eine separate Vektor-Datenbank wie Pinecone oder Milvus zu brauchen.
Welche Einbettungsdimension sollte ich in MongoDB verwenden?
Benutze die Dimension, die dein Einbettungsmodell bietet (z. B. 768 oder 1536). Alle Dokumente in einer Sammlung müssen die gleichen Abmessungen wie der Vektorindex haben.
Kann MongoDB eine hybride Suche (Metadaten + Vektorsuche) durchführen?
Du kannst mit $match filtern und dann $vectorSearch in derselben Aggregationspipeline anwenden – ideal für RAG- und Empfehlungssysteme.
Ist MongoDB für große Vektorsuch-Workloads geeignet?
Ja. MongoDB nutzt HNSW-basierte Indizierung in Atlas Search, die sich super für Millionen von Dokumenten eignet. Der Durchsatz hängt von der Indexgröße, der Cluster-Ebene und den Workload-Mustern ab.
Kann ich jedes beliebige Einbettungsmodell mit MongoDB verwenden?
Auf jeden Fall. MongoDB ist modellunabhängig. Du kannst OpenAI, HuggingFace, Cohere, lokale Modelle oder benutzerdefinierte Einbettungen verwenden – solange die Dimensionen mit dem Index übereinstimmen.

Softwareentwickler bei Uber

