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 :
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: []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é :
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>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 |
|---|---|---|---|
|
Oui |
Le fournisseur du modèle d'intégration. La valeur est "TEI". |
"TEI |
|
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" |
|
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" |
|
Non |
Effectif lorsque truncate est vrai. Indique s'il faut tronquer à gauche ou à droite. La valeur par défaut est right. |
"left" (gauche) |
|
Non |
Taille maximale du lot que le client Milvus envoie au TEI. La valeur par défaut est 32. |
64 |
|
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" |
|
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 : " |
|
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.