Einführung in die Einbettungsfunktion: Wie Milvus 2.6 die Vektorisierung und semantische Suche rationalisiert
Wenn Sie schon einmal eine Vektorsuchanwendung entwickelt haben, kennen Sie den Arbeitsablauf nur zu gut. Bevor Daten gespeichert werden können, müssen sie zunächst mithilfe eines Einbettungsmodells in Vektoren umgewandelt, bereinigt und formatiert und schließlich in Ihre Vektordatenbank aufgenommen werden. Jede Abfrage durchläuft denselben Prozess: Einbetten der Eingabe, Durchführen einer Ähnlichkeitssuche und anschließendes Zuordnen der resultierenden IDs zu den ursprünglichen Dokumenten oder Datensätzen. Das funktioniert - aber es entsteht ein verteiltes Gewirr von Vorverarbeitungsskripten, Einbettungspipelines und Glue-Code, den Sie pflegen müssen.
Milvus, eine hochleistungsfähige Open-Source-Vektordatenbank, macht jetzt einen großen Schritt in Richtung Vereinfachung all dessen. Milvus 2.6 führt die Funktion Data-in, Data-out (auch bekannt als Embedding Function) ein, eine integrierte Einbettungsfunktion, die eine direkte Verbindung zu den wichtigsten Modellanbietern wie OpenAI, AWS Bedrock, Google Vertex AI und Hugging Face herstellt. Anstatt Ihre eigene Einbettungsinfrastruktur zu verwalten, kann Milvus diese Modelle nun für Sie aufrufen. Sie können auch Rohtext - und bald auch andere Datentypen - einfügen und abfragen, während Milvus automatisch die Vektorisierung beim Schreiben und Abfragen übernimmt.
Im weiteren Verlauf dieses Beitrags werden wir einen genaueren Blick darauf werfen, wie Data-in, Data-out unter der Haube funktioniert, wie Anbieter und Einbettungsfunktionen konfiguriert werden und wie Sie sie nutzen können, um Ihre Vektorsuch-Workflows durchgängig zu rationalisieren.
Was ist Data-in, Data-out?
Data-in, Data-out in Milvus 2.6 basiert auf dem neuen Funktionsmodul - einem Framework, das Milvus in die Lage versetzt, die Datentransformation und die Erzeugung von Einbettungsfunktionen intern zu handhaben, ohne externe Vorverarbeitungsdienste. (Sie können den Designvorschlag in GitHub issue #35856 verfolgen.) Mit diesem Modul kann Milvus rohe Eingabedaten nehmen, einen Einbettungsanbieter direkt aufrufen und die resultierenden Vektoren automatisch in Ihre Sammlung schreiben.
Auf einer hohen Ebene macht das Funktionsmodul die Erzeugung von Einbettungen zu einer nativen Datenbankfunktion. Anstatt separate Einbettungspipelines, Hintergrundarbeiten oder Reranker-Dienste auszuführen, sendet Milvus nun Anfragen an Ihren konfigurierten Anbieter, ruft Einbettungen ab und speichert sie zusammen mit Ihren Daten - alles innerhalb des Ingestion-Pfads. Damit entfällt der operative Aufwand für die Verwaltung Ihrer eigenen Einbettungsinfrastruktur.
Data-in, Data-out führt drei wichtige Verbesserungen in den Milvus-Workflow ein:
Direktes Einfügen von Rohdaten - Sie können jetzt unbearbeiteten Text, Bilder oder andere Datentypen direkt in Milvus einfügen. Sie müssen sie nicht mehr vorher in Vektoren umwandeln.
Konfigurieren Sie eine Einbettungsfunktion - Sobald Sie ein Einbettungsmodell in Milvus konfigurieren, verwaltet es automatisch den gesamten Einbettungsprozess. Milvus lässt sich nahtlos in eine Reihe von Modellanbietern integrieren, darunter OpenAI, AWS Bedrock, Google Vertex AI, Cohere und Hugging Face.
Abfrage mit rohen Eingaben - Sie können jetzt eine semantische Suche mit rohem Text oder anderen inhaltsbasierten Abfragen durchführen. Milvus verwendet das gleiche konfigurierte Modell, um Einbettungen im laufenden Betrieb zu generieren, eine Ähnlichkeitssuche durchzuführen und relevante Ergebnisse zu liefern.
Kurz gesagt, Milvus bettet Ihre Daten nun automatisch ein - und ordnet sie optional neu. Die Vektorisierung wird zu einer integrierten Datenbankfunktion, so dass keine externen Einbettungsdienste oder benutzerdefinierte Vorverarbeitungslogik mehr erforderlich sind.
Wie Data-in, Data-out funktioniert
Das folgende Diagramm veranschaulicht, wie Data-in, Data-out innerhalb von Milvus funktioniert.
Der Arbeitsablauf von Data-in, Data-out kann in sechs Hauptschritte unterteilt werden:
Eingabe von Daten - Der Benutzer fügt Rohdaten - wie Text, Bilder oder andere Inhaltstypen - direkt in Milvus ein, ohne eine externe Vorverarbeitung durchzuführen.
Einbettungen generieren - Das Funktionsmodul ruft automatisch das konfigurierte Einbettungsmodell über die API eines Drittanbieters auf und konvertiert die Rohdaten in Echtzeit in Vektoreinbettungen.
Einbettungen speichern - Milvus schreibt die generierten Einbettungen in das vorgesehene Vektorfeld innerhalb Ihrer Sammlung, wo sie für Ähnlichkeitssuchoperationen zur Verfügung stehen.
Anfrage stellen - Der Benutzer stellt eine Rohtext- oder inhaltsbasierte Anfrage an Milvus, genau wie in der Eingabephase.
Semantische Suche - Milvus bettet die Abfrage unter Verwendung des gleichen konfigurierten Modells ein, führt eine Ähnlichkeitssuche über die gespeicherten Vektoren durch und ermittelt die engsten semantischen Übereinstimmungen.
Rückgabe der Ergebnisse - Milvus gibt die ähnlichsten Top-k-Ergebnisse - die auf ihre ursprünglichen Daten zurückgeführt werden - direkt an die Anwendung zurück.
So konfigurieren Sie Data-in, Data-out
Voraussetzungen
Installieren Sie die neueste Version von Milvus 2.6.
Bereiten Sie Ihren Einbettungs-API-Schlüssel von einem unterstützten Anbieter (z. B. OpenAI, AWS Bedrock oder Cohere) vor. In diesem Beispiel werden wir Cohere als Einbettungsanbieter verwenden.
Ändern Sie die milvus.yaml Konfiguration
Wenn Sie Milvus mit Docker Compose ausführen, müssen Sie die Datei milvus.yaml ändern, um das Funktionsmodul zu aktivieren. Sie können die offizielle Dokumentation für eine Anleitung heranziehen: Konfigurieren Sie Milvus mit Docker Compose (Anleitungen für andere Bereitstellungsmethoden finden Sie ebenfalls hier).
Suchen Sie in der Konfigurationsdatei die Abschnitte credential und function.
Aktualisieren Sie dann die Felder apikey1.apikey und providers.cohere.
...
credential:
aksk1:
access_key_id: # Your access_key_id
secret_access_key: # Your secret_access_key
apikey1:
apikey: "***********************" # Edit this section
gcp1:
credential_json: # base64 based gcp credential data
# Any configuration related to functions
function:
textEmbedding:
providers:
...
cohere: # Edit the section below
credential: apikey1 # The name in the crendential configuration item
enable: true # Whether to enable cohere model service
url: "https://api.cohere.com/v2/embed" # Your cohere embedding url, Default is the official embedding url
...
...
Sobald Sie diese Änderungen vorgenommen haben, starten Sie Milvus neu, um die aktualisierte Konfiguration anzuwenden.
Verwendung der Funktion Dateneingabe, Datenausgabe
1. Definieren Sie das Schema für die Sammlung
Um die Einbettungsfunktion zu aktivieren, muss Ihr Sammlungsschema mindestens drei Felder enthalten:
Primärschlüsselfeld (
id) - identifiziert jede Entität in der Sammlung eindeutig.Skalarfeld (
document) - Speichert die ursprünglichen Rohdaten.Vektorfeld (
dense) - Speichert die generierten Vektoreinbettungen.
from pymilvus import MilvusClient, DataType, Function, FunctionType
# Initialize Milvus client
client = MilvusClient(
uri="http://localhost:19530",
)
# Create a new schema for the collection
schema = client.create_schema()
# Add primary field "id"
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
# Add scalar field "document" for storing textual data
schema.add_field("document", DataType.VARCHAR, max_length=9000)
# Add vector field "dense" for storing embeddings.
# IMPORTANT: Set `dim` to match the exact output dimension of the embedding model.
# For instance, OpenAI's text-embedding-3-small model outputs 1536-dimensional vectors.
# For dense vector, data type can be FLOAT_VECTOR or INT8_VECTOR
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1536) # Set dim according to the embedding model you use.
2. Definieren Sie die Einbettungsfunktion
Als Nächstes wird die Einbettungsfunktion im Schema definiert.
name- Ein eindeutiger Bezeichner für die Funktion.function_type- Für Texteinbettungen aufFunctionType.TEXTEMBEDDINGsetzen. Milvus unterstützt auch andere Funktionstypen wieFunctionType.BM25undFunctionType.RERANK. Siehe Volltextsuche und Decay Ranker Übersicht für weitere Details.input_field_names- Definiert das Eingabefeld für Rohdaten (document).output_field_names- Definiert das Ausgabefeld, in dem die Vektoreinbettungen gespeichert werden (dense).params- Enthält Konfigurationsparameter für die Einbettungsfunktion. Die Werte fürproviderundmodel_namemüssen mit den entsprechenden Einträgen in Ihrer Konfigurationsdateimilvus.yamlübereinstimmen.
Hinweis: Jede Funktion muss eine eindeutige name und output_field_names haben, um verschiedene Transformationslogiken zu unterscheiden und Konflikte zu vermeiden.
# Define embedding function (example: OpenAI provider)
text_embedding_function = Function(
name="cohere_embedding", # Unique identifier for this embedding function
function_type=FunctionType.TEXTEMBEDDING, # Type of embedding function
input_field_names=["document"], # Scalar field to embed
output_field_names=["dense"], # Vector field to store embeddings
params={ # Provider-specific configuration (highest priority)
"provider": "cohere", # Embedding model provider
"model_name": "embed-v4.0", # Embedding model
# "credential": "apikey1", # Optional: Credential label
# Optional parameters:
# "dim": "1536", # Optionally shorten the vector dimension
# "user": "user123" # Optional: identifier for API tracking
}
)
# Add the embedding function to your schema
schema.add_function(text_embedding_function)
3. Konfigurieren Sie den Index
Sobald die Felder und Funktionen definiert sind, erstellen Sie einen Index für die Sammlung. Der Einfachheit halber wird hier als Beispiel der Typ AUTOINDEX verwendet.
# Prepare index parameters
index_params = client.prepare_index_params()
# Add AUTOINDEX to automatically select optimal indexing method
index_params.add_index(
field_name="dense",
index_type="AUTOINDEX",
metric_type="COSINE"
)
4. Erstellen Sie die Sammlung
Verwenden Sie das definierte Schema und den Index, um eine neue Sammlung zu erstellen. In diesem Beispiel erstellen wir eine Sammlung namens Demo.
# Create collection named "demo"
client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)
5. Daten einfügen
Jetzt können Sie die Rohdaten direkt in Milvus einfügen - es ist nicht nötig, Einbettungen manuell zu erzeugen.
# Insert sample documents
client.insert('demo', [
{'id': 1, 'document': 'Milvus simplifies semantic search through embeddings.'},
{'id': 2, 'document': 'Vector embeddings convert text into searchable numeric data.'},
{'id': 3, 'document': 'Semantic search helps users find relevant information quickly.'},
])
6. Vektorsuche durchführen
Nachdem Sie Daten eingefügt haben, können Sie direkt mit Rohtextabfragen suchen. Milvus wandelt Ihre Abfrage automatisch in eine Einbettung um, führt eine Ähnlichkeitssuche mit gespeicherten Vektoren durch und gibt die besten Übereinstimmungen zurück.
# Perform semantic search
results = client.search(
collection_name='demo',
data=['How does Milvus handle semantic search?'], # Use text query rather than query vector
anns_field='dense', # Use the vector field that stores embeddings
limit=1,
output_fields=['document'],
)
print(results)
# Example output:
# data: ["[{'id': 1, 'distance': 0.8821347951889038, 'entity': {'document': 'Milvus simplifies semantic search through embeddings.'}}]"]
Für weitere Details zur Vektorsuche siehe: Grundlegende Vektorsuche und Abfrage-API.
Erste Schritte mit Milvus 2.6
Mit Data-in, Data-out hebt Milvus 2.6 die Einfachheit der Vektorsuche auf die nächste Stufe. Durch die Integration von Einbettungs- und Reranking-Funktionen direkt in Milvus müssen Sie keine externe Vorverarbeitung mehr durchführen oder separate Einbettungsdienste verwalten.
Sind Sie bereit, es auszuprobieren? Installieren Sie Milvus 2.6 noch heute und überzeugen Sie sich selbst von der Leistungsfähigkeit von Data-in, Data-out.
Haben Sie Fragen oder möchten Sie eine Funktion genauer kennenlernen? Treten Sie unserem Discord-Kanal bei oder stellen Sie Fragen auf GitHub. Sie können auch eine 20-minütige Einzelsitzung buchen, um Einblicke, Anleitung und Antworten auf Ihre Fragen in den Milvus Office Hours zu erhalten.
Erfahren Sie mehr über die Funktionen von Milvus 2.6
Einführung von Milvus 2.6: Erschwingliche Vektorsuche im Milliardenmaßstab
JSON Shredding in Milvus: 88,9x schnellere JSON-Filterung mit Flexibilität
Echte Abfrage auf Entity-Ebene: Neue Array-of-Structs und MAX_SIM-Fähigkeiten in Milvus
MinHash LSH in Milvus: Die Geheimwaffe zur Bekämpfung von Duplikaten in LLM-Trainingsdaten
Vektorkomprimierung auf die Spitze getrieben: Wie Milvus mit RaBitQ 3× mehr Abfragen bedient
Wir haben Kafka/Pulsar durch einen Woodpecker für Milvus ersetzt
Vektorsuche in der realen Welt: Wie man effizient filtert, ohne den Rückruf zu töten
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



