SiliconFlow-RangiererCompatible with Milvus 2.6.x
Der SiliconFlow Ranker nutzt die umfassenden Reranking-Modelle von SiliconFlow zur Verbesserung der Suchrelevanz durch semantisches Reranking. Er bietet flexible Funktionen für das Chunking von Dokumenten und unterstützt eine breite Palette spezialisierter Reranking-Modelle verschiedener Anbieter.
SiliconFlow Ranker ist besonders wertvoll für Anwendungen, die Folgendes erfordern
Hochentwickeltes Dokumenten-Chunking mit konfigurierbarer Überlappung zur Bearbeitung langer Dokumente
Zugang zu verschiedenen Reranking-Modellen, einschließlich der BAAI/bge-reranker-Serie und anderer spezialisierter Modelle
Flexibles Chunk-basiertes Scoring, bei dem der Chunk mit der höchsten Punktzahl die Bewertung des Dokuments darstellt
Kosteneffizientes Reranking mit Unterstützung für Standard- und Pro-Modellvarianten
Voraussetzungen
Bevor Sie den SiliconFlow 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ältEinen gültigen SiliconFlow-API-Schlüssel mit Zugriff auf die Ranglistenmodelle. Melden Sie sich auf der SiliconFlow-Plattform an, um Ihre API-Anmeldedaten zu erhalten. Sie können entweder:
Setzen Sie die Umgebungsvariable
SILICONFLOW_API_KEY, oderGeben Sie den API-Schlüssel direkt in der Ranker-Konfiguration an
Erstellen Sie eine SiliconFlow Ranker-Funktion
Um SiliconFlow Ranker in Ihrer Milvus-Anwendung zu verwenden, erstellen Sie ein Function-Objekt, das angibt, wie das Ranking 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 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
SiliconFlow-Ranker-spezifische Parameter
Die folgenden Parameter sind spezifisch für den SiliconFlow Ranker:
Parameter |
Erforderlich? |
Beschreibung |
Wert / Beispiel |
|---|---|---|---|
|
Ja |
Muss auf |
|
|
Ja |
Der Modelldienstanbieter, der für das Reranking verwendet werden soll. |
|
|
Ja |
Das SiliconFlow-Reranking-Modell, das aus den von der SiliconFlow-Plattform unterstützten Modellen verwendet werden soll. Eine Liste der verfügbaren Reranking-Modelle finden Sie in der SiliconFlow-Dokumentation. |
|
|
Ja |
Liste der Abfragezeichenfolgen, die vom Ranglistenmodell 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"] |
|
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. |
|
|
Nein |
Maximale Anzahl der aus einem Dokument generierten Chunks. Lange Dokumente werden zur Berechnung in mehrere Chunks unterteilt, und die höchste Punktzahl unter den Chunks wird als Punktzahl des Dokuments verwendet. Wird nur von bestimmten Modellen unterstützt: |
|
|
Keine |
Anzahl der Token-Überlappungen zwischen benachbarten Chunks, wenn Dokumente in Chunks unterteilt werden. Dadurch wird die Kontinuität über die Chunk-Grenzen hinweg sichergestellt und ein besseres semantisches Verständnis ermöglicht. Wird nur von bestimmten Modellen unterstützt: |
|
|
Nein |
Authentifizierungsnachweis für den Zugriff auf SiliconFlow-API-Dienste. Wenn nicht angegeben, sucht das System nach der Umgebungsvariablen |
"ihr-siliconflow-api-schlüssel" |
Modellspezifische Funktionsunterstützung: Die Parameter max_chunks_per_doc und overlap_tokens werden nur von bestimmten Modellen unterstützt. Wenn Sie andere Modelle verwenden, werden diese Parameter ignoriert.
Allgemeine Parameter, die von allen Modell-Rankern verwendet werden (z. B. provider, queries), finden Sie unter Erstellen eines Modell-Rankers.
Auf Standard-Vektorsuche anwenden
So wenden Sie den SiliconFlow Ranker auf eine Standard-Vektorsuche an:
# 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