Classeur SiliconFlowCompatible with Milvus 2.6.x
Le SiliconFlow Ranker s'appuie sur les modèles complets de reranking de SiliconFlow pour améliorer la pertinence des recherches grâce au reranking sémantique. Il offre des capacités flexibles de découpage des documents et prend en charge une large gamme de modèles de classement spécialisés provenant de divers fournisseurs.
SiliconFlow Ranker est particulièrement utile pour les applications qui nécessitent :
un découpage avancé des documents avec un chevauchement configurable pour traiter les longs documents
L'accès à divers modèles de repositionnement, y compris la série BAAI/bge-reranker et d'autres modèles spécialisés.
Une notation flexible basée sur les morceaux, où le morceau ayant obtenu le meilleur score représente le score du document.
Reranking rentable grâce à la prise en charge des variantes du modèle standard et du modèle pro.
Conditions préalables
Avant de mettre en œuvre SiliconFlow Ranker dans Milvus, assurez-vous que vous disposez des éléments suivants
une collection Milvus avec un champ
VARCHARcontenant le texte à reclasserUne clé API SiliconFlow valide avec accès aux modèles de reranking. Inscrivez-vous sur la plateforme SiliconFlow pour obtenir vos identifiants API. Vous pouvez soit :
définir la variable d'environnement
SILICONFLOW_API_KEY, ouSpécifier la clé API directement dans la configuration du ranker.
Créer une fonction SiliconFlow Ranker
Pour utiliser SiliconFlow 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 SiliconFlow Ranker
siliconflow_ranker = Function(
name="siliconflow_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": "siliconflow", # Specifies SiliconFlow as the service provider
"model_name": "BAAI/bge-reranker-v2-m3", # SiliconFlow reranking model to use
"queries": ["renewable energy developments"], # Query text for relevance evaluation
"max_client_batch_size": 128, # Optional: batch size for model service requests (default: 128)
"max_chunks_per_doc": 5, # Optional: max chunks per document for supported models
"overlap_tokens": 50, # Optional: token overlap between chunks for supported models
# "credential": "your-siliconflow-api-key" # Optional: if not set, uses SILICONFLOW_API_KEY env var
}
)
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("siliconflow_semantic_ranker")
.inputFieldNames(Collections.singletonList("document"))
.param("reranker", "model")
.param("provider", "siliconflow")
.param("model_name", "BAAI/bge-reranker-v2-m3")
.param("queries", "[\"renewable energy developments\"]")
.param("endpoint", "http://localhost:8080")
.param("max_client_batch_size", "32")
.param("max_chunks_per_doc", "5")
.param("overlap_tokens", "50")
.build();
// nodejs
// go
# restful
Paramètres spécifiques au classeur SiliconFlow
Les paramètres suivants sont spécifiques au classificateur SiliconFlow :
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 |
Le modèle de reclassement SiliconFlow à utiliser parmi les modèles pris en charge sur la plateforme SiliconFlow. Pour obtenir la liste des modèles de reclassement disponibles, reportez-vous à la documentation SiliconFlow. |
|
|
Oui |
Liste des chaînes de requête utilisées par le modèle de reclassement 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"] |
|
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 |
Nombre maximal de morceaux générés à partir d'un document. Les documents longs sont divisés en plusieurs morceaux pour le calcul, et le score le plus élevé parmi les morceaux est considéré comme le score du document. Pris en charge uniquement par certains modèles : |
|
|
Non |
Nombre de chevauchements de jetons entre les blocs adjacents lorsque les documents sont divisés en blocs. Cela permet d'assurer la continuité à travers les limites des morceaux pour une meilleure compréhension sémantique. Pris en charge uniquement par des modèles spécifiques : |
|
|
Non |
Certificat d'authentification pour l'accès aux services API de SiliconFlow. S'il n'est pas spécifié, le système recherchera la variable d'environnement |
"your-siliconflow-api-key" (votre clé Siliconflow-api) |
Prise en charge des fonctionnalités spécifiques au modèle: Les paramètres max_chunks_per_doc et overlap_tokens ne sont pris en charge que par certains modèles. Lors de l'utilisation d'autres modèles, ces paramètres seront ignorés.
Pour les paramètres généraux partagés par tous les classeurs de modèles (par exemple, provider, queries), reportez-vous à la section Créer un classeur de modèles.
Appliquer à la recherche vectorielle standard
Pour appliquer SiliconFlow Ranker à une recherche vectorielle standard :
# Execute search with SiliconFlow 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=siliconflow_ranker, # Apply SiliconFlow 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