vLLM-RangiererCompatible with Milvus 2.6.x

Der vLLM Ranker nutzt den vLLM-Inferenzrahmen zur Verbesserung der Suchrelevanz durch semantisches Reranking. Er stellt einen fortschrittlichen Ansatz für die Ordnung von Suchergebnissen dar, der über die traditionelle Vektorähnlichkeit hinausgeht.

Der vLLM Ranker ist besonders wertvoll für Anwendungen, bei denen Präzision und Kontext entscheidend sind, z. B:

  • Suche in technischer Dokumentation, die ein tiefes Verständnis der Konzepte erfordert

  • Forschungsdatenbanken, bei denen semantische Beziehungen wichtiger sind als der Abgleich von Schlüsselwörtern

  • Kundensupportsysteme, die Benutzerprobleme mit relevanten Lösungen abgleichen müssen

  • E-Commerce-Suche, die Produktattribute und die Absicht des Benutzers verstehen muss

Voraussetzungen

Bevor Sie vLLM Ranker in Milvus implementieren, müssen Sie sicherstellen, dass Sie über Folgendes verfügen

  • Eine Milvus-Sammlung mit einem VARCHAR -Feld, das den Text enthält, der neu bewertet werden soll

  • Einen laufenden vLLM-Dienst mit Ranglistenfunktionen. Detaillierte Anweisungen zum Einrichten eines vLLM-Dienstes finden Sie in der offiziellen vLLM-Dokumentation. Um die Verfügbarkeit des vLLM-Dienstes zu überprüfen:

    # 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"
      ]
    }'
    

    Bei einer erfolgreichen Antwort sollten die Dokumente nach Relevanzwerten geordnet zurückgegeben werden, ähnlich wie bei der OpenAI rerank API-Antwort.

    Weitere Server-Argumente und -Optionen finden Sie in der vLLM-Dokumentation für OpenAI-kompatible Server.

Erstellen einer vLLM Ranker-Funktion

Um den vLLM Ranker in Ihrer Milvus-Anwendung zu verwenden, erstellen Sie ein Function-Objekt, das angibt, wie das Reranking funktionieren soll. Diese Funktion wird an Milvus-Suchoperationen übergeben, um das Ranking der Ergebnisse zu verbessern.

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-Ranking-spezifische Parameter

Die folgenden Parameter sind spezifisch für den vLLM Ranker:

Parameter

Erforderlich?

Beschreibung

Wert / Beispiel

reranker

Ja

Muss auf "model" gesetzt werden, um das Modell-Reranking zu aktivieren.

"model"

provider

Ja

Der Modelldienstanbieter, der für das Reranking verwendet werden soll.

"vllm"

queries

Ja

Liste der Abfrage-Strings, die vom Rerank-Modell zur Berechnung der Relevanzwerte verwendet werden. Die Anzahl der Abfragezeichenfolgen muss genau mit der Anzahl der Abfragen in Ihrem Suchvorgang übereinstimmen (auch bei Verwendung von Abfragevektoren anstelle von Text), andernfalls wird ein Fehler gemeldet.

["Suchanfrage"]

endpoint

Ja

Ihre vLLM-Dienstadresse.

"http://localhost:8080"

max_client_batch_size

Nein

Da Modelldienste möglicherweise nicht alle Daten auf einmal verarbeiten, wird hier die Stapelgröße für den Zugriff auf den Modelldienst in mehreren Anfragen festgelegt.

32 (Voreinstellung)

truncate_prompt_tokens

Nein

Wenn diese Option auf eine ganze Zahl k gesetzt ist, werden nur die letzten k Zeichen der Eingabeaufforderung verwendet (d. h. linke Trunkierung). Der Standardwert ist None (d. h. keine Abschneidung).

256

Allgemeine Parameter, die für alle Model Ranker gelten (z. B. provider, queries), finden Sie unter Erstellen eines Model Rankers.

So wenden Sie vLLM Ranker auf eine Standard-Vektorsuche an:

# 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

War diese Seite hilfreich?