Classificador TEICompatible with Milvus 2.6.x
O TEI Ranker utiliza o serviço TEI (Text Embedding Inference) da Hugging Face para melhorar a relevância da pesquisa através da classificação semântica. Ele representa uma abordagem avançada para a ordenação de resultados de pesquisa que vai além da similaridade vetorial tradicional.
Pré-requisitos
Antes de implementar o TEI Ranker no Milvus, certifique-se de que tem:
Uma coleção Milvus com um campo
VARCHARcontendo o texto a ser classificadoUm serviço TEI em execução com capacidades de classificação. Para obter instruções detalhadas sobre como configurar um serviço TEI, consulte a documentação oficial do TEI.
Criar uma função do classificador TEI
Para usar o TEI Ranker na sua aplicação Milvus, crie um objeto Function que especifique como o reranking deve funcionar. Esta função será passada para as 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 TEI Ranker
tei_ranker = Function(
name="tei_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": "tei", # Specifies TEI as the service provider
"queries": ["renewable energy developments"], # Query text for relevance evaluation
"endpoint": "http://localhost:8080", # Your TEI service URL
"max_client_batch_size": 32, # Optional: batch size for processing (default: 32)
"truncate": True, # Optional: Truncate the inputs that are longer than the maximum supported size
"truncation_direction": "Right", # Optional: Direction to truncate the inputs
}
)
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("vllm_semantic_ranker")
.inputFieldNames(Collections.singletonList(NAME_FIELD))
.param("reranker", "model")
.param("provider", "tei")
.param("queries", "[\"renewable energy developments\"]")
.param("endpoint", "http://localhost:8080")
.param("max_client_batch_size", "32")
.param("truncate", "true")
.param("truncation_direction", "Right")
.build();
searchWithRanker(scientists, ranker);
// nodejs
// go
# restful
Parâmetros específicos do classificador TEI
Os parâmetros seguintes são específicos do classificador TEI:
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 |
Lista de cadeias de consulta utilizadas pelo modelo de reclassificação para calcular as pontuações de relevância. O número de cadeias de caracteres de consulta tem de 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"] |
|
Sim |
O URL do serviço TEI. |
|
|
Não |
Uma vez que os serviços modelo podem não processar todos os dados de uma só vez, isto define o tamanho do lote para aceder ao serviço modelo em vários pedidos. |
|
|
Não |
Se deve truncar as entradas que excedam o comprimento máximo da sequência. Se |
|
|
Não |
Direção a partir da qual truncar quando a entrada é demasiado longa:
|
|
Para parâmetros gerais partilhados por todos os classificadores de modelos (por exemplo, provider, queries), consulte Criar um classificador de modelos.
Aplicar à pesquisa vetorial padrão
Para aplicar o TEI Ranker a uma pesquisa vetorial padrão:
# Execute search with vLLM 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=tei_ranker, # Apply tei 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