Classificador vLLMCompatible with Milvus 2.6.x
O vLLM Ranker aproveita a estrutura de inferência do vLLM para melhorar a relevância da pesquisa por meio do reranking semântico. Ele representa uma abordagem avançada para a ordenação de resultados de pesquisa que vai além da similaridade vetorial tradicional.
O vLLM Ranker é particularmente valioso para aplicações em que a precisão e o contexto são críticos, tais como:
Pesquisa de documentação técnica que requer uma compreensão profunda dos conceitos
Bancos de dados de pesquisa em que as relações semânticas superam a correspondência de palavras-chave
Sistemas de apoio ao cliente que precisam de fazer corresponder os problemas dos utilizadores a soluções relevantes
Pesquisa de comércio eletrónico que deve compreender os atributos do produto e a intenção do utilizador
Pré-requisitos
Antes de implementar o vLLM Ranker no Milvus, certifique-se de ter:
Uma coleção do Milvus com um campo
VARCHARcontendo o texto a ser ranqueadoUm serviço vLLM em execução com recursos de classificação. Para obter instruções detalhadas sobre a configuração de um serviço vLLM, consulte a documentação oficial do vLLM. Para verificar a disponibilidade do serviço 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" ] }'Uma resposta bem-sucedida deve retornar os documentos classificados por pontuações de relevância, semelhante à resposta da API de classificação do OpenAI.
Consulte a documentação do servidor compatível com vLLM OpenAI para obter mais argumentos e opções do servidor.
Criar uma função do vLLM ranker
Para utilizar o vLLM Ranker na sua aplicação Milvus, crie um objeto Function que especifique como o reranking deve funcionar. Esta função será passada para as operações de pesquisa do Milvus para melhorar a classificação dos resultados.
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
Parâmetros específicos do classificador vLLM
Os seguintes parâmetros são específicos do classificador vLLM:
Parâmetro |
Necessário? |
Descrição |
Valor / Exemplo |
|---|---|---|---|
|
Sim |
Tem de ser definido para |
|
|
Sim |
O fornecedor de serviços de modelos a utilizar para a reclassificação. |
|
|
Sim |
Lista de cadeias de consulta utilizadas pelo modelo de reclassificação para calcular as pontuações de relevância. O número de cadeias de caracteres de consulta tem de corresponder exatamente ao número de consultas na sua operação de pesquisa (mesmo quando utiliza vectores de consulta em vez de texto), caso contrário será comunicado um erro. |
["consulta de pesquisa"] |
|
Sim |
O seu endereço de serviço vLLM. |
|
|
Não |
Como os serviços de modelo podem não processar todos os dados de uma vez, isso define o tamanho do lote para acessar o serviço de modelo em várias solicitações. |
|
|
Não |
Se definido como um número inteiro k, usará apenas os últimos k tokens do prompt (ou seja, truncamento à esquerda). A predefinição é None (ou seja, sem truncagem). |
|
Para parâmetros gerais partilhados por todos os classificadores de modelos (por exemplo, provider, queries), consulte Criar um classificador de modelos.
Aplicar à pesquisa vetorial padrão
Para aplicar o vLLM Ranker a uma pesquisa de vetor padrão:
# 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