Rang vLLMCompatible with Milvus 2.6.x
Le classeur vLLM exploite le cadre d'inférence vLLM 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.
vLLM Ranker est particulièrement utile pour les applications où la précision et le contexte sont essentiels, telles que :
la recherche de documentation technique nécessitant une compréhension approfondie des concepts
Les bases de données de recherche où les relations sémantiques l'emportent sur la correspondance des mots-clés.
les systèmes d'assistance à la clientèle qui doivent associer les problèmes des utilisateurs à des solutions pertinentes
La recherche dans le domaine du commerce électronique qui doit comprendre les attributs du produit et l'intention de l'utilisateur.
Conditions préalables
Avant d'implémenter vLLM Ranker dans Milvus, assurez-vous de disposer de ce qui suit :
une collection Milvus avec un champ
VARCHARcontenant le texte à reclasserUn service vLLM en cours d'exécution avec des capacités de reclassement. Pour obtenir des instructions détaillées sur la configuration d'un service vLLM, reportez-vous à la documentation officielle de vLLM. Vérifier la disponibilité du service vLLM :
# 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" ] }'Une réponse réussie devrait renvoyer les documents classés par score de pertinence, de manière similaire à la réponse de l'API OpenAI rerank.
Reportez-vous à la documentation de vLLM OpenAI Compatible Server pour plus d'arguments et d'options de serveur.
Créer une fonction vLLM Ranker
Pour utiliser vLLM Ranker dans votre application Milvus, créez un objet Function qui spécifie le mode de fonctionnement du reranking. 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
)
# 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
Paramètres spécifiques aux classeurs vLLM
Les paramètres suivants sont spécifiques au classificateur vLLM :
Paramètre |
Nécessaire ? |
Description du paramètre |
Valeur / Exemple |
|---|---|---|---|
|
Oui |
Doit être défini sur |
|
|
Oui |
Le fournisseur de services de modèle à utiliser pour le reclassement. |
|
|
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"] |
|
Oui |
Votre adresse de service vLLM. |
|
|
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. |
|
|
Non |
Si cette valeur est un entier k, seuls les k derniers tokens de l'invite seront utilisés (c.-à-d. troncature à gauche). La valeur par défaut est None (pas de troncature). |
|
Pour les paramètres généraux partagés par tous les classificateurs de modèles (par exemple, provider, queries), reportez-vous à la section Créer un classificateur de modèles.
Appliquer à la recherche vectorielle standard
Pour appliquer vLLM 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=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