Visión general del clasificador de modelosCompatible with Milvus 2.6.x
La búsqueda vectorial tradicional clasifica los resultados exclusivamente por similitud matemática, es decir, por la coincidencia de los vectores en un espacio de alta dimensión. A pesar de su eficacia, este enfoque suele pasar por alto la verdadera relevancia semántica. Considere la búsqueda de "mejores prácticas para la optimización de bases de datos": podría recibir documentos con alta similitud vectorial que mencionan estos términos con frecuencia, pero que en realidad no proporcionan estrategias de optimización procesables.
Model Ranker transforma la búsqueda en Milvus al integrar modelos lingüísticos avanzados que comprenden las relaciones semánticas entre las consultas y los documentos. En lugar de basarse únicamente en la similitud vectorial, evalúa el significado del contenido y el contexto para ofrecer resultados más inteligentes y relevantes.
Límites
Los clasificadores por modelos no pueden utilizarse con búsquedas agrupadas.
Los campos utilizados para el reranking de modelos deben ser de tipo texto (
VARCHAR).Cada clasificador de modelos sólo puede utilizar un campo
VARCHARa la vez para la evaluación.
Funcionamiento
Los clasificadores de modelos integran las capacidades de comprensión de modelos lingüísticos en el proceso de búsqueda de Milvus a través de un flujo de trabajo bien definido:
Visión general del clasificador de modelos
Consulta inicial: Su aplicación envía una consulta a Milvus
Búsqueda vectorial: Milvus realiza una búsqueda vectorial estándar para identificar los documentos candidatos
Recuperación decandidatos: El sistema identifica el conjunto inicial de documentos candidatos basándose en la similitud vectorial
Evaluación de modelos: La función de clasificación de modelos procesa los pares consulta-documento:
Envía la consulta original y los documentos candidatos a un servicio de modelos externo
El modelo lingüístico evalúa la relevancia semántica entre la consulta y cada documento.
Cada documento recibe una puntuación de relevancia basada en la comprensión semántica.
Reordenación inteligente: Los documentos se reordenan en función de las puntuaciones de relevancia generadas por el modelo.
Resultados mejorados: Su aplicación recibe resultados clasificados por relevancia semántica en lugar de sólo por similitud vectorial.
Elija un proveedor de modelos que se adapte a sus necesidades
Milvus admite los siguientes proveedores de servicios de modelos para la reordenación, cada uno con características distintas:
Proveedor |
Mejor para |
Características |
Ejemplo de uso |
|---|---|---|---|
vLLM |
Aplicaciones complejas que requieren una profunda comprensión semántica y personalización |
|
Plataforma de investigación jurídica que despliega modelos específicos de dominio que comprenden la terminología jurídica y las relaciones jurisprudenciales |
TEI |
Implementación rápida con un uso eficiente de los recursos |
|
Sistema de gestión de contenidos que necesita capacidades de reordenación eficientes con requisitos estándar |
Cohere |
Aplicaciones empresariales que priorizan la fiabilidad y la facilidad de integración |
|
Plataforma de comercio electrónico que requiere una búsqueda de alta disponibilidad con un rendimiento constante de la API y catálogos de productos multilingües |
Inteligencia Artificial Voyage |
Aplicaciones RAG con requisitos específicos de rendimiento y contexto |
|
Base de datos de investigación con documentos de longitud variable que requieren un control de rendimiento preciso y una comprensión semántica especializada |
SiliconFlow |
Aplicaciones que procesan documentos largos con prioridades de rentabilidad |
|
Sistema de búsqueda de documentación técnica que procesa manuales y documentos extensos que requieren segmentación inteligente y control de solapamiento |
Para obtener información detallada sobre la implementación de cada modelo de servicio, consulte la documentación correspondiente:
Implementación
Antes de implementar Model Ranker, asegúrese de que dispone de:
Una colección Milvus con un campo
VARCHARque contenga el texto que se va a clasificar.Un servicio de modelo externo en ejecución accesible a su instancia Milvus
Una conectividad de red adecuada entre Milvus y el servicio de modelos elegido.
Los clasificadores de modelos se integran perfectamente tanto con la búsqueda vectorial estándar como con las operaciones de búsqueda híbrida. La implementación implica crear un objeto Function que defina su configuración de reordenación y pasarlo a las operaciones de búsqueda.
Creación de un clasificador de modelos
Para implementar la reordenación de modelos, defina primero un objeto Function con la configuración adecuada. En este ejemplo, utilizamos TEI como proveedor de servicios:
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 |
¿Es necesario? |
Descripción |
Valor / Ejemplo |
|---|---|---|---|
|
Sí |
Identificador de su función utilizado al ejecutar búsquedas. |
|
|
Sí |
Nombre del campo de texto a utilizar para la reordenación. Debe ser un campo de tipo |
|
|
Sí |
Especifica el tipo de función que se está creando. Debe ser |
|
|
Sí |
Diccionario que contiene la configuración de la función de reordenación basada en modelos. Los parámetros disponibles (claves) varían en función del proveedor de servicios. |
|
|
Sí |
Debe establecerse en |
|
|
Sí |
El proveedor de servicios de modelos que se utilizará para la reordenación. |
|
|
Sí |
Lista de cadenas de consulta utilizadas por el modelo reranking 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. |
|
|
Sí |
URL del servicio del modelo. |
|
|
No |
Número máximo de documentos a procesar en un único lote. Los valores más altos aumentan el rendimiento pero requieren más memoria. |
|
Aplicar a la búsqueda vectorial estándar
Después de definir su ranker de modelo, puede aplicarlo durante las operaciones de búsqueda pasándolo al parámetro ranker:
# 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