Ранжировщик SiliconFlowCompatible with Milvus 2.6.x
SiliconFlow Ranker использует комплексные модели ранжирования SiliconFlow для повышения релевантности поиска путем семантического ранжирования. Он обеспечивает гибкие возможности разбиения документов на куски и поддерживает широкий спектр специализированных моделей ранжирования от различных поставщиков.
SiliconFlow Ranker особенно ценен для приложений, требующих:
Расширенное измельчение документов с настраиваемым перекрытием для работы с длинными документами
Доступ к различным моделям ранжирования, включая серию BAAI/bge-reranker и другие специализированные модели
Гибкая оценка на основе фрагментов, когда фрагмент с наивысшей оценкой представляет оценку документа
Экономичный рерайтинг с поддержкой стандартных и профессиональных моделей.
Предварительные условия
Перед внедрением SiliconFlow Ranker в Milvus убедитесь, что у вас есть:
Коллекция Milvus с полем
VARCHAR, содержащим текст для повторного ранжирования.Действительный API-ключ SiliconFlow с доступом к моделям ранжирования. Зарегистрируйтесь на платформе SiliconFlow, чтобы получить учетные данные API. Вы можете либо:
Задать переменную окружения
SILICONFLOW_API_KEY, либоУказать ключ API непосредственно в конфигурации ранжировщика.
Создание функции ранжирования SiliconFlow
Чтобы использовать ранжировщик SiliconFlow в вашем приложении Milvus, создайте объект Function, который определяет, как должен работать ранжировщик. Эта функция будет передаваться в поисковые операции Milvus для улучшения ранжирования результатов.
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
Специфические параметры ранжировщика SiliconFlow
Следующие параметры специфичны для ранжировщика SiliconFlow:
Параметр |
Требуемый? |
Описание |
Значение / Пример |
|---|---|---|---|
|
Да |
Должно быть установлено значение |
|
|
Да |
Поставщик услуг модели, который будет использоваться для повторного ранжирования. |
|
|
Да |
Модель реранкинга SiliconFlow для использования из поддерживаемых моделей на платформе SiliconFlow. Список доступных моделей реранкинга см. в документации SiliconFlow. |
|
|
Да |
Список строк запросов, используемых моделью ранжирования для расчета баллов релевантности. Количество строк запросов должно точно соответствовать количеству запросов в вашей поисковой операции (даже при использовании векторов запросов вместо текста), иначе будет выдано сообщение об ошибке. |
["поисковый запрос"]. |
|
Нет |
Поскольку сервисы моделей могут обрабатывать не все данные сразу, здесь задается размер пакета для обращения к сервису модели при нескольких запросах. |
|
|
Нет |
Максимальное количество чанков, генерируемых внутри документа. Длинные документы делятся на несколько фрагментов для расчета, и наибольший балл среди фрагментов принимается за балл документа. Поддерживается только в определенных моделях: |
|
|
Нет |
Количество перекрытий лексем между соседними фрагментами при разбивке документов на фрагменты. Это обеспечивает непрерывность по границам чанков для лучшего семантического понимания. Поддерживается только определенными моделями: |
|
|
Нет |
Учетные данные для аутентификации при доступе к сервисам SiliconFlow API. Если он не указан, система будет искать переменную окружения |
"your-siliconflow-api-key" |
Поддержка функций, специфичных для конкретной модели: Параметры max_chunks_per_doc и overlap_tokens поддерживаются только определенными моделями. При использовании других моделей эти параметры будут игнорироваться.
Общие параметры, общие для всех ранжировщиков моделей (например, provider, queries), см. в разделе Создание ранжировщика моделей.
Применение к стандартному векторному поиску
Чтобы применить SiliconFlow Ranker к стандартному векторному поиску:
# 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