Ранжировщик 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:

Параметр

Требуемый?

Описание

Значение / Пример

reranker

Да

Должно быть установлено значение "model", чтобы включить повторное ранжирование моделей.

"model"

provider

Да

Поставщик услуг модели, который будет использоваться для повторного ранжирования.

"siliconflow"

model_name

Да

Модель реранкинга SiliconFlow для использования из поддерживаемых моделей на платформе SiliconFlow.

Список доступных моделей реранкинга см. в документации SiliconFlow.

"BAAI/bge-reranker-v2-m3"

queries

Да

Список строк запросов, используемых моделью ранжирования для расчета баллов релевантности. Количество строк запросов должно точно соответствовать количеству запросов в вашей поисковой операции (даже при использовании векторов запросов вместо текста), иначе будет выдано сообщение об ошибке.

["поисковый запрос"].

max_client_batch_size

Нет

Поскольку сервисы моделей могут обрабатывать не все данные сразу, здесь задается размер пакета для обращения к сервису модели при нескольких запросах.

128 (по умолчанию)

max_chunks_per_doc

Нет

Максимальное количество чанков, генерируемых внутри документа. Длинные документы делятся на несколько фрагментов для расчета, и наибольший балл среди фрагментов принимается за балл документа. Поддерживается только в определенных моделях: BAAI/bge-reranker-v2-m3, Pro/BAAI/bge-reranker-v2-m3, и netease-youdao/bce-reranker-base_v1.

5, 10

overlap_tokens

Нет

Количество перекрытий лексем между соседними фрагментами при разбивке документов на фрагменты. Это обеспечивает непрерывность по границам чанков для лучшего семантического понимания. Поддерживается только определенными моделями: BAAI/bge-reranker-v2-m3, Pro/BAAI/bge-reranker-v2-m3, и netease-youdao/bce-reranker-base_v1.

50

credential

Нет

Учетные данные для аутентификации при доступе к сервисам SiliconFlow API. Если он не указан, система будет искать переменную окружения SILICONFLOW_API_KEY.

"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

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?