模型排名器概述Compatible with Milvus 2.6.x

傳統的向量搜尋純粹是透過數學相似性來排列結果,也就是向量在高維空間中的匹配程度。這種方法雖然有效率,但往往會忽略真正的語意相關性。考慮搜尋「資料庫最佳優化實務」:您可能會收到高向量相似度的文件,這些文件會經常提到這些詞彙,但實際上卻沒有提供可行的優化策略。

Model Ranker 整合了先進的語言模型,能夠理解查詢與文件之間的語義關係,從而改變 Milvus 的搜尋方式。它不只依賴向量相似度,還會評估內容意義和上下文,以提供更智慧、更相關的搜尋結果。

限制

  • 模型排名器不能用於群組搜尋。

  • 用於模型排序的欄位必須是文字類型 (VARCHAR)。

  • 每個模型排名器一次只能使用一個VARCHAR 欄位進行評估。

如何運作

模型排序器通過明確的工作流程將語言模型理解能力整合到 Milvus 搜索流程中:

Model Ranker Overview 模型排序器概述

  1. 初始查詢:您的應用程式發送查詢至 Milvus

  2. 向量搜尋:Milvus 執行標準向量搜索來識別候選文件

  3. 候選檢索:系統根據向量相似性識別初始候選文件集

  4. 模型評估:Model Ranker 功能處理查詢-文件對:

    • 將原始查詢和候選文件傳送至外部模型服務

    • 語言模型評估查詢和每個文件之間的語義相關性

    • 每個文件都會根據語義理解獲得相關性分數

  5. 智慧型重新排序:根據模型產生的相關性分數對文件重新排序

  6. 增強的結果:您的應用程式會收到以語義相關性來排序的結果,而不只是向量相似性。

根據您的需求選擇模型提供商

Milvus 支援下列模型服務供應商進行重新排序,每個供應商都有其獨特之處:

提供商

最適合

特性

使用範例

vLLM

需要深入瞭解語意和客制化的複雜應用程式

  • 支援各種大型語言模型

  • 靈活的部署選項

  • 較高的計算需求

  • 更大的客製化潛力

部署特定領域模型的法律研究平台,可理解法律術語和判例法關係

TEI

快速實作,資源使用效率高

  • 針對文字作業最佳化的輕量級服務

  • 部署更輕鬆,資源需求更低

  • 預先最佳化的重排模型

  • 基礎架構開銷最小化

內容管理系統需要具備標準需求的高效重排功能

一致性

以可靠性和易整合性為優先考量的企業應用程式

  • 企業級的可靠性與擴充性

  • 無需基礎架構維護的管理式服務

  • 多語言重排功能

  • 內建速率限制與錯誤處理

需要高可用性搜尋與一致 API 效能和多語言產品目錄的電子商務平台

Voyage AI

具有特定效能與情境需求的 RAG 應用程式

  • 專為重排任務訓練的模型

  • 針對不同文件長度的細膩截斷控制

  • 針對生產工作負載進行最佳化推論

  • 多種模型變體 (rerank-2、rerank-lite 等)

具有不同文件長度的研究資料庫,需要微調的效能控制和專門的語意理解

SiliconFlow

以成本效益為優先處理長文件的應用程式

  • 可設定重疊的進階文件分塊

  • 基於分塊的評分(得分最高的分塊代表文件)

  • 支援多種重排模型

  • 具成本效益的標準和專業模式變體

技術文件搜尋系統處理需要智慧分割與重疊控制的冗長手冊與文件

有關各模型服務實施的詳細資訊,請參閱專用文件:

執行

在實作 Model Ranker 之前,請確保您擁有

  • 具有VARCHAR 欄位的 Milvus 集合,其中包含要重新排名的文字

  • 可存取您的 Milvus 實例的執行中外部模型服務

  • 在 Milvus 和您選擇的模型服務之間有適當的網路連線

模型排序器與標準向量搜尋和混合搜尋操作無縫整合。實作包括建立一個 Function 物件,定義您的排序配置,並將它傳給搜尋作業。

建立模型排序器

要實作模型重排,首先要定義一個具有適當配置的 Function 物件。在本範例中,我們使用 TEI 作為服務提供者:

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

參數

需要嗎?

說明

值/範例

name

執行搜尋時使用的功能識別碼。

"semantic_ranker"

input_field_names

用於重新排序的文字欄位名稱。

必須是VARCHAR 類型的欄位。

["document"]

function_type

指定正在建立的函式類型。

對於所有模型排名器,必須設定為RERANK

FunctionType.RERANK

params

包含基於模型的重新排序函式設定的辭典。可用參數 (鍵) 依服務供應商而有所不同。

{...}

params.reranker

必須設定為"model" ,才能啟用模型重排功能。

"model"

params.provider

用於重排的模型服務提供者。

"tei"

params.queries

重排模型用來計算相關性分數的查詢字串清單。

查詢字串的數量必須與搜尋作業中的查詢字串數量完全相同 (即使使用查詢向量來取代文字),否則會報錯。

["search query"]

params.endpoint

模型服務的 URL。

"http://localhost:8080"

max_client_batch_size

單一批次中要處理的最大文件數量。較大值會增加吞吐量,但需要較多記憶體。

32 (預設值)

定義模型排序器之後,您可以將它傳給排序器參數,在搜尋作業時套用:

# 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

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?