Classificatore SiliconFlowCompatible with Milvus 2.6.x
SiliconFlow Ranker sfrutta i modelli di reranking completi di SiliconFlow per migliorare la rilevanza della ricerca attraverso il reranking semantico. Offre funzionalità flessibili di chunking dei documenti e supporta un'ampia gamma di modelli di reranking specializzati di vari fornitori.
SiliconFlow Ranker è particolarmente utile per le applicazioni che richiedono:
chunking avanzato dei documenti con sovrapposizione configurabile per la gestione di documenti lunghi
Accesso a diversi modelli di reranking, tra cui la serie BAAI/bge-reranker e altri modelli specializzati
Punteggio flessibile basato sui chunk, in cui il chunk con il punteggio più alto rappresenta il punteggio del documento
Reranking conveniente con il supporto di varianti di modelli standard e pro.
Prerequisiti
Prima di implementare SiliconFlow Ranker in Milvus, assicurarsi di disporre di:
Una raccolta Milvus con un campo
VARCHARcontenente il testo da rerankizzareUna chiave API SiliconFlow valida con accesso ai modelli di reranking. Registrarsi sulla piattaforma di SiliconFlow per ottenere le credenziali API. È possibile scegliere tra:
Impostare la variabile d'ambiente
SILICONFLOW_API_KEY, oppureSpecificare la chiave API direttamente nella configurazione del ranker.
Creare una funzione ranker di SiliconFlow
Per utilizzare SiliconFlow Ranker nella vostra applicazione Milvus, create un oggetto Function che specifichi come deve funzionare il reranking. Questa funzione verrà passata alle operazioni di ricerca di Milvus per migliorare la classificazione dei risultati.
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
Parametri specifici del ranker SiliconFlow
I seguenti parametri sono specifici del ranker SiliconFlow:
Parametro |
Richiesto? |
Descrizione |
Valore / Esempio |
|---|---|---|---|
|
Sì |
Deve essere impostato su |
|
|
Sì |
Il fornitore di servizi del modello da usare per il reranking. |
|
|
Sì |
Il modello di reranking SiliconFlow da utilizzare tra i modelli supportati dalla piattaforma SiliconFlow. Per un elenco dei modelli di reranking disponibili, consultare la documentazione di SiliconFlow. |
|
|
Sì |
Elenco delle stringhe di query utilizzate dal modello di reranking per calcolare i punteggi di rilevanza. Il numero di stringhe di query deve corrispondere esattamente al numero di query dell'operazione di ricerca (anche quando si usano vettori di query al posto del testo), altrimenti verrà segnalato un errore. |
["query di ricerca"] |
|
No |
Poiché i servizi modello non possono elaborare tutti i dati in una sola volta, si imposta la dimensione del batch per accedere al servizio modello in più richieste. |
|
|
No |
Numero massimo di chunk generati all'interno di un documento. I documenti lunghi vengono divisi in più pezzi per il calcolo e il punteggio più alto tra i pezzi viene preso come punteggio del documento. Supportato solo da modelli specifici: |
|
|
No |
Numero di sovrapposizioni di token tra chunk adiacenti quando i documenti sono raggruppati in chunk. Questo garantisce la continuità tra i confini dei chunk per una migliore comprensione semantica. Supportato solo da modelli specifici: |
|
|
No |
Credenziale di autenticazione per l'accesso ai servizi SiliconFlow API. Se non viene specificata, il sistema cercherà la variabile d'ambiente |
"your-siliconflow-api-key" |
Supporto di funzionalità specifiche del modello: I parametri max_chunks_per_doc e overlap_tokens sono supportati solo da modelli specifici. Quando si utilizzano altri modelli, questi parametri vengono ignorati.
Per i parametri generali condivisi da tutti i classificatori di modelli (ad esempio, provider, queries), fare riferimento a Creare un classificatore di modelli.
Applicazione alla ricerca vettoriale standard
Per applicare SiliconFlow Ranker a una ricerca vettoriale 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