vLLM RankerCompatible with Milvus 2.6.x

Ранжировщик vLLM использует систему выводов vLLM для повышения релевантности поиска путем семантического ранжирования. Он представляет собой продвинутый подход к упорядочиванию результатов поиска, выходящий за рамки традиционного векторного сходства.

vLLM Ranker особенно ценен для приложений, где важны точность и контекст, например:

  • Поиск технической документации, требующий глубокого понимания концепций

  • исследовательские базы данных, в которых семантические связи перевешивают совпадение ключевых слов

  • Системы поддержки клиентов, которые должны сопоставлять проблемы пользователей с соответствующими решениями

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

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

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

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

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

    # Replace YOUR_VLLM_ENDPOINT_URL with the actual URL (e.g., http://<service-ip>:<port>/v1/rerank)
    # Replace 'BAAI/bge-reranker-base' if you deployed a different model
    
    curl -X 'POST' \
      'YOUR_VLLM_ENDPOINT_URL' \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{
      "model": "BAAI/bge-reranker-base",
      "query": "What is the capital of France?",
      "documents": [
        "The capital of Brazil is Brasilia.",
        "The capital of France is Paris.",
        "Horses and cows are both animals"
      ]
    }'
    

    Успешный ответ должен вернуть документы, ранжированные по баллам релевантности, аналогично ответу API OpenAI rerank.

    Дополнительные аргументы и опции сервера см. в документации vLLM OpenAI Compatible Server.

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

Чтобы использовать vLLM 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
)

# Create a vLLM Ranker function
vllm_ranker = Function(
    name="vllm_semantic_ranker",    # Choose a descriptive name
    input_field_names=["document"],  # Field containing text to rerank
    function_type=FunctionType.RERANK,  # Must be RERANK
    params={
        "reranker": "model",        # Specifies model-based reranking
        "provider": "vllm",         # Specifies vLLM service
        "queries": ["renewable energy developments"],  # Query text
        "endpoint": "http://localhost:8080",  # vLLM service address
        "max_client_batch_size": 32,              # Optional: batch size
        "truncate_prompt_tokens": 256,  # Optional: Use last 256 tokens
    }
)
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("document"))
                       .param("reranker", "model")
                       .param("provider", "vllm")
                       .param("queries", "[\"renewable energy developments\"]")
                       .param("endpoint", "http://localhost:8080")
                       .param("max_client_batch_size", "32")
                       .param("truncate_prompt_tokens", "256")
                       .build();
// nodejs
// go
# restful

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

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

Параметр

Требуемый?

Описание

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

reranker

Да

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

"model"

provider

Да

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

"vllm"

queries

Да

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

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

endpoint

Да

Ваш адрес службы vLLM.

"http://localhost:8080"

max_client_batch_size

Нет

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

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

truncate_prompt_tokens

Нет

Если задано целое число k, то будут использоваться только последние k лексем из запроса (т.е. усечение слева). По умолчанию установлено значение None (т. е. без усечения).

256

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

Чтобы применить vLLM 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=vllm_ranker,                         # Apply vLLM 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 раз быстрее.

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

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