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 sollEinen 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 |
|---|---|---|---|
|
Ja |
Muss auf |
|
|
Ja |
Der Modelldienstanbieter, der für das Reranking verwendet werden soll. |
|
|
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"] |
|
Ja |
Ihre vLLM-Dienstadresse. |
|
|
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. |
|
|
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). |
|
Allgemeine Parameter, die für alle Model Ranker gelten (z. B. provider, queries), finden Sie unter Erstellen eines Model Rankers.
Auf die Standard-Vektorsuche anwenden
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