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 examplesBereitgestellt von
…kann direkt in MongoDB verwendet werden:
results = collection.aggregate([{"$vectorSearch":{"path":"embedding","queryVector": query_vec,"index":"vector_index","limit":3}}])Bereitgestellt von
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"}Bereitgestellt von
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.
{"fields":[{"type":"vector","path":"embedding","numDimensions":1536,"similarity":"cosine"}]}Bereitgestellt von
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.
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.
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()defget_embedding(text:str):
response = client.embeddings.create(
model="text-embedding-3-small",input=text
)return response.data[0].embeddingBereitgestellt von
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!")Bereitgestellt von
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)Bereitgestellt von
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)Bereitgestellt von
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.
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Lerne, wie man mit JSON in Python arbeitet, einschließlich Serialisierung, Deserialisierung, Formatierung, Leistungsoptimierung, Umgang mit APIs und Verständnis der Einschränkungen und Alternativen von JSON.
Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
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:
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:
MongoDB Atlas – der komplett verwaltete Cloud-Dienst – bietet zusätzlich:
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:
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 ...
…kann direkt in MongoDB verwendet werden:
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)
Chatbots, die ein tiefes Verständnis brauchen
Produktempfehlung
Erkennung von Dokumenten oder Duplikaten
Wenn die Stichwortsuche nicht klappt
Mach verwende verwende keine Einbettungen, wenn:
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:
Wichtige Dinge, die du beachten solltest:
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:
Das sagt MongoDB:
Dieser Index unterstützt alle Vektorsuchanfragen.
MongoDB hat native Vektorsuchfunktionen und unterstützt:
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
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
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
Wann man es benutzt
Verwende euklidisch, wenn es auf absolute Werte und Größenordnungen ankommtund nicht nur die Richtung wichtig sind.
Häufige Verwendungszwecke
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
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
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
Embeddings erstellen
Mit OpenAI (du kannst jeden beliebigen Embedding-Anbieter nehmen):
Verbinde dich mit MongoDB und füge Dokumente ein
Mit OpenAI (du kannst jeden beliebigen Embedding-Anbieter nehmen):
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
Vektorsuche durchführen (Abfrage-Einbettungen)
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
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:
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.