TEI Hugging FaceCompatible with Milvus 2.6.x

Hugging Face Text Embeddings Inference (TEI) est un serveur d'inférence haute performance spécialement conçu pour les modèles d'intégration de texte. Ce guide explique comment utiliser le TEI de Hugging Face avec Milvus pour une génération efficace d'intégration de texte.

TEI fonctionne avec de nombreux modèles d'intégration de texte du Hugging Face Hub, y compris :

  • série BAAI/bge-*

  • la série sentence-transformers/*

  • Modèles E5

  • Modèles GTE

  • Et bien d'autres encore

Pour obtenir la liste la plus récente des modèles pris en charge, consultez le dépôt TEI GitHub et le Hugging Face Hub.

Déploiement du TEI

Avant de configurer Milvus avec la fonction TEI, vous devez disposer d'un service TEI en cours d'exécution. Milvus prend en charge deux approches pour le déploiement de la TEI :

Déploiement standard (externe)

Vous pouvez déployer la TEI en tant que service autonome en utilisant les méthodes officielles de Hugging Face. Cette approche vous donne un maximum de flexibilité et de contrôle sur votre service TEI.

Pour des instructions détaillées sur le déploiement de la TEI en utilisant Docker ou d'autres méthodes, référez-vous à la documentation officielle de Hugging Face Text Embeddings Inference.

Après le déploiement, notez le point de terminaison de votre service TEI (par exemple, http://localhost:8080) car vous en aurez besoin lorsque vous utiliserez la fonction TEI dans Milvus.

Déploiement de Milvus Helm Chart (intégré)

Pour les environnements Kubernetes, Milvus propose une option de déploiement intégrée via sa carte Helm. Cela simplifie le processus en déployant et en configurant le TEI en même temps que Milvus.

Pour activer le TEI dans votre déploiement Milvus Helm :

  1. Configurer values.yaml pour activer le TEI :

    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. Déployer ou mettre à niveau Milvus :

    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>
    

    Lorsque vous utilisez le déploiement de la carte Helm, le service TEI sera accessible dans votre cluster Kubernetes à l'adresse http://my-release-milvus-tei:80 (à l'aide de votre nom de version). Utilisez-le comme point de terminaison dans la configuration de la fonction TEI.

Configuration dans Milvus

Après avoir déployé votre service TEI, vous devrez fournir son point de terminaison lors de la définition d'une fonction d'intégration TEI. Dans la plupart des cas, aucune configuration supplémentaire n'est nécessaire car la TEI est activée par défaut dans Milvus.

Si votre service TEI a été déployé avec une authentification par clé API (drapeau--api-key ), vous devrez configurer Milvus pour utiliser cette clé :

  1. Définir les clés API dans la section credential:

    # milvus.yaml
    credential:
      tei_key:  # You can use any label name
        apikey: <YOUR_TEI_API_KEY>
    
  2. Référencer l'identifiant dans milvus.yaml :

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

Utiliser la fonction d'intégration

Une fois le service TEI configuré, suivez les étapes suivantes pour définir et utiliser les fonctions d'intégration.

Étape 1 : Définir les champs du schéma

Pour utiliser une fonction d'intégration, créez une collection avec un schéma spécifique. Ce schéma doit comprendre au moins trois champs nécessaires :

  • Le champ primaire qui identifie de manière unique chaque entité d'une collection.

  • Un champ scalaire qui stocke les données brutes à intégrer.

  • Un champ vectoriel réservé au stockage des intégrations vectorielles que la fonction générera pour le champ scalaire.

L'exemple suivant définit un schéma avec un champ scalaire "document" pour stocker les données textuelles et un champ vectoriel "dense_vector" pour stocker les embeddings qui seront générés par le module Function. N'oubliez pas de définir la dimension du vecteur (dim) pour qu'elle corresponde à la sortie du modèle d'intégration que vous avez choisi.

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)

Étape 2 : Ajouter la fonction d'intégration au schéma

Le module Function de Milvus convertit automatiquement les données brutes stockées dans un champ scalaire en embeddings et les stocke dans le champ vectoriel explicitement défini.

L'exemple ci-dessous ajoute un module Function (tei_func) qui convertit le champ scalaire "document" en embeddings, en stockant les vecteurs résultants dans le champ vectoriel "dense_vector" défini précédemment.

Une fois que vous avez défini votre fonction d'intégration, ajoutez-la à votre schéma de collection. Cela indique à Milvus d'utiliser la fonction d'intégration spécifiée pour traiter et stocker les intégrations à partir de vos données textuelles.

# 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)

Paramètre

Obligatoire ?

Description

Exemple Valeur

provider

Oui

Le fournisseur du modèle d'intégration. La valeur est "TEI".

"TEI

endpoint

Oui

L'adresse réseau qui pointe vers le service TEI déployé. S'il est déployé via Milvus Helm Chart, il s'agit généralement de l'adresse interne du service.

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

truncate

Non

Indique s'il faut tronquer les textes d'entrée dépassant la longueur maximale du modèle. La valeur par défaut est false.

"true"

truncation_direction

Non

Effectif lorsque truncate est vrai. Indique s'il faut tronquer à gauche ou à droite. La valeur par défaut est right.

"left" (gauche)

max_client_batch_size

Non

Taille maximale du lot que le client Milvus envoie au TEI. La valeur par défaut est 32.

64

prompt_name

Non

(Avancé) Spécifie une clé dans le dictionnaire des invites de la configuration des transformateurs de phrases. Utilisé pour certains modèles nécessitant des formats d'invite spécifiques. Le support TEI peut être limité et dépend de la configuration du modèle sur le Hub.

"your_prompt_key"

ingestion_prompt

Non

(Avancé) Spécifie l'invite à utiliser pendant la phase d'insertion (ingestion) des données. Dépend du modèle TEI utilisé ; le modèle doit prendre en charge les invites.

"passage : "

search_prompt

Non

(Avancé) Indique l'invite à utiliser pendant la phase de recherche. Dépend du modèle TEI utilisé ; le modèle doit prendre en charge les invites.

"query : "

Etapes suivantes

Après avoir configuré la fonction d'intégration, consultez l'aperçu de la fonction pour obtenir des conseils supplémentaires sur la configuration de l'index, des exemples d'insertion de données et des opérations de recherche sémantique.

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?