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:

  1. 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: []
    
    
  2. 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:

  1. 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>
    
  2. 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

provider

El proveedor del modelo de incrustación. Establézcalo en "TEI".

"TEI

endpoint

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"

truncate

No

Si se deben truncar los textos de entrada que excedan la longitud máxima del modelo. Por defecto es false.

"true"

truncation_direction

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

max_client_batch_size

No

El tamaño máximo de lote que el cliente Milvus envía a TEI. Por defecto es 32.

64

prompt_name

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"

ingestion_prompt

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 "

search_prompt

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.

Try Managed Milvus for Free

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

Get Started
Feedback

¿Fue útil esta página?