Clasificador SiliconFlowCompatible with Milvus 2.6.x
El clasificador SiliconFlow aprovecha los completos modelos de reordenación de SiliconFlow para mejorar la relevancia de las búsquedas mediante la reordenación semántica. Proporciona capacidades flexibles de fragmentación de documentos y admite una amplia gama de modelos de reordenación especializados de diversos proveedores.
SiliconFlow Ranker es particularmente valioso para aplicaciones que requieren:
Chunking avanzado de documentos con solapamiento configurable para el manejo de documentos largos.
Acceso a diversos modelos de reordenación, incluida la serie BAAI/bge-reranker y otros modelos especializados
Puntuación flexible basada en trozos, en la que el trozo de mayor puntuación representa la puntuación del documento.
Reranking rentable con soporte para variantes de modelos estándar y pro.
Requisitos previos
Antes de implementar SiliconFlow Ranker en Milvus, asegúrese de que dispone de:
Una colección Milvus con un campo
VARCHARque contenga el texto que se va a volver a clasificar.Una clave API SiliconFlow válida con acceso a los modelos reranking. Regístrese en la plataforma de SiliconFlow para obtener sus credenciales API. Puede:
Establecer la variable de entorno
SILICONFLOW_API_KEY, oEspecificar la clave API directamente en la configuración del ranker
Crear una función SiliconFlow ranker
Para utilizar SiliconFlow Ranker en su aplicación Milvus, cree un objeto Function que especifique cómo debe operar el reranking. Esta función se pasará a las operaciones de búsqueda de Milvus para mejorar la clasificación de los resultados.
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
Parámetros específicos del ranker SiliconFlow
Los siguientes parámetros son específicos del clasificador SiliconFlow:
Parámetro |
¿Requerido? |
Descripción |
Valor / Ejemplo |
|---|---|---|---|
|
Sí |
Debe establecerse en |
|
|
Sí |
El proveedor de servicios de modelos que se utilizará para la reordenación. |
|
|
Sí |
El modelo SiliconFlow reranking a utilizar de los modelos soportados en la plataforma SiliconFlow. Para obtener una lista de los modelos de reordenación disponibles, consulte la documentación de SiliconFlow. |
|
|
Sí |
Lista de cadenas de consulta utilizadas por el modelo de clasificación para calcular las puntuaciones de relevancia. El número de cadenas de consulta debe coincidir exactamente con el número de consultas de la operación de búsqueda (incluso cuando se utilizan vectores de consulta en lugar de texto); de lo contrario, se notificará un error. |
["consulta de búsqueda"] |
|
No |
Dado que los servicios modelo pueden no procesar todos los datos a la vez, esto establece el tamaño del lote para acceder al servicio modelo en múltiples peticiones. |
|
|
No |
Número máximo de chunks generados dentro de un documento. Los documentos largos se dividen en varios trozos para el cálculo, y la puntuación más alta entre los trozos se toma como la puntuación del documento. Sólo se admite en determinados modelos: |
|
|
No |
Número de tokens que se solapan entre trozos adyacentes cuando los documentos están divididos en trozos. Esto garantiza la continuidad a través de los límites de los trozos para una mejor comprensión semántica. Sólo se admite en determinados modelos: |
|
|
No |
Credencial de autenticación para acceder a los servicios de la API SiliconFlow. Si no se especifica, el sistema buscará la variable de entorno |
"su-siliconflow-api-key" |
Soporte de características específicas del modelo: Los parámetros max_chunks_per_doc y overlap_tokens sólo son compatibles con modelos específicos. Cuando se utilicen otros modelos, estos parámetros serán ignorados.
Para conocer los parámetros generales compartidos por todos los clasificadores de modelos (por ejemplo, provider, queries), consulte Crear un clasificador de modelos.
Aplicar a la búsqueda vectorial estándar
Para aplicar SiliconFlow Ranker a una búsqueda vectorial estándar:
# 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