Model Ranker ÜberblickCompatible with Milvus 2.6.x
Bei der herkömmlichen Vektorsuche werden die Ergebnisse rein nach mathematischer Ähnlichkeit eingestuft, d. h. danach, wie gut die Vektoren im hochdimensionalen Raum übereinstimmen. Dieser Ansatz ist zwar effizient, geht aber oft an der tatsächlichen semantischen Relevanz vorbei. Wenn Sie z. B. nach "Best Practices für die Datenbankoptimierung" suchen, erhalten Sie möglicherweise Dokumente mit hoher Vektorähnlichkeit, in denen diese Begriffe zwar häufig erwähnt werden, die aber keine wirklich umsetzbaren Optimierungsstrategien enthalten.
Model Ranker verändert die Milvus-Suche durch die Integration fortschrittlicher Sprachmodelle, die die semantischen Beziehungen zwischen Abfragen und Dokumenten verstehen. Anstatt sich nur auf die Vektorähnlichkeit zu verlassen, wertet es die Bedeutung des Inhalts und den Kontext aus, um intelligentere, relevante Ergebnisse zu liefern.
Einschränkungen
Model Rankers können nicht mit gruppierenden Suchen verwendet werden.
Felder, die für Model Ranker verwendet werden, müssen vom Typ Text sein (
VARCHAR).Jeder Model Ranker kann jeweils nur ein
VARCHARFeld für die Auswertung verwenden.
Wie funktioniert das?
Model Ranker integrieren die Fähigkeiten zum Verstehen von Sprachmodellen in den Milvus-Suchprozess durch einen genau definierten Arbeitsablauf:
Model Ranker Überblick
Erste Abfrage: Ihre Anwendung sendet eine Anfrage an Milvus
Vektorsuche: Milvus führt eine Standard-Vektorsuche durch, um mögliche Dokumente zu identifizieren
Abruf von Kandidaten: Das System identifiziert den ersten Satz von Kandidatendokumenten auf der Grundlage der Vektorähnlichkeit
Modell-Bewertung: Die Model Ranker Funktion verarbeitet Abfrage-Dokumenten-Paare:
Sendet die ursprüngliche Anfrage und die Kandidatendokumente an einen externen Modelldienst
Das Sprachmodell bewertet die semantische Relevanz zwischen Abfrage und jedem Dokument
Jedes Dokument erhält eine Relevanzbewertung basierend auf dem semantischen Verständnis
Intelligente Neuordnung: Die Dokumente werden auf der Grundlage der vom Modell generierten Relevanzwerte neu geordnet
Verbesserte Ergebnisse: Ihre Anwendung erhält Ergebnisse, die nach semantischer Relevanz und nicht nur nach Vektorähnlichkeit geordnet sind
Wählen Sie einen Modellanbieter für Ihre Bedürfnisse
Milvus unterstützt die folgenden Modelldienstleister für das Reranking, die jeweils unterschiedliche Merkmale aufweisen:
Anbieter |
Am besten geeignet für |
Merkmale |
Beispiel für einen Anwendungsfall |
|---|---|---|---|
vLLM |
Komplexe Anwendungen, die ein tiefes semantisches Verständnis und Anpassungen erfordern |
|
Juristische Forschungsplattform mit domänenspezifischen Modellen, die juristische Terminologie und Rechtsprechungsbeziehungen verstehen |
TEI |
Schnelle Implementierung mit effizienter Ressourcennutzung |
|
Content-Management-System, das effiziente Reranking-Funktionen mit Standardanforderungen benötigt |
Cohere |
Unternehmensanwendungen, bei denen Zuverlässigkeit und einfache Integration im Vordergrund stehen |
|
E-Commerce-Plattform, die eine hochverfügbare Suche mit konstanter API-Leistung und mehrsprachigen Produktkatalogen erfordert |
Voyage AI |
RAG-Anwendungen mit spezifischen Leistungs- und Kontextanforderungen |
|
Forschungsdatenbank mit unterschiedlichen Dokumentenlängen, die eine fein abgestimmte Leistungskontrolle und ein spezielles semantisches Verständnis erfordern |
SiliconFlow |
Anwendungen, die lange Dokumente mit Kosteneffizienz-Prioritäten verarbeiten |
|
Suchsystem für technische Dokumentationen zur Verarbeitung umfangreicher Handbücher und Dokumente, die eine intelligente Segmentierung und Überlappungssteuerung erfordern |
Detaillierte Informationen über die Implementierung der einzelnen Modelldienste finden Sie in der entsprechenden Dokumentation:
Implementierung
Bevor Sie Model Ranker implementieren, stellen Sie sicher, dass Sie über Folgendes verfügen:
Eine Milvus-Sammlung mit einem
VARCHAR-Feld, das den neu zu bewertenden Text enthältEinen laufenden externen Modelldienst, der für Ihre Milvus-Instanz zugänglich ist
Geeignete Netzwerkverbindungen zwischen Milvus und dem von Ihnen gewählten Modelldienst
Modell-Ranker lassen sich nahtlos sowohl in die Standard-Vektorsuche als auch in hybride Suchvorgänge integrieren. Die Implementierung umfasst die Erstellung eines Funktionsobjekts, das Ihre Rangordnungskonfiguration definiert, und dessen Übergabe an Suchoperationen.
Erstellen eines Modell-Rankers
Um das Modell-Ranking zu implementieren, definieren Sie zunächst ein Function-Objekt mit der entsprechenden Konfiguration. In diesem Beispiel verwenden wir TEI als Dienstanbieter:
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 model ranker function
model_ranker = Function(
name="semantic_ranker", # Function identifier
input_field_names=["document"], # VARCHAR field to use for reranking
function_type=FunctionType.RERANK, # Must be set to RERANK
params={
"reranker": "model", # Specify model reranker. Must be "model"
"provider": "tei", # Choose provider: "tei", "vllm", etc.
"queries": ["machine learning for time series"], # Query text
"endpoint": "http://model-service:8080", # Model service endpoint
# "maxBatch": 32 # Optional: batch size for processing
}
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.ranker.ModelRanker;
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.build());
ModelRanker ranker = ModelRanker.builder()
.name("semantic_ranker")
.inputFieldNames(Collections.singletonList("document"))
.provider("tei")
.queries(Collections.singletonList("machine learning for time series"))
.endpoint("http://model-service:8080")
.build();
// nodejs
// go
# restful
Parameter |
Erforderlich? |
Beschreibung |
Wert / Beispiel |
|---|---|---|---|
|
Ja |
Kennung für Ihre Funktion, die bei der Ausführung von Suchen verwendet wird. |
|
|
Ja |
Name des Textfeldes, das für das Reranking verwendet werden soll. Muss ein Feld vom Typ |
|
|
Ja |
Gibt den Typ der zu erstellenden Funktion an. Muss bei allen Modell-Rankern auf |
|
|
Ja |
Ein Wörterbuch, das die Konfiguration für die modellbasierte Ranglistenfunktion enthält. Die verfügbaren Parameter (Schlüssel) variieren je nach Dienstanbieter. |
|
|
Ja |
Muss auf |
|
|
Ja |
Der Modelldienstanbieter, der für das Reranking verwendet werden soll. |
|
|
Ja |
Liste der Abfrage-Strings, die vom Reranking-Modell zur Berechnung der Relevanzwerte verwendet werden. Die Anzahl der Abfrage-Strings muss genau mit der Anzahl der Abfragen in Ihrem Suchvorgang übereinstimmen (auch bei Verwendung von Abfrage-Vektoren anstelle von Text), andernfalls wird ein Fehler gemeldet. |
|
|
Ja |
URL des Modelldienstes. |
|
|
Nein |
Maximale Anzahl von Dokumenten, die in einem einzigen Stapel verarbeitet werden. Größere Werte erhöhen den Durchsatz, benötigen aber mehr Speicher. |
|
Auf Standard-Vektorsuche anwenden
Nachdem Sie Ihren Modell-Ranker definiert haben, können Sie ihn bei Suchvorgängen anwenden, indem Sie ihn an den Ranker-Parameter übergeben:
# Use the model ranker in standard vector search
results = client.search(
collection_name,
data=[your_query_vector], # Number of query vectors must match that specified in model_ranker.params["queries"]
anns_field="vector_field",
limit=10,
output_fields=["document"], # Include the text field in outputs
ranker=model_ranker, # Apply the model ranker here
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(COLLECTION_NAME)
.data(Collections.singletonList(new EmbeddedText("machine learning for time series")))
.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