Umarmendes Gesicht TEICompatible with Milvus 2.6.x

Hugging Face Text Embeddings Inference (TEI) ist ein leistungsstarker Inferenzserver, der speziell für Texteinbettungsmodelle entwickelt wurde. Diese Anleitung erklärt, wie man Hugging Face TEI mit Milvus zur effizienten Erzeugung von Texteinbettungen verwendet.

TEI funktioniert mit vielen Texteinbettungsmodellen aus dem Hugging Face Hub, darunter:

  • BAAI/bge-*-Reihe

  • Satz-Transformatoren/*-Reihe

  • E5-Modelle

  • GTE-Modelle

  • Und viele weitere

Die aktuelle Liste der unterstützten Modelle finden Sie im TEI GitHub Repository und im Hugging Face Hub.

TEI-Einsatz

Bevor Sie Milvus mit der TEI-Funktion konfigurieren können, müssen Sie einen laufenden TEI-Dienst haben. Milvus unterstützt zwei Ansätze für den TEI-Einsatz:

Standard-Einsatz (extern)

Sie können TEI als eigenständigen Dienst mit den offiziellen Methoden von Hugging Face bereitstellen. Dieser Ansatz bietet Ihnen maximale Flexibilität und Kontrolle über Ihren TEI-Dienst.

Detaillierte Anweisungen zur Bereitstellung von TEI mit Docker oder anderen Methoden finden Sie in der offiziellen Dokumentation von Hugging Face Text Embeddings Inference.

Notieren Sie sich nach der Bereitstellung den Endpunkt Ihres TEI-Dienstes (z. B. http://localhost:8080), da Sie ihn für die Verwendung der TEI-Funktion in Milvus benötigen.

Milvus Helm Chart-Bereitstellung (integriert)

Für Kubernetes-Umgebungen bietet Milvus eine integrierte Bereitstellungsoption über sein Helm Chart. Dies vereinfacht den Prozess, indem TEI zusammen mit Milvus bereitgestellt und konfiguriert wird.

So aktivieren Sie TEI in Ihrer Milvus Helm-Bereitstellung:

  1. Konfigurieren Sie values.yaml, um TEI zu aktivieren:

    tei:
      enabled: true
      image:
        repository: ghcr.io/huggingface/text-embeddings-inference
        tag: "1.7" # Modify based on hardware
      model: "BAAI/bge-large-en-v1.5" # Modify based on requirements
      # revision: "main"
      # hfTokenSecretName: "my-huggingface-token-secret"
      # apiKey: "your_secure_api_key"
      # apiKeySecret:
      #   name: "my-tei-api-key-secret"
      #   key: "api-key"
      resources:
        requests:
          cpu: "1"
          memory: "4Gi"
          # nvidia.com/gpu: "1" # For GPU
        limits:
          cpu: "2"
          memory: "8Gi"
          # nvidia.com/gpu: "1" # For GPU
      extraArgs: []
    
    
  2. Milvus bereitstellen oder aktualisieren:

    helm install my-release milvus/milvus -f values.yaml -n <your-milvus-namespace>
    # or
    helm upgrade my-release milvus/milvus -f values.yaml --reset-then-reuse-values -n <your-milvus-namespace>
    

    Wenn Sie das Helm-Diagramm-Deployment verwenden, ist der TEI-Dienst in Ihrem Kubernetes-Cluster unter http://my-release-milvus-tei:80 (mit Ihrem Versionsnamen) erreichbar. Verwenden Sie dies als Endpunkt in der Konfiguration der TEI-Funktion.

Konfiguration in Milvus

Nachdem Sie Ihren TEI-Dienst bereitgestellt haben, müssen Sie bei der Definition einer TEI-Einbettungsfunktion den Endpunkt angeben. In den meisten Fällen ist keine zusätzliche Konfiguration erforderlich, da TEI in Milvus standardmäßig aktiviert ist.

Wenn Ihr TEI-Dienst jedoch mit API-Schlüssel-Authentifizierung (--api-key flag) bereitgestellt wurde, müssen Sie Milvus für die Verwendung dieses Schlüssels konfigurieren:

  1. Definieren Sie API-Schlüssel im Abschnitt credential:

    # milvus.yaml
    credential:
      tei_key:  # You can use any label name
        apikey: <YOUR_TEI_API_KEY>
    
  2. Verweisen Sie auf die Anmeldeinformationen in milvus.yaml:

    function:
      textEmbedding:
        providers:
          tei:
            credential: tei_key      # ← choose any label you defined above
            enable: true # enabled by default. no action required.
    

Verwenden Sie die Einbettungsfunktion

Sobald der TEI-Dienst konfiguriert ist, folgen Sie diesen Schritten, 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_vector" 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, CollectionSchema, FieldSchema

# Assume you have connected to Milvus
# client = MilvusClient(uri="http://localhost:19530")

# 1. Create Schema
schema = MilvusClient.create_schema()

# 2. Add fields
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
schema.add_field("document", DataType.VARCHAR, max_length=9000) # Store text data
# IMPORTANT: Set dim to exactly match the TEI model's output dimension
schema.add_field("dense_vector", DataType.FLOAT_VECTOR, dim=1024) # Store embedding vectors (example dimension)

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 (tei_func) hinzu, das das Skalarfeld "document" in Einbettungen umwandelt und die resultierenden Vektoren in dem zuvor definierten Vektorfeld "dense_vector" speichert.

Sobald Sie Ihre Einbettungsfunktion definiert haben, fügen Sie sie zu Ihrem Sammlungsschema hinzu. Dadurch wird Milvus angewiesen, die angegebene Einbettungsfunktion zur Verarbeitung und Speicherung von Einbettungen aus Ihren Textdaten zu verwenden.

# 3. Define TEI embedding function
text_embedding_function = Function(
    name="tei_func",                            # Unique identifier for this embedding function
    function_type=FunctionType.TEXTEMBEDDING,   # Indicates a text embedding function
    input_field_names=["document"],             # Scalar field(s) containing text data to embed
    output_field_names=["dense_vector"],        # Vector field(s) for storing embeddings
    params={                                    # TEI specific parameters (function-level)
        "provider": "TEI",                      # Must be set to "TEI"
        "endpoint": "http://your-tei-service-endpoint:80", # Required: Points to your TEI service address
        # Optional parameters:
        # "truncate": "true",                   # Optional: Whether to truncate long input (default false)
        # "truncation_direction": "right",      # Optional: Truncation direction (default right)
        # "max_client_batch_size": 64,          # Optional: Client max batch size (default 32)
        # "ingestion_prompt": "passage: ",      # Optional: (Advanced) Ingestion phase prompt
        # "search_prompt": "query: "            # Optional: (Advanced) Search phase prompt
    }
)

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

Parameter

Erforderlich?

Beschreibung

Beispielwert

provider

Ja

Der Anbieter des Einbettungsmodells. Auf "TEI" eingestellt.

"TEI"

endpoint

Ja

Die Netzwerkadresse, die auf den von Ihnen eingesetzten TEI-Dienst verweist. Wenn der Einsatz über Milvus Helm Chart erfolgt, ist dies normalerweise die interne Dienstadresse.

"http://localhost:8080", "http://my-release-milvus-tei:80"

truncate

Nein

Ob Eingabetexte, die die maximale Länge des Modells überschreiten, abgeschnitten werden sollen. Die Voreinstellung ist false.

"true"

truncation_direction

Nein

Wirksam, wenn "truncate" wahr ist. Gibt an, ob von links oder rechts abgeschnitten werden soll. Standardwert ist rechts.

"links"

max_client_batch_size

Nein

Die maximale Stapelgröße, die der Milvus-Client an TEI sendet. Die Voreinstellung ist 32.

64

prompt_name

Nein

(Erweitert) Gibt einen Schlüssel im Prompt-Wörterbuch der Satzumwandler-Konfiguration an. Wird für bestimmte Modelle verwendet, die bestimmte Prompt-Formate erfordern. Die TEI-Unterstützung kann eingeschränkt sein und hängt von der Konfiguration des Modells auf dem Hub ab.

"dein_prompt_schlüssel"

ingestion_prompt

Nein

(Erweitert) Gibt den Prompt an, der während der Dateneinfügephase (Ingestion) verwendet werden soll. Hängt von dem verwendeten TEI-Modell ab; das Modell muss Prompts unterstützen.

"passage: "

search_prompt

Nein

(Erweitert) Gibt den Prompt an, der während der Suchphase verwendet werden soll. Hängt von dem verwendeten TEI-Modell ab; das Modell muss Prompts unterstützen.

"query: "

Nächste Schritte

Nachdem Sie die Einbettungsfunktion konfiguriert haben, finden Sie in der Funktionsübersicht weitere Hinweise zur Indexkonfiguration, Beispiele für das Einfügen von Daten und semantische Suchvorgänge.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?