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:
Параметр |
Требуемый? |
Описание |
Значение / Пример |
|---|---|---|---|
|
Да |
Должно быть установлено значение |
|
|
Да |
Поставщик услуг модели, который будет использоваться для повторного ранжирования. |
|
|
Да |
Список строк запросов, используемых моделью ранжирования для расчета баллов релевантности. Количество строк запросов должно точно соответствовать количеству запросов в поисковой операции (даже при использовании векторов запросов вместо текста), иначе будет выдано сообщение об ошибке. |
["поисковый запрос"]. |
|
Да |
Ваш адрес службы vLLM. |
|
|
Нет |
Поскольку службы моделирования могут обрабатывать не все данные сразу, здесь задается размер пакета для обращения к службе моделирования при нескольких запросах. |
|
|
Нет |
Если задано целое число k, то будут использоваться только последние k лексем из запроса (т.е. усечение слева). По умолчанию установлено значение None (т. е. без усечения). |
|
Общие параметры, общие для всех ранжировщиков моделей (например, 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