Classificador SiliconFlowCompatible with Milvus 2.6.x
O SiliconFlow Ranker aproveita os modelos de classificação abrangentes do SiliconFlow para melhorar a relevância da pesquisa através da classificação semântica. Fornece capacidades flexíveis de fragmentação de documentos e suporta uma vasta gama de modelos de classificação especializados de vários fornecedores.
O SiliconFlow Ranker é particularmente valioso para aplicativos que exigem:
Agrupamento avançado de documentos com sobreposição configurável para lidar com documentos longos
Acesso a diversos modelos de reranking, incluindo a série BAAI/bge-reranker e outros modelos especializados
Pontuação flexível baseada em pedaços, em que o pedaço de maior pontuação representa a pontuação do documento
Reranking econômico com suporte para variantes de modelo padrão e profissional
Pré-requisitos
Antes de implementar o SiliconFlow Ranker no Milvus, certifique-se de ter:
Uma coleção Milvus com um campo
VARCHARque contém o texto a ser classificadoUma chave API válida do SiliconFlow com acesso aos modelos de classificação. Registe-se na plataforma do SiliconFlow para obter as suas credenciais de API. Você pode:
Definir a variável de ambiente
SILICONFLOW_API_KEY, ouEspecificar a chave da API diretamente na configuração do classificador
Criar uma função do classificador do SiliconFlow
Para utilizar o SiliconFlow Ranker na sua aplicação Milvus, crie um objeto Function que especifique como o reranking deve funcionar. Esta função será transmitida às operações de pesquisa do Milvus para melhorar a classificação dos 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 do classificador SiliconFlow
Os parâmetros seguintes são específicos do classificador SiliconFlow:
Parâmetro |
Necessário? |
Descrição |
Valor / Exemplo |
|---|---|---|---|
|
Sim |
Tem de ser definido para |
|
|
Sim |
O fornecedor de serviços de modelos a utilizar para a reclassificação. |
|
|
Sim |
O modelo de reanálise do SiliconFlow a utilizar a partir dos modelos suportados na plataforma SiliconFlow. Para obter uma lista dos modelos de reclassificação disponíveis, consulte a documentação do SiliconFlow. |
|
|
Sim |
Lista de cadeias de caracteres de consulta utilizadas pelo modelo de classificação para calcular as pontuações de relevância. O número de cadeias de consulta deve corresponder exatamente ao número de consultas na sua operação de pesquisa (mesmo quando utiliza vectores de consulta em vez de texto), caso contrário será comunicado um erro. |
["consulta de pesquisa"] |
|
Não |
Uma vez que os serviços de modelo podem não processar todos os dados de uma só vez, isto define o tamanho do lote para aceder ao serviço de modelo em vários pedidos. |
|
|
Não |
Número máximo de blocos gerados a partir de um documento. Os documentos longos são divididos em vários blocos para cálculo e a pontuação mais elevada entre os blocos é considerada como a pontuação do documento. Suportado apenas por modelos específicos: |
|
|
Não |
Número de sobreposições de tokens entre blocos adjacentes quando os documentos são divididos em blocos. Isto assegura a continuidade entre os limites dos pedaços para uma melhor compreensão semântica. Apenas suportado por modelos específicos: |
|
|
Não |
Credencial de autenticação para aceder aos serviços da API do SiliconFlow. Se não for especificado, o sistema procurará a variável de ambiente |
"your-siliconflow-api-key" |
Suporte de funcionalidades específicas do modelo: Os parâmetros max_chunks_per_doc e overlap_tokens são suportados apenas por modelos específicos. Ao usar outros modelos, esses parâmetros serão ignorados.
Para parâmetros gerais compartilhados entre todos os classificadores de modelo (por exemplo, provider, queries), consulte Criar um classificador de modelo.
Aplicar à pesquisa de vetor padrão
Para aplicar o SiliconFlow Ranker a uma pesquisa de vetor padrão:
# 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