Hugging Face TEICompatible with Milvus 2.6.x
Hugging Face Text Embeddings Inference (TEI) - это высокопроизводительный сервер выводов, специально разработанный для моделей встраивания текста. В этом руководстве объясняется, как использовать Hugging Face TEI с Milvus для эффективной генерации текстовых вкраплений.
TEI работает со многими моделями встраивания текста из Hugging Face Hub, включая:
серия BAAI/bge-*
серия sentence-transformers/*
модели E5
модели GTE
и многие другие
Актуальный список поддерживаемых моделей см. в репозитории TEI на GitHub и в Hugging Face Hub.
Развертывание TEI
Прежде чем настраивать Milvus с функцией TEI, необходимо иметь запущенную службу TEI. Milvus поддерживает два подхода к развертыванию TEI:
Стандартное развертывание (внешнее)
Вы можете развернуть TEI как отдельный сервис, используя официальные методы от Hugging Face. Этот подход обеспечивает максимальную гибкость и контроль над службой TEI.
Подробные инструкции по развертыванию TEI с помощью Docker или других методов см. в официальной документации Hugging Face Text Embeddings Inference.
После развертывания запишите конечную точку службы TEI (например, http://localhost:8080), поскольку она понадобится вам при использовании функции TEI в Milvus.
Развертывание Milvus Helm Chart (интегрированное)
Для сред Kubernetes Milvus предлагает интегрированный вариант развертывания с помощью диаграммы Helm. Это упрощает процесс развертывания и настройки TEI вместе с Milvus.
Чтобы включить TEI в развертывание Milvus Helm, выполните следующие действия:
Настройте values.yaml для включения 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: []Разверните или обновите 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>При использовании диаграммного развертывания Helm служба TEI будет доступна в вашем кластере Kubernetes по адресу
http://my-release-milvus-tei:80(используя имя вашего релиза). Используйте этот адрес в качестве конечной точки в конфигурации функции TEI.
Конфигурация в Milvus
После развертывания службы TEI вам нужно будет указать ее конечную точку при определении функции встраивания TEI. В большинстве случаев дополнительная настройка не требуется, поскольку TEI включен в Milvus по умолчанию.
Однако если ваша служба TEI была развернута с аутентификацией по ключу API (флаг--api-key ), вам потребуется настроить Milvus на использование этого ключа:
Определите API-ключи в разделе
credential:# milvus.yaml credential: tei_key: # You can use any label name apikey: <YOUR_TEI_API_KEY>Ссылаться на учетную запись в milvus.yaml:
function: textEmbedding: providers: tei: credential: tei_key # ← choose any label you defined above enable: true # enabled by default. no action required.
Использовать функцию встраивания.
После того как служба TEI настроена, выполните следующие шаги для определения и использования функций встраивания.
Шаг 1: Определите поля схемы
Чтобы использовать функцию встраивания, создайте коллекцию с определенной схемой. Эта схема должна включать как минимум три необходимых поля:
Первичное поле, которое уникально идентифицирует каждую сущность в коллекции.
Скалярное поле, в котором хранятся исходные данные для встраивания.
Векторное поле, зарезервированное для хранения векторных вкраплений, которые функция будет генерировать для скалярного поля.
Следующий пример определяет схему с одним скалярным полем "document" для хранения текстовых данных и одним векторным полем "dense_vector" для хранения вкраплений, которые будут сгенерированы модулем Function. Не забудьте задать размерность вектора (dim), чтобы она соответствовала выходным данным выбранной вами модели встраивания.
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)
Шаг 2: Добавьте функцию встраивания в схему
Модуль Function в Milvus автоматически преобразует исходные данные, хранящиеся в скалярном поле, во вкрапления и сохраняет их в явно определенном векторном поле.
В примере ниже добавлен модуль Function (tei_func), который преобразует скалярное поле "document" в эмбеддинги, сохраняя полученные векторы в векторном поле "dense_vector", определенном ранее.
Определив функцию встраивания, добавьте ее в схему коллекции. Это даст указание Milvus использовать указанную функцию встраивания для обработки и хранения вкраплений из ваших текстовых данных.
# 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)
Параметр |
Требуется? |
Описание |
Пример Значение |
|---|---|---|---|
|
Да |
Поставщик модели встраивания. Установите значение "TEI". |
"TEI" |
|
Да |
Сетевой адрес, указывающий на развернутую службу TEI. При развертывании через Milvus Helm Chart это обычно внутренний адрес службы. |
"http://localhost:8080", "http://my-release-milvus-tei:80" |
|
Нет |
Нужно ли усекать входные тексты, превышающие максимальную длину модели. По умолчанию значение false. |
"true" |
|
Нет |
Действует, когда значение truncate равно true. Указывает, как усекать - слева или справа. По умолчанию - справа. |
"left" |
|
Нет |
Максимальный размер пакета, который клиент Milvus отправляет в TEI. По умолчанию 32. |
64 |
|
Нет |
(Дополнительно) Указание ключа в словаре подсказок конфигурации sentence-transformers. Используется для некоторых моделей, требующих особых форматов подсказок. Поддержка TEI может быть ограничена и зависит от конфигурации модели на концентраторе. |
"your_prompt_key" |
|
Нет |
(Дополнительно) Указывает подсказку, которую следует использовать на этапе вставки (приема) данных. Зависит от используемой модели TEI; модель должна поддерживать подсказки. |
"passage: " |
|
Нет |
(Дополнительно) Указывает подсказку для использования на этапе поиска. Зависит от используемой модели TEI; модель должна поддерживать подсказки. |
"query: " |
Следующие шаги
После настройки функции встраивания обратитесь к обзору функции, чтобы получить дополнительные указания по настройке индекса, примеры вставки данных и операции семантического поиска.