Milvus
Zilliz
Home
  • Guía del usuario
  • Home
  • Docs
  • Guía del usuario

  • Embeddings y reordenación

  • Función de reclasificación

  • Clasificador de modelos

  • Clasificador vLLM

Clasificador vLLMCompatible with Milvus 2.6.x

El clasificador vLLM aprovecha el marco de inferencia vLLM para mejorar la relevancia de las búsquedas mediante la reordenación semántica. Representa un enfoque avanzado de la ordenación de los resultados de búsqueda que va más allá de la tradicional similitud vectorial.

vLLM Ranker es especialmente valioso para aplicaciones en las que la precisión y el contexto son fundamentales, como:

  • Búsqueda de documentación técnica que requiere una comprensión profunda de los conceptos

  • Bases de datos de investigación en las que las relaciones semánticas pesan más que la concordancia de palabras clave.

  • Sistemas de atención al cliente que deben relacionar los problemas de los usuarios con las soluciones pertinentes.

  • Búsqueda en comercio electrónico que debe comprender los atributos del producto y la intención del usuario.

Requisitos previos

Antes de implementar vLLM Ranker en Milvus, asegúrese de que dispone de:

  • Una colección Milvus con un campo VARCHAR que contenga el texto que se va a volver a clasificar

  • Un servicio vLLM en ejecución con capacidades de renumeración. Para obtener instrucciones detalladas sobre la configuración de un servicio vLLM, consulte la documentación oficial de vLLM. Para verificar la disponibilidad del servicio 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"
      ]
    }'
    

    Una respuesta correcta debería devolver los documentos clasificados por puntuaciones de relevancia, de forma similar a la respuesta de la API rerank de OpenAI.

    Consulte la documentación del servidor compatible con OpenAI de vLLM para obtener más argumentos y opciones del servidor.

Crear una función vLLM ranker

Para utilizar vLLM Ranker en su aplicación Milvus, cree un objeto Function que especifique cómo debe operar el reranking. Esta función se pasará a las operaciones de búsqueda de Milvus para mejorar la clasificación de los 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 de vLLM ranker

Los siguientes parámetros son específicos del clasificador vLLM:

Parámetro

¿Requerido?

Descripción

Valor / Ejemplo

reranker

Debe establecerse en "model" para habilitar la reordenación de modelos.

"model"

provider

El proveedor de servicios de modelos que se utilizará para la reordenación.

"vllm"

queries

Lista de cadenas de consulta utilizadas por el modelo rerank para calcular las puntuaciones de relevancia. El número de cadenas de consulta debe coincidir exactamente con el número de consultas de la operación de búsqueda (incluso cuando se utilizan vectores de consulta en lugar de texto); de lo contrario, se informará de un error.

["consulta de búsqueda"]

endpoint

Su dirección de servicio vLLM.

"http://localhost:8080"

max_client_batch_size

No

Dado que los servicios modelo pueden no procesar todos los datos a la vez, esto establece el tamaño del lote para acceder al servicio modelo en múltiples peticiones.

32 (por defecto)

truncate_prompt_tokens

No

Si se establece en un número entero k, sólo se utilizarán los últimos k tokens de la solicitud (es decir, truncamiento a la izquierda). Por defecto es Ninguno (es decir, sin truncamiento).

256

Para conocer los parámetros generales que comparten todos los clasificadores de modelos(por ejemplo, provider, queries), consulte Crear un clasificador de modelos.

Para aplicar vLLM Ranker a una búsqueda vectorial estándar:

# 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

¿Fue útil esta página?