Visão geral do Model RankerCompatible with Milvus 2.6.x
A pesquisa vetorial tradicional classifica os resultados puramente pela similaridade matemática - a proximidade dos vetores no espaço de alta dimensão. Apesar de eficiente, esta abordagem muitas vezes não tem verdadeira relevância semântica. Considere a pesquisa por "melhores práticas para otimização de bases de dados": poderá receber documentos com elevada semelhança vetorial que mencionam estes termos frequentemente, mas que não fornecem estratégias de otimização acionáveis.
O Model Ranker transforma a pesquisa do Milvus ao integrar modelos de linguagem avançados que compreendem as relações semânticas entre consultas e documentos. Em vez de se basear apenas na semelhança de vectores, avalia o significado e o contexto do conteúdo para fornecer resultados mais inteligentes e relevantes.
Limites
Os classificadores de modelos não podem ser utilizados com pesquisas de agrupamento.
Os campos usados para classificação de modelos devem ser do tipo texto (
VARCHAR).Cada classificador de modelos pode usar apenas um campo
VARCHARde cada vez para avaliação.
Como funciona
Os classificadores de modelos integram capacidades de compreensão de modelos linguísticos no processo de pesquisa do Milvus através de um fluxo de trabalho bem definido:
Visão geral do classificador de modelos
Consulta inicial: A sua aplicação envia uma consulta ao Milvus
Pesquisa vetorial: Milvus efectua uma pesquisa vetorial padrão para identificar documentos candidatos
Recuperação de candidatos: O sistema identifica o conjunto inicial de documentos candidatos com base na semelhança dos vectores
Avaliação de modelos: A função de classificação de modelos processa os pares consulta-documento:
Envia a consulta original e os documentos candidatos para um serviço de modelo externo
O modelo de linguagem avalia a relevância semântica entre a consulta e cada documento
Cada documento recebe uma pontuação de relevância com base na compreensão semântica
Reordenação inteligente: Os documentos são reordenados com base nas pontuações de relevância geradas pelo modelo
Resultados melhorados: A sua aplicação recebe resultados classificados por relevância semântica e não apenas por semelhança de vectores
Escolha um fornecedor de modelos para as suas necessidades
Milvus suporta os seguintes provedores de serviços de modelo para reranking, cada um com caraterísticas distintas:
Provedor |
Melhor para |
Caraterísticas |
Exemplo de caso de uso |
|---|---|---|---|
vLLM |
Aplicações complexas que exigem compreensão semântica profunda e personalização |
|
Plataforma de investigação jurídica que implementa modelos específicos do domínio que compreendem a terminologia jurídica e as relações jurisprudenciais |
TEI |
Implementação rápida com utilização eficiente de recursos |
|
Sistema de gestão de conteúdos que necessita de capacidades de reanálise eficientes com requisitos padrão |
Coesão |
Aplicações empresariais que dão prioridade à fiabilidade e à facilidade de integração |
|
Plataforma de comércio eletrónico que requer pesquisa de alta disponibilidade com desempenho consistente da API e catálogos de produtos multilingues |
IA do Voyage |
Aplicações RAG com requisitos específicos de desempenho e contexto |
|
Base de dados de investigação com diferentes comprimentos de documentos que requerem um controlo de desempenho afinado e uma compreensão semântica especializada |
SiliconFlow |
Aplicações que processam documentos longos com prioridades de rentabilidade |
|
Sistema de pesquisa de documentação técnica que processa manuais e documentos extensos que necessitam de segmentação inteligente e controlo de sobreposição |
Para obter informações detalhadas sobre a implementação de cada serviço de modelo, consulte a documentação dedicada:
Implementação
Antes de implementar o Model Ranker, certifique-se de que tem
Uma coleção Milvus com um campo
VARCHARque contém o texto a ser classificadoUm serviço de modelo externo em execução acessível à sua instância Milvus
Conectividade de rede adequada entre o Milvus e o serviço de modelo escolhido
Os classificadores de modelos integram-se perfeitamente nas operações de pesquisa vetorial padrão e de pesquisa híbrida. A implementação envolve a criação de um objeto Function que define a sua configuração de classificação e a sua transmissão às operações de pesquisa.
Criar um classificador de modelos
Para implementar a reclassificação de modelos, comece por definir um objeto Function com a configuração adequada. Neste exemplo, usamos o TEI como o provedor de serviços:
from pymilvus import MilvusClient, Function, FunctionType
# Connect to your Milvus server
client = MilvusClient(
uri="http://localhost:19530" # Replace with your Milvus server URI
)
# Create a model ranker function
model_ranker = Function(
name="semantic_ranker", # Function identifier
input_field_names=["document"], # VARCHAR field to use for reranking
function_type=FunctionType.RERANK, # Must be set to RERANK
params={
"reranker": "model", # Specify model reranker. Must be "model"
"provider": "tei", # Choose provider: "tei", "vllm", etc.
"queries": ["machine learning for time series"], # Query text
"endpoint": "http://model-service:8080", # Model service endpoint
# "maxBatch": 32 # Optional: batch size for processing
}
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.ranker.ModelRanker;
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.build());
ModelRanker ranker = ModelRanker.builder()
.name("semantic_ranker")
.inputFieldNames(Collections.singletonList("document"))
.provider("tei")
.queries(Collections.singletonList("machine learning for time series"))
.endpoint("http://model-service:8080")
.build();
// nodejs
// go
# restful
Parâmetro |
Necessário? |
Descrição |
Valor / Exemplo |
|---|---|---|---|
|
Sim |
Identificador da sua função utilizado na execução de pesquisas. |
|
|
Sim |
Nome do campo de texto a utilizar para a reclassificação. Deve ser um campo do tipo |
|
|
Sim |
Especifica o tipo de função que está a ser criada. Deve ser definido como |
|
|
Sim |
Um dicionário que contém a configuração para a função de reclassificação baseada em modelos. Os parâmetros disponíveis (chaves) variam consoante o fornecedor de serviços. |
|
|
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 caracteres de consulta utilizadas pelo modelo de reclassificaçã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. |
|
|
Sim |
URL do serviço de modelo. |
|
|
Não |
Número máximo de documentos a processar num único lote. Valores maiores aumentam o rendimento, mas exigem mais memória. |
|
Aplicar à pesquisa de vetor padrão
Depois de definir seu classificador de modelo, é possível aplicá-lo durante as operações de pesquisa passando-o para o parâmetro classificador:
# Use the model ranker in standard vector search
results = client.search(
collection_name,
data=[your_query_vector], # Number of query vectors must match that specified in model_ranker.params["queries"]
anns_field="vector_field",
limit=10,
output_fields=["document"], # Include the text field in outputs
ranker=model_ranker, # Apply the model ranker here
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(COLLECTION_NAME)
.data(Collections.singletonList(new EmbeddedText("machine learning for time series")))
.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