Google Gemini

Verwenden Sie ein Google Gemini-Einbettungsmodell mit Milvus, indem Sie ein Modell auswählen und Milvus mit Ihrem Gemini-API-Schlüssel konfigurieren.

Wählen Sie ein Einbettungsmodell

Milvus unterstützt Einbettungsmodelle, die von Google Gemini bereitgestellt werden. Nachfolgend finden Sie die derzeit verfügbaren Gemini-Einbettungsmodelle zur schnellen Orientierung:

Modell Name

Abmessungen

Max. Token

Beschreibung

gemini-einbetten-001

Standard: 3.072 (empfohlen: 768, 1.536 oder 3.072)

8,192

Text-Einbettungsmodell mit flexiblen Dimensionen, trainiert mit Matryoshka Representation Learning (MRL).

gemini-einbetten-2

Standard: 3.072 (empfohlen: 768, 1.536 oder 3.072)

8,192

Das erste native multimodale Einbettungsmodell von Google, das Text, Bilder, Video, Audio und Dokumente in einem einheitlichen Einbettungsraum unterstützt.

Beide Modelle werden mit der Matryoshka Representation Learning (MRL)-Technik trainiert, die über den Parameter dim flexible Ausgabedimensionen ermöglicht. Es wird empfohlen, mit 768 Dimensionen zu beginnen und bei Bedarf auf 1.536 oder 3.072 Dimensionen zu skalieren. Weitere Einzelheiten finden Sie unter Gemini-Einbettungsmodelle.

Gemini-Einbettungsmodelle unterstützen auch einen Aufgabentyp-Parameter, der die Einbettungen für bestimmte Anwendungsfälle optimiert. Milvus stellt den Aufgabentyp automatisch auf der Grundlage der Operation ein:

  • Einfügen / Upsert: RETRIEVAL_DOCUMENT

  • Suchen: RETRIEVAL_QUERY

Sie können dies außer Kraft setzen, indem Sie explizit einen task Parameter angeben (z.B. SEMANTIC_SIMILARITY, CLASSIFICATION, CLUSTERING).

Anmeldeinformationen konfigurieren

Milvus muss Ihren Gemini-API-Schlüssel kennen, bevor es Einbettungen anfordern kann. Milvus bietet zwei Methoden zur Konfiguration von Anmeldeinformationen:

  • Konfigurationsdatei (empfohlen): Speichern Sie den API-Schlüssel in milvus.yaml, damit er bei jedem Neustart und jedem Knoten automatisch übernommen wird.

  • Umgebungsvariablen: Injizieren Sie den Schlüssel zum Zeitpunkt der Bereitstellung - ideal für Docker Compose.

Entscheiden Sie sich für eine der beiden Methoden: Die Konfigurationsdatei ist auf Bare-Metal- und VM-Systemen einfacher zu verwalten, während der Weg über die Umgebungsvariablen für Container-Workflows geeignet ist.

Wenn ein API-Schlüssel für denselben Anbieter sowohl in der Konfigurationsdatei als auch in einer Umgebungsvariablen vorhanden ist, verwendet Milvus immer den Wert in milvus.yaml und ignoriert die Umgebungsvariable.

Bewahren Sie Ihre API-Schlüssel in milvus.yaml auf; Milvus liest sie beim Start und setzt jede Umgebungsvariable für denselben Anbieter außer Kraft.

  1. Deklarieren Sie Ihre Schlüssel unter credential:

    Sie können einen oder mehrere API-Schlüssel auflisten - geben Sie jedem einen Namen, den Sie selbst erfinden und später referenzieren werden.

    # milvus.yaml
    credential:
      apikey_dev:            # dev environment
        apikey: <YOUR_DEV_KEY>
      apikey_prod:           # production environment
        apikey: <YOUR_PROD_KEY>    
    

    Wenn Sie die API-Schlüssel hier ablegen, bleiben sie über Neustarts hinweg bestehen und Sie können die Schlüssel einfach durch Ändern einer Bezeichnung wechseln.

  2. Teilen Sie Milvus mit, welchen Schlüssel es für Gemini-Aufrufe verwenden soll

    In derselben Datei verweisen Sie den Gemini-Anbieter auf das Label, das er verwenden soll.

    function:
      textEmbedding:
        providers:
          gemini:
            credential: apikey_dev      # ← choose any label you defined above
    

    Dies bindet einen bestimmten Schlüssel an jede Anfrage, die Milvus an den Gemini-Embedding-Endpunkt sendet.

Option 2: Umgebungsvariable

