TEI RankerCompatible with Milvus 2.6.x

Le TEI Ranker exploite le service Text Embedding Inference (TEI) de Hugging Face pour améliorer la pertinence des recherches par le biais d'un reclassement sémantique. Il s'agit d'une approche avancée du classement des résultats de recherche qui va au-delà de la similarité vectorielle traditionnelle.

Conditions préalables

Avant d'implémenter TEI Ranker dans Milvus, assurez-vous que vous disposez des éléments suivants

  • une collection Milvus avec un champ VARCHAR contenant le texte à reclasser

  • Un service TEI en cours d'exécution avec des capacités de reclassement. Pour des instructions détaillées sur la mise en place d'un service TEI, reportez-vous à la documentation officielle de la TEI.

Créer une fonction TEI Ranker

Pour utiliser TEI Ranker dans votre application Milvus, créez un objet Function qui spécifie le mode de fonctionnement du reclassement. Cette fonction sera transmise aux opérations de recherche Milvus pour améliorer le classement des résultats.

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

Paramètres spécifiques au classificateur TEI

Les paramètres suivants sont spécifiques au classificateur TEI :

Paramètre

Nécessaire ?

Description du paramètre

Valeur / Exemple

reranker

Oui

Doit être défini sur "model" pour activer le reclassement des modèles.

"model"

provider

Oui

Le fournisseur de services de modèle à utiliser pour le reclassement.

"tei"

queries

Oui

Liste des chaînes de requête utilisées par le modèle de reranking pour calculer les scores de pertinence. Le nombre de chaînes de requête doit correspondre exactement au nombre de requêtes dans votre opération de recherche (même si vous utilisez des vecteurs de requête au lieu de texte), sinon une erreur sera signalée.

["search query"]

endpoint

Oui

URL de votre service TEI.

"http://localhost:8080"

max_client_batch_size

Non

Étant donné que les services de modélisation peuvent ne pas traiter toutes les données en même temps, cette option définit la taille du lot pour l'accès au service de modélisation en plusieurs requêtes.

32 (par défaut)

truncate

Non

Indique s'il faut tronquer les entrées dépassant la longueur maximale de la séquence. Si False, les entrées trop longues provoquent des erreurs.

True ou False

truncation_direction

Non

Direction à partir de laquelle tronquer les entrées lorsqu'elles sont trop longues :

  • "Right" (par défaut) : Les jetons sont retirés de la fin de la séquence jusqu'à ce que la taille maximale supportée soit atteinte.

  • "Left": Les jetons sont supprimés à partir du début de la séquence.

"Right" ou "Left"

Pour les paramètres généraux communs à tous les classificateurs de modèles (par exemple, provider, queries), reportez-vous à la section Créer un classificateur de modèles.

Pour appliquer TEI Ranker à une recherche vectorielle standard :

# 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

Cette page a-t - elle été utile ?