Clasificador TEICompatible with Milvus 2.6.x
El clasificador TEI aprovecha el servicio Text Embedding Inference (TEI) de Hugging Face para mejorar la relevancia de las búsquedas mediante la reordenación semántica. Representa un enfoque avanzado de la ordenación de los resultados de búsqueda que va más allá de la similitud vectorial tradicional.
Requisitos previos
Antes de implementar TEI Ranker en Milvus, asegúrese de que dispone de:
Una colección Milvus con un campo
VARCHARque contenga el texto a ser reordenado.Un servicio TEI en funcionamiento con capacidades de renumeración. Para instrucciones detalladas sobre cómo configurar un servicio TEI, consulte la documentación oficial de TEI.
Crear una función TEI ranker
Para utilizar TEI Ranker en su aplicación Milvus, cree un objeto Function que especifique cómo debe operar la reordenación. 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 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 del clasificador TEI
Los siguientes parámetros son específicos del clasificador TEI:
Parámetro |
¿Necesario? |
Descripción |
Valor / Ejemplo |
|---|---|---|---|
|
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 rerank 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 informará de un error. |
["consulta de búsqueda"] |
|
Sí |
La URL de su servicio TEI. |
|
|
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 |
Si se truncan las entradas que exceden la longitud máxima de secuencia. Si |
|
|
No |
Dirección desde la que truncar cuando la entrada es demasiado larga:
|
|
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 TEI Ranker a una búsqueda vectorial estándar:
# 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