Verwenden Sie diese Methode, wenn Sie Milvus mit Docker Compose betreiben und es vorziehen, Geheimnisse aus Dateien und Images herauszuhalten.

Milvus greift nur dann auf die Umgebungsvariable zurück, wenn unter milvus.yaml kein Schlüssel für den Anbieter gefunden wird.

Variable

Erforderlich

Beschreibung

MILVUS_GEMINI_API_SCHLÜSSEL

Ja

Macht den Gemini-Schlüssel in jedem Milvus-Container verfügbar (wird ignoriert, wenn ein Schlüssel für Gemini in milvus.yaml existiert)

Setzen Sie in Ihrer Datei docker-compose.yaml die Umgebungsvariable MILVUS_GEMINI_API_KEY.

# docker-compose.yaml (standalone service section)
standalone:
  # ... other configurations ...
  environment:
    # ... other environment variables ...
    # Set the environment variable pointing to the Gemini API key inside the container
    MILVUS_GEMINI_API_KEY: <YOUR_GEMINI_API_KEY>

Der Block environment: injiziert den Schlüssel nur in den Milvus-Container und lässt Ihr Host-Betriebssystem unberührt. Weitere Informationen finden Sie unter Konfigurieren von Milvus mit Docker Compose.

Schritt 1: Erstellen Sie eine Sammlung mit einer Texteinbettungsfunktion

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 VARCHAR Feld, das die einzubettenden Rohdaten speichert.

  • Ein Vektorfeld, das für die Speicherung von dichten Vektoreinbettungen reserviert ist, die die Texteinbettungsfunktion für das Feld VARCHAR generieren 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, Gemini's gemini-embedding-001 model outputs 3072-dimensional vectors by default,
# but can be shortened to 768 or 1536 dimensions.
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=768)

Definieren Sie die Texteinbettungsfunktion

Die Texteinbettungsfunktion wandelt Rohdaten, die in einem Feld VARCHAR gespeichert sind, automatisch in Einbettungen um und speichert sie in dem explizit definierten Vektorfeld.

Das folgende Beispiel fügt einen Funktionsbaustein (gemini_embedding) hinzu, der das Skalarfeld "document" in Einbettungen umwandelt und die resultierenden Vektoren in dem zuvor definierten Vektorfeld "dense" speichert.

# Define embedding function (example: Gemini provider)
text_embedding_function = Function(
    name="gemini_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": "gemini",                       # Embedding model provider
        "model_name": "gemini-embedding-001",       # Embedding model
        # Optional parameters:
        # "credential": "apikey_dev",               # Optional: Credential label specified in milvus.yaml
        # "dim": "768",                             # Optional: Output vector dimension (default 3072)
        # "task": "RETRIEVAL_DOCUMENT",             # Optional: Task type for embedding optimization
    }
)

# Add the embedding function to your schema
schema.add_function(text_embedding_function)

Unterstützte Aufgabentypen für den Parameter task:

  • RETRIEVAL_DOCUMENT - Optimiert Einbettungen für die Indizierung von Dokumenten (Standard für Insert/Upsert).

  • RETRIEVAL_QUERY - Optimiert Einbettungen für den Abruf von Anfragen (Standard für Suche).

  • SEMANTIC_SIMILARITY - Optimiert Einbettungen für die Messung von Textähnlichkeit.

  • CLASSIFICATION - Optimiert Einbettungen für die Textklassifizierung.

  • CLUSTERING - Optimiert Einbettungen für Clustering.

Wenn nicht explizit eingestellt, verwendet Milvus automatisch RETRIEVAL_DOCUMENT beim Einfügen/Update und RETRIEVAL_QUERY bei der Suche.

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 auf der Grundlage 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" 
)

Erstellen Sie die Sammlung

Erstellen Sie nun die Sammlung unter Verwendung des Schemas und der definierten Indexparameter.

# Create collection named "demo"
client.create_collection(
    collection_name='demo', 
    schema=schema, 
    index_params=index_params
)

Schritt 2: Daten einfügen

Nachdem Sie Ihre Sammlung und Ihren Index eingerichtet haben, können Sie Ihre Rohdaten einfügen. Bei diesem Vorgang müssen Sie lediglich 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.'},
])

Schritt 3: Suche mit Text

Führen Sie nach dem Einfügen der Daten eine semantische Suche mit dem Rohtext der Abfrage durch. Milvus wandelt Ihre Abfrage automatisch in einen Einbettungsvektor um, ruft relevante Dokumente auf der Grundlage der Ähnlichkeit ab 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)

Weitere Informationen über Such- und Abfrageoperationen finden Sie unter Grundlegende Vektorsuche und -abfrage.