TEI-RangiererCompatible with Milvus 2.6.x

Der TEI Ranker nutzt den Text Embedding Inference (TEI) Service von Hugging Face, um die Suchrelevanz durch semantisches Reranking zu verbessern. Er stellt einen fortschrittlichen Ansatz für die Ordnung von Suchergebnissen dar, der über die traditionelle Vektorähnlichkeit hinausgeht.

Voraussetzungen

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

  • Eine Milvus-Sammlung mit einem VARCHAR -Feld, das den neu zu bewertenden Text enthält

  • Ein laufender TEI-Dienst mit Ranglistenfunktionen. Detaillierte Anweisungen zum Einrichten eines TEI-Dienstes finden Sie in der offiziellen TEI-Dokumentation.

Erstellen einer TEI-Ranker-Funktion

Um TEI 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
)

# Configure TEI Ranker
tei_ranker = Function(
    name="tei_semantic_ranker",            # Unique identifier for your ranker
    input_field_names=["document"],        # VARCHAR field containing text to rerank
    function_type=FunctionType.RERANK,     # Must be RERANK for reranking functions
    params={
        "reranker": "model",               # Enables model-based reranking
        "provider": "tei",                 # Specifies TEI as the service provider
        "queries": ["renewable energy developments"],  # Query text for relevance evaluation
        "endpoint": "http://localhost:8080",  # Your TEI service URL
        "max_client_batch_size": 32,                    # Optional: batch size for processing (default: 32)
        "truncate": True,                # Optional: Truncate the inputs that are longer than the maximum supported size
        "truncation_direction": "Right",    # Optional: Direction to truncate the inputs
    }
)
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(NAME_FIELD))
        .param("reranker", "model")
        .param("provider", "tei")
        .param("queries", "[\"renewable energy developments\"]")
        .param("endpoint", "http://localhost:8080")
        .param("max_client_batch_size", "32")
        .param("truncate", "true")
        .param("truncation_direction", "Right")
        .build();
searchWithRanker(scientists, ranker);
// nodejs
// go
# restful

TEI-Ranker-spezifische Parameter

Die folgenden Parameter sind spezifisch für den TEI 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.

"tei"

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

Die URL Ihres TEI-Dienstes.

"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

Nein

Ob Eingaben, die die maximale Sequenzlänge überschreiten, abgeschnitten werden sollen. Wenn False, führen lange Eingaben zu Fehlern.

True oder False

truncation_direction

Nein

Richtung, aus der abgeschnitten wird, wenn die Eingabe zu lang ist:

  • "Right" (Voreinstellung): Token werden vom Ende der Sequenz entfernt, bis die maximal unterstützte Größe erreicht ist.

  • "Left": Die Token werden vom Anfang der Sequenz entfernt.

"Right" oder "Left"

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

So wenden Sie TEI 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=tei_ranker,                         # Apply tei 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?