TEI de Hugging FaceCompatible with Milvus 2.6.x
Hugging Face Text Embeddings Inference (TEI) es un servidor de inferencia de alto rendimiento diseñado específicamente para modelos de incrustación de texto. Esta guía explica cómo utilizar Hugging Face TEI con Milvus para una generación eficiente de incrustación de texto.
TEI funciona con muchos modelos de incrustación de texto del Hugging Face Hub, entre los que se incluyen:
Serie BAAI/bge-*
serie sentence-transformers/*
Modelos E5
Modelos GTE
Y muchos más
Para obtener la lista más reciente de modelos compatibles, consulte el repositorio GitHub de TEI y Hugging Face Hub.
Despliegue de TEI
Antes de configurar Milvus con la función TEI, necesita tener un servicio TEI en ejecución. Milvus soporta dos enfoques para el despliegue TEI:
Despliegue estándar (externo)
Puede desplegar TEI como un servicio independiente utilizando los métodos oficiales de Hugging Face. Este enfoque le da la máxima flexibilidad y control sobre su servicio TEI.
Para obtener instrucciones detalladas sobre el despliegue de TEI utilizando Docker u otros métodos, consulte la documentación oficial de Hugging Face Text Embeddings Inference.
Después del despliegue, tome nota de su punto final del servicio TEI (por ejemplo, http://localhost:8080) ya que lo necesitará cuando utilice la función TEI en Milvus.
Despliegue de Milvus Helm Chart (integrado)
Para entornos Kubernetes, Milvus ofrece una opción de despliegue integrado a través de su carta Helm. Esto simplifica el proceso desplegando y configurando TEI junto con Milvus.
Para habilitar TEI en su despliegue Milvus Helm:
Configure values.yaml para habilitar 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: []Despliegue o actualice 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>Cuando utilice el despliegue gráfico de Helm, el servicio TEI será accesible dentro de su clúster Kubernetes en
http://my-release-milvus-tei:80(utilizando su nombre de versión). Utilice esto como su punto final en la configuración de la función TEI.
Configuración en Milvus
Después de desplegar su servicio TEI, necesitará proporcionar su punto final cuando defina una función de incrustación TEI. En la mayoría de los casos, no se requiere ninguna configuración adicional ya que TEI está habilitado por defecto en Milvus.
Sin embargo, si su servicio TEI fue desplegado con autenticación de clave API (--api-key flag), necesitará configurar Milvus para usar esta clave:
Defina las claves API en la sección
credential:# milvus.yaml credential: tei_key: # You can use any label name apikey: <YOUR_TEI_API_KEY>Haga referencia a la credencial en milvus.yaml:
function: textEmbedding: providers: tei: credential: tei_key # ← choose any label you defined above enable: true # enabled by default. no action required.
Utilizar la función de incrustación
Una vez configurado el servicio TEI, siga estos pasos para definir y utilizar las funciones de incrustación.
Paso 1: Definir campos de esquema
Para utilizar una función de incrustación, cree una colección con un esquema específico. Este esquema debe incluir al menos tres campos necesarios:
El campo primario que identifica de forma única a cada entidad de una colección.
Un campo escalar que almacena los datos brutos que se van a incrustar.
Un campo vectorial reservado para almacenar las incrustaciones vectoriales que la función generará para el campo escalar.
El siguiente ejemplo define un esquema con un campo escalar "document" para almacenar datos textuales y un campo vectorial "dense_vector" para almacenar las incrustaciones que generará el módulo Función. Recuerde ajustar la dimensión del vector (dim) para que coincida con la salida del modelo de incrustación elegido.
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)
Paso 2: Añadir la función de incrustación al esquema
El módulo Function de Milvus convierte automáticamente los datos brutos almacenados en un campo escalar en incrustaciones y los almacena en el campo vectorial definido explícitamente.
El ejemplo siguiente añade un módulo Function (tei_func) que convierte el campo escalar "document" en incrustaciones, almacenando los vectores resultantes en el campo vectorial "dense_vector" definido anteriormente.
Una vez que haya definido su función de incrustación, añádala a su esquema de colección. Esto indica a Milvus que utilice la función de incrustación especificada para procesar y almacenar las incrustaciones de sus datos de texto.
# 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)
Parámetro |
Obligatorio |
Descripción |
Ejemplo Valor |
|---|---|---|---|
|
Sí |
El proveedor del modelo de incrustación. Establézcalo en "TEI". |
"TEI |
|
Sí |
La dirección de red que apunta a su servicio TEI desplegado. Si se despliega a través de Milvus Helm Chart, suele ser la dirección interna del servicio. |
"http://localhost:8080", "http://my-release-milvus-tei:80" |
|
No |
Si se deben truncar los textos de entrada que excedan la longitud máxima del modelo. Por defecto es false. |
"true" |
|
No |
Efectivo cuando truncar es true. Especifica si el truncado se realiza por la izquierda o por la derecha. El valor predeterminado es "right". |
"izquierda |
|
No |
El tamaño máximo de lote que el cliente Milvus envía a TEI. Por defecto es 32. |
64 |
|
No |
(Avanzado) Especifica una clave en el diccionario de avisos de configuración de los transformadores de frases. Se utiliza para determinados modelos que requieren formatos de avisos específicos. La compatibilidad con TEI puede ser limitada y depende de la configuración del modelo en el Hub. |
"su_clave_de_prompta" |
|
No |
(Avanzado) Especifica el prompt a utilizar durante la fase de inserción (ingestión) de datos. Depende del modelo TEI utilizado; el modelo debe admitir avisos. |
"paso " |
|
No |
(Avanzado) Especifica la instrucción que se utilizará durante la fase de búsqueda. Depende del modelo TEI utilizado; el modelo debe admitir avisos. |
"consulta: " |
Pasos siguientes
Después de configurar la función de incrustación, consulte la Descripción general de la función para obtener orientación adicional sobre la configuración del índice, ejemplos de inserción de datos y operaciones de búsqueda semántica.