Ü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 VARCHAR sein.

  • Der Funktionsbaustein kann ein Eingabefeld einbetten in:

    • FLOAT_VECTOR

    • INT8_VECTOR

    Konvertierungen in BINARY_VECTOR, FLOAT16_VECTOR oder BFLOAT16_VECTOR werden nicht unterstützt.

Unterstützte Anbieter von Einbettungsdiensten

Anbieter

Typische Modelle

Einbettungstyp

Authentifizierungsmethode

OpenAI

text-einbettung-3-*

FLOAT_VECTOR

API-Schlüssel

Azure OpenAI

Bereitstellungsbasiert

FLOAT_VECTOR

API-Schlüssel

DashScope

text-einbettung-v3

FLOAT_VECTOR

API-Schlüssel

Bedrock

amazon.titan-einbetten-text-v2

FLOAT_VECTOR

AK/SK-Paar

Vertex AI

text-einbetten-005

FLOAT_VECTOR

GCP-Dienstkonto JSON-Anmeldeinformationen

Voyage AI

voyage-3, voyage-lite-02

FLOAT_VECTOR / INT8_VECTOR

API-Schlüssel

Cohere

einbetten-englisch-v3.0

FLOAT_VECTOR / INT8_VECTOR

API-Schlüssel

SiliconFlow

BAAI/bge-large-zh-v1.5

FLOAT_VECTOR

API-Schlüssel

Gesicht umarmen

Jedes TEI-gediente Modell

FLOAT_VECTOR

Optionaler API-Schlüssel

Wie es funktioniert

Das folgende Diagramm zeigt, wie die Funktion in Milvus funktioniert.

  1. Eingabe von Text: Benutzer geben Rohdaten (z.B. Dokumente) in Milvus ein.

  2. Erzeugen von Einbettungen: Das Function-Modul in Milvus ruft automatisch den konfigurierten Modellanbieter auf, um Rohdaten in Vektoreinbettungen umzuwandeln.

  3. Einbettungen speichern: Die resultierenden Einbettungen werden in explizit definierten Vektorfeldern in Milvus-Sammlungen gespeichert.

  4. Abfrage von Text: Benutzer übermitteln Textabfragen an Milvus.

  5. Semantische Suche: Milvus konvertiert Abfragen intern in Vektoreinbettungen, führt Ähnlichkeitssuchen gegen gespeicherte Einbettungen durch und ruft die relevanten Ergebnisse ab.

  6. Rückgabe der Ergebnisse: Milvus gibt die am besten übereinstimmenden Ergebnisse an die Anwendung zurück.

Embedding Function Overview Ü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.

Credential Config Overflow Ü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

name

Eindeutiger Bezeichner für die Einbettungsfunktion innerhalb von Milvus.

"openai_embedding"

function_type

Typ der verwendeten Funktion. Für die Texteinbettung setzen Sie den Wert auf FunctionType.TEXTEMBEDDING.

Hinweis: Milvus akzeptiert FunctionType.BM25 (für Sparse-Embedding-Transformation) und FunctionType.RERANK (für Reranking) für diesen Parameter. Siehe Volltextsuche und Decay Ranker Übersicht für weitere Details.

FunctionType.TEXTEMBEDDING

input_field_names

Skalarfeld mit den einzubettenden Rohdaten. Derzeit akzeptiert dieser Parameter nur einen Feldnamen.

["document"]

output_field_names

Vektorfeld zum Speichern der generierten Einbettungen. Zurzeit akzeptiert dieser Parameter nur einen Feldnamen.

["dense"]

params

Wörterbuch mit Einbettungskonfigurationen. Hinweis: Die Parameter in params variieren je nach Einbettungsmodellanbieter.

{...}

provider

Der Einbettungsmodell-Anbieter.

"openai"

model_name

Gibt an, welches Einbettungsmodell verwendet werden soll.

"text-embedding-3-small"

credential

Die Bezeichnung eines Berechtigungsnachweises, der im Abschnitt der obersten Ebene credential: von milvus.yaml definiert ist.

  • Wenn angegeben, ruft Milvus das passende Schlüsselpaar oder API-Token ab und signiert die Anfrage auf der Serverseite.

  • Wenn sie weggelassen wird (None), greift Milvus auf das Credential zurück, das explizit für den Zielmodellanbieter in milvus.yaml konfiguriert wurde.

  • Wenn das Label unbekannt ist oder der referenzierte Schlüssel fehlt, schlägt der Aufruf fehl.

"apikey1"

dim

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 dim Wert, der in der add_field Methode des Schemas für das Vektorfeld angegeben ist, mit der endgültigen Ausgabedimension Ihrer Einbettungsfunktion übereinstimmt.

"1536"

user

Ein Identifikator auf Benutzerebene zur Verfolgung der API-Nutzung.

"user123"

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

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:

  1. Zuerst sucht es nach dem Standard-Credential, das für diesen Provider in der Datei milvus.yaml konfiguriert ist.
  2. Wenn keine Standard-Anmeldeinformationen in milvus.yaml vorhanden sind, wird auf Umgebungsvariablen zurückgegriffen (falls konfiguriert).
  3. Wenn weder milvus.yaml noch 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:

  1. Ihre Sammlung nach dem Einfügen abfragen, um zu sehen, ob das Vektorfeld Daten enthält
  2. Prüfen, ob die Länge des Vektorfeldes mit den erwarteten Dimensionen übereinstimmt
  3. 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