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 VARCHAR contendo o texto a ser ranqueado

  • Um 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

reranker

Sim

Tem de ser definido para "model" para permitir a reclassificação do modelo.

"model"

provider

Sim

O fornecedor de serviços de modelos a utilizar para a reclassificação.

"vllm"

queries

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"]

endpoint

Sim

O seu endereço de serviço vLLM.

"http://localhost:8080"

max_client_batch_size

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.

32 (predefinição)

truncate_prompt_tokens

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).

256

Para parâmetros gerais partilhados por todos os classificadores de modelos (por exemplo, provider, queries), consulte Criar um classificador de modelos.

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

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Esta página foi útil?