Überblick über die EinbettungsfunktionCompatible with Milvus 2.6.x
Mit dem Function-Modul in Milvus können Sie Rohtextdaten in Vektoreinbettungen umwandeln, indem Sie automatisch externe Einbettungsdienstleister (wie OpenAI, AWS Bedrock, Google Vertex AI usw.) aufrufen. Mit dem Funktionsmodul müssen Sie sich nicht mehr manuell mit Einbettungs-APIs auseinandersetzen - Milvus übernimmt den gesamten Prozess des Sendens von Anfragen an Anbieter, des Empfangs von Einbettungen und deren Speicherung in Ihren Sammlungen. Für die semantische Suche müssen Sie nur die Rohdaten der Abfrage bereitstellen, nicht aber einen Abfragevektor. Milvus generiert den Abfragevektor mit demselben Modell, das Sie für die Aufnahme verwendet haben, vergleicht ihn mit den gespeicherten Vektoren und gibt die relevantesten Ergebnisse zurück.
Begrenzungen
Jedes Eingabefeld, das das Funktionsmodul einbettet, muss immer einen Wert enthalten; wird eine Null angegeben, gibt das Modul einen Fehler aus.
Der Funktionsbaustein verarbeitet nur Felder, die explizit im Auflistungsschema definiert sind; er erzeugt keine Einbettungen für dynamische Felder.
Die einzubettenden Eingabefelder müssen vom Typ
VARCHARsein.Der Funktionsbaustein kann ein Eingabefeld einbetten in:
FLOAT_VECTORINT8_VECTOR
Konvertierungen in
BINARY_VECTOR,FLOAT16_VECTORoderBFLOAT16_VECTORwerden nicht unterstützt.
Unterstützte Anbieter von Einbettungsdiensten
Anbieter |
Typische Modelle |
Einbettungstyp |
Authentifizierungsmethode |
|---|---|---|---|
text-einbettung-3-* |
|
API-Schlüssel |
|
Bereitstellungsbasiert |
|
API-Schlüssel |
|
text-einbettung-v3 |
|
API-Schlüssel |
|
amazon.titan-einbetten-text-v2 |
|
AK/SK-Paar |
|
text-einbetten-005 |
|
GCP-Dienstkonto JSON-Anmeldeinformationen |
|
voyage-3, voyage-lite-02 |
|
API-Schlüssel |
|
einbetten-englisch-v3.0 |
|
API-Schlüssel |
|
BAAI/bge-large-zh-v1.5 |
|
API-Schlüssel |
|
Jedes TEI-gediente Modell |
|
Optionaler API-Schlüssel |
Wie es funktioniert
Das folgende Diagramm zeigt, wie die Funktion in Milvus funktioniert.
Eingabe von Text: Benutzer geben Rohdaten (z.B. Dokumente) in Milvus ein.
Erzeugen von Einbettungen: Das Function-Modul in Milvus ruft automatisch den konfigurierten Modellanbieter auf, um Rohdaten in Vektoreinbettungen umzuwandeln.
Einbettungen speichern: Die resultierenden Einbettungen werden in explizit definierten Vektorfeldern in Milvus-Sammlungen gespeichert.
Abfrage von Text: Benutzer übermitteln Textabfragen an Milvus.
Semantische Suche: Milvus konvertiert Abfragen intern in Vektoreinbettungen, führt Ähnlichkeitssuchen gegen gespeicherte Einbettungen durch und ruft die relevanten Ergebnisse ab.
Rückgabe der Ergebnisse: Milvus gibt die am besten übereinstimmenden Ergebnisse an die Anwendung zurück.
Überblick über die Einbettungsfunktion
Anmeldeinformationen konfigurieren
Bevor Sie eine Einbettungsfunktion mit Milvus verwenden, konfigurieren Sie die Anmeldeinformationen des Einbettungsdienstes für den Zugriff auf Milvus.
Mit Milvus können Sie die Anmeldeinformationen für den Einbettungsdienst auf zwei Arten bereitstellen:
Konfigurationsdatei (
milvus.yaml):Das Beispiel in diesem Thema demonstriert die empfohlene Einrichtung mit
milvus.yaml.Umgebungsvariablen:
Einzelheiten zur Konfiguration von Anmeldeinformationen über Umgebungsvariablen finden Sie in der Dokumentation des Anbieters des Einbettungsdienstes (z. B. OpenAI oder Azure OpenAI).
Das folgende Diagramm zeigt den Prozess der Konfiguration von Anmeldeinformationen über die Milvus-Konfigurationsdatei (milvus.yaml) und den anschließenden Aufruf der Funktion innerhalb von Milvus.
Überlauf der Berechtigungsnachweiskonfiguration
Schritt 1: Hinzufügen von Anmeldeinformationen zur Milvus-Konfigurationsdatei
Bearbeiten Sie in Ihrer Datei milvus.yaml den Block credential mit Einträgen für jeden Provider, auf den Sie zugreifen möchten:
# milvus.yaml credential store section
# This section defines all your authentication credentials for external embedding providers
# Each credential gets a unique name (e.g., aksk1, apikey1) that you'll reference elsewhere
credential:
# For AWS Bedrock or services using access/secret key pairs
# 'aksk1' is just an example name - you can choose any meaningful identifier
aksk1:
access_key_id: <YOUR_AK>
secret_access_key: <YOUR_SK>
# For OpenAI, Voyage AI, or other API key-based services
# 'apikey1' is a custom name you choose to identify this credential
apikey1:
apikey: <YOUR_API_KEY>
# For Google Vertex AI using service account credentials
# 'gcp1' is an example name for your Google Cloud credentials
gcp1:
credential_json: <BASE64_OF_JSON>
Schritt 2: Konfigurieren Sie die Anbietereinstellungen
Bearbeiten Sie in derselben Konfigurationsdatei (milvus.yaml) den Block function, um Milvus mitzuteilen, welchen Schlüssel es für die Einbettung von Dienstaufrufen verwenden soll:
function:
textEmbedding:
providers:
openai: # calls OpenAI
credential: apikey1 # Reference to the credential label
# url: # (optional) custom url
bedrock: # calls AWS Bedrock
credential: aksk1 # Reference to the credential label
region: us-east-2
vertexai: # calls Google Vertex AI
credential: gcp1 # Reference to the credential label
# url: # (optional) custom url
tei: # Built-in Tiny Embedding model
enable: true # Whether to enable TEI model service
Weitere Informationen über die Anwendung der Milvus-Konfiguration finden Sie unter Konfigurieren von Milvus im laufenden Betrieb.
Einbettungsfunktion verwenden
Sobald die Berechtigungsnachweise in Ihrer Milvus-Konfigurationsdatei konfiguriert sind, führen Sie die folgenden Schritte aus, um Einbettungsfunktionen zu definieren und zu verwenden.
Schritt 1: Definieren Sie Schemafelder
Um eine Einbettungsfunktion zu verwenden, erstellen Sie eine Sammlung mit einem bestimmten Schema. Dieses Schema muss mindestens drei notwendige Felder enthalten:
Das Primärfeld, das jede Entität in einer Sammlung eindeutig identifiziert.
Ein Skalarfeld, das die einzubettenden Rohdaten speichert.
Ein Vektorfeld, das für die Speicherung von Vektoreinbettungen reserviert ist, die die Funktion für das Skalarfeld erzeugen wird.
Das folgende Beispiel definiert ein Schema mit einem Skalarfeld "document" zum Speichern von Textdaten und einem Vektorfeld "dense" zum Speichern von Einbettungen, die vom Funktionsmodul erzeugt werden. Denken Sie daran, die Vektordimension (dim) so einzustellen, dass sie der Ausgabe des von Ihnen gewählten Einbettungsmodells entspricht.
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)
// java
// nodejs
// go
# restful
Schritt 2: Einbettungsfunktion zum Schema hinzufügen
Das Function-Modul in Milvus wandelt Rohdaten, die in einem Skalarfeld gespeichert sind, automatisch in Einbettungen um und speichert sie in dem explizit definierten Vektorfeld.
Das folgende Beispiel fügt ein Funktionsmodul (openai_embedding) hinzu, das das Skalarfeld "document" in Einbettungen umwandelt und die resultierenden Vektoren in dem zuvor definierten Vektorfeld "dense" speichert.
# Define embedding function (example: OpenAI provider)
text_embedding_function = Function(
name="openai_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": "openai", # Embedding model provider
"model_name": "text-embedding-3-small", # 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)
// java
// nodejs
// go
# restful
Parameter |
Beschreibung |
Beispiel Wert |
|---|---|---|
|
Eindeutiger Bezeichner für die Einbettungsfunktion innerhalb von Milvus. |
|
|
Typ der verwendeten Funktion. Für die Texteinbettung setzen Sie den Wert auf Hinweis: Milvus akzeptiert |
|
|
Skalarfeld mit den einzubettenden Rohdaten. Derzeit akzeptiert dieser Parameter nur einen Feldnamen. |
|
|
Vektorfeld zum Speichern der generierten Einbettungen. Zurzeit akzeptiert dieser Parameter nur einen Feldnamen. |
|
|
Wörterbuch mit Einbettungskonfigurationen. Hinweis: Die Parameter in |
|
|
Der Einbettungsmodell-Anbieter. |
|
|
Gibt an, welches Einbettungsmodell verwendet werden soll. |
|
|
Die Bezeichnung eines Berechtigungsnachweises, der im Abschnitt der obersten Ebene
|
|
|
Die Anzahl der Dimensionen für die Ausgabe-Embeddings. Bei den OpenAI-Modellen der dritten Generation können Sie den vollständigen Vektor kürzen, um Kosten und Latenzzeit zu reduzieren, ohne dass ein signifikanter Verlust an semantischen Informationen entsteht. Weitere Informationen finden Sie im OpenAI-Ankündigungs-Blogpost. Hinweis: Wenn Sie die Vektordimension verkürzen, stellen Sie sicher, dass der |
|
|
Ein Identifikator auf Benutzerebene zur Verfolgung der API-Nutzung. |
|
Bei Sammlungen mit mehreren Skalarfeldern, die eine Text-zu-Vektor-Konvertierung erfordern, fügen Sie dem Sammlungsschema separate Funktionen hinzu und stellen Sie sicher, dass jede Funktion einen eindeutigen Namen und output_field_names Wert hat.
Schritt 3: Konfigurieren Sie den Index
Nachdem Sie das Schema mit den erforderlichen Feldern und der integrierten Funktion definiert haben, richten Sie den Index für Ihre Sammlung ein. Um diesen Prozess zu vereinfachen, verwenden Sie AUTOINDEX als index_type, eine Option, die es Milvus ermöglicht, den am besten geeigneten Indextyp basierend auf der Struktur Ihrer Daten auszuwählen und zu konfigurieren.
# 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"
)
// java
// nodejs
// go
# restful
Schritt 4: Sammlung erstellen
Erstellen Sie nun die Sammlung unter Verwendung der definierten Schema- und Indexparameter.
# Create collection named "demo"
client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)
// java
// nodejs
// go
# restful
Schritt 5: Daten einfügen
Nachdem Sie Ihre Sammlung und Ihren Index eingerichtet haben, können Sie nun Ihre Rohdaten einfügen. Bei diesem Vorgang müssen Sie nur den Rohtext bereitstellen. Das Funktionsmodul, das wir zuvor definiert haben, erzeugt automatisch den entsprechenden Sparse-Vektor für jeden Texteintrag.
# 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.'},
])
// java
// nodejs
// go
# restful
Schritt 6: Vektorsuche durchführen
Nach dem Einfügen der Daten führen Sie eine semantische Suche mit dem Rohtext der Abfrage durch. Milvus wandelt Ihre Abfrage automatisch in einen Einbettungsvektor um, findet relevante Dokumente auf der Grundlage der Ähnlichkeit und gibt die am besten übereinstimmenden Ergebnisse 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.'}}]"]
// java
// nodejs
// go
# restful
Weitere Informationen zu Such- und Abfrageoperationen finden Sie unter Grundlegende Vektorsuche und -abfrage.
FAQ
Was ist der Unterschied zwischen der Konfiguration von Anmeldeinformationen in milvus.yaml und Umgebungsvariablen?
Beide Methoden funktionieren, aber die Verwendung von milvus.yaml ist die empfohlene Vorgehensweise, da sie eine zentrale Verwaltung der Anmeldeinformationen und eine einheitliche Benennung der Anmeldeinformationen über alle Anbieter hinweg ermöglicht. Bei der Verwendung von Umgebungsvariablen variieren die Variablennamen je nach Anbieter des Einbettungsdienstes, daher sollten Sie sich auf der entsprechenden Seite des jeweiligen Anbieters über die spezifischen Namen der Umgebungsvariablen informieren (z. B. OpenAI oder Azure OpenAI).
Was passiert, wenn ich in der Funktionsdefinition keinen Credential-Parameter angebe?
Milvus folgt dieser Reihenfolge bei der Auflösung von Anmeldeinformationen:
- Zuerst sucht es nach dem Standard-Credential, das für diesen Provider in der Datei
milvus.yamlkonfiguriert ist. - Wenn keine Standard-Anmeldeinformationen in milvus.yaml vorhanden sind, wird auf Umgebungsvariablen zurückgegriffen (falls konfiguriert).
- Wenn weder
milvus.yamlnoch Umgebungsvariablen konfiguriert sind, wird Milvus einen Fehler ausgeben.
Wie kann ich überprüfen, ob die Einbettungen korrekt generiert werden?
Sie können dies überprüfen, indem Sie:
- Ihre Sammlung nach dem Einfügen abfragen, um zu sehen, ob das Vektorfeld Daten enthält
- Prüfen, ob die Länge des Vektorfeldes mit den erwarteten Dimensionen übereinstimmt
- eine einfache Ähnlichkeitssuche durchführen, um zu überprüfen, ob die Einbettungen sinnvolle Ergebnisse liefern
Kann ich bei einer Ähnlichkeitssuche einen Abfragevektor anstelle von Rohtext verwenden?
Ja, Sie können vorberechnete Abfragevektoren anstelle von Rohtext für die Ähnlichkeitssuche verwenden. Während das Funktionsmodul automatisch Rohtextabfragen in Einbettungen umwandelt, können Sie auch direkt Vektordaten für den Parameter data in Ihrem Suchvorgang bereitstellen. Hinweis: Die Dimensionsgröße des von Ihnen bereitgestellten Abfragevektors muss mit der Dimensionsgröße der von Ihrem Funktionsmodul generierten Vektoreinbettungen übereinstimmen.
Beispiel:
# Using raw text (Function module converts automatically)
results = client.search(
collection_name='demo',
data=['How does Milvus handle semantic search?'],
anns_field='dense',
limit=1
)
# Using pre-computed query vector (must match stored vector dimensions)
query_vector = [0.1, 0.2, 0.3, ...] # Must be same dimension as stored embeddings
results = client.search(
collection_name='demo',
data=[query_vector],
anns_field='dense',
limit=1
)
// java
// nodejs
// go
# restful