TEI RankerCompatible with Milvus 2.6.x

TEI Ranker использует сервис Text Embedding Inference (TEI) от Hugging Face для повышения релевантности поиска путем семантического ранжирования. Он представляет собой продвинутый подход к упорядочиванию результатов поиска, выходящий за рамки традиционного векторного сходства.

Предварительные условия

Прежде чем внедрять TEI Ranker в Milvus, убедитесь, что у вас есть:

  • Коллекция Milvus с полем VARCHAR, содержащим текст, подлежащий повторному ранжированию.

  • работающая служба TEI с возможностью ранжирования. Подробные инструкции по настройке службы TEI см. в официальной документации TEI.

Создание функции ранжирования TEI

Чтобы использовать TEI Ranker в своем приложении Milvus, создайте объект Function, который определяет, как должно работать повторное ранжирование. Эта функция будет передаваться в поисковые операции Milvus для улучшения ранжирования результатов.

from pymilvus import MilvusClient, Function, FunctionType

# Connect to your Milvus server
client = MilvusClient(
    uri="http://localhost:19530"  # Replace with your Milvus server URI
)

# Configure TEI Ranker
tei_ranker = Function(
    name="tei_semantic_ranker",            # Unique identifier for your ranker
    input_field_names=["document"],        # VARCHAR field containing text to rerank
    function_type=FunctionType.RERANK,     # Must be RERANK for reranking functions
    params={
        "reranker": "model",               # Enables model-based reranking
        "provider": "tei",                 # Specifies TEI as the service provider
        "queries": ["renewable energy developments"],  # Query text for relevance evaluation
        "endpoint": "http://localhost:8080",  # Your TEI service URL
        "max_client_batch_size": 32,                    # Optional: batch size for processing (default: 32)
        "truncate": True,                # Optional: Truncate the inputs that are longer than the maximum supported size
        "truncation_direction": "Right",    # Optional: Direction to truncate the inputs
    }
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.common.clientenum.FunctionType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;

MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
        .uri("http://localhost:19530")
        .build());

CreateCollectionReq.Function ranker = CreateCollectionReq.Function.builder()
        .functionType(FunctionType.RERANK)
        .name("vllm_semantic_ranker")
        .inputFieldNames(Collections.singletonList(NAME_FIELD))
        .param("reranker", "model")
        .param("provider", "tei")
        .param("queries", "[\"renewable energy developments\"]")
        .param("endpoint", "http://localhost:8080")
        .param("max_client_batch_size", "32")
        .param("truncate", "true")
        .param("truncation_direction", "Right")
        .build();
searchWithRanker(scientists, ranker);
// nodejs
// go
# restful

Специфические параметры ранжировщика TEI

Следующие параметры специфичны для ранжировщика TEI:

Параметр

Требуемый?

Описание

Значение / Пример

reranker

Да

Должно быть установлено значение "model", чтобы включить повторное ранжирование моделей.

"model"

provider

Да

Поставщик услуг модели, который будет использоваться для повторного ранжирования.

"tei"

queries

Да

Список строк запросов, используемых моделью ранжирования для расчета баллов релевантности. Количество строк запросов должно точно соответствовать количеству запросов в поисковой операции (даже при использовании векторов запросов вместо текста), иначе будет выдано сообщение об ошибке.

["поисковый запрос"].

endpoint

Да

URL-адрес вашего сервиса TEI.

"http://localhost:8080"

max_client_batch_size

Нет

Поскольку службы моделей могут обрабатывать не все данные сразу, здесь задается размер пакета для обращения к службе моделей при нескольких запросах.

32 (по умолчанию)

truncate

Нет

Нужно ли усекать вводимые данные, превышающие максимальную длину последовательности. Если False, то длинные входы вызывают ошибки.

True или False

truncation_direction

Нет

Направление усечения, если входные данные слишком длинные:

  • "Right" (по умолчанию): Токены удаляются из конца последовательности до тех пор, пока не будет достигнут максимальный поддерживаемый размер.

  • "Left": Токены удаляются из начала последовательности.

"Right" или "Left"

Общие параметры, общие для всех ранжировщиков моделей (например, provider, queries), см. в разделе Создание ранжировщика моделей.

Чтобы применить TEI Ranker к стандартному векторному поиску:

# Execute search with vLLM reranking
results = client.search(
    collection_name="your_collection",
    data=[your_query_vector],  # Replace with your query vector
    anns_field="dense_vector",                   # Vector field to search
    limit=5,                                     # Number of results to return
    output_fields=["document"],                  # Include text field for reranking
    ranker=tei_ranker,                         # Apply tei reranking
    consistency_level="Bounded"
)
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;

SearchReq searchReq = SearchReq.builder()
        .collectionName("your_collection")
        .data(Arrays.asList(new EmbeddedText("AI Research Progress"), new EmbeddedText("What is AI")))
        .annsField("vector_field")
        .limit(10)
        .outputFields(Collections.singletonList("document"))
        .functionScore(FunctionScore.builder()
                .addFunction(ranker)
                .build())
        .consistencyLevel(ConsistencyLevel.BOUNDED)
        .build();
SearchResp searchResp = client.search(searchReq);
// nodejs
// go
# restful

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?