模型排名器概述Compatible with Milvus 2.6.x
傳統的向量搜尋純粹是透過數學相似性來排列結果,也就是向量在高維空間中的匹配程度。這種方法雖然有效率,但往往會忽略真正的語意相關性。考慮搜尋「資料庫最佳優化實務」:您可能會收到高向量相似度的文件,這些文件會經常提到這些詞彙,但實際上卻沒有提供可行的優化策略。
Model Ranker 整合了先進的語言模型,能夠理解查詢與文件之間的語義關係,從而改變 Milvus 的搜尋方式。它不只依賴向量相似度,還會評估內容意義和上下文,以提供更智慧、更相關的搜尋結果。
限制
模型排名器不能用於群組搜尋。
用於模型排序的欄位必須是文字類型 (
VARCHAR)。每個模型排名器一次只能使用一個
VARCHAR欄位進行評估。
如何運作
模型排序器通過明確的工作流程將語言模型理解能力整合到 Milvus 搜索流程中:
模型排序器概述
初始查詢:您的應用程式發送查詢至 Milvus
向量搜尋:Milvus 執行標準向量搜索來識別候選文件
候選檢索:系統根據向量相似性識別初始候選文件集
模型評估:Model Ranker 功能處理查詢-文件對:
將原始查詢和候選文件傳送至外部模型服務
語言模型評估查詢和每個文件之間的語義相關性
每個文件都會根據語義理解獲得相關性分數
智慧型重新排序:根據模型產生的相關性分數對文件重新排序
增強的結果:您的應用程式會收到以語義相關性來排序的結果,而不只是向量相似性。
根據您的需求選擇模型提供商
Milvus 支援下列模型服務供應商進行重新排序,每個供應商都有其獨特之處:
提供商 |
最適合 |
特性 |
使用範例 |
|---|---|---|---|
vLLM |
需要深入瞭解語意和客制化的複雜應用程式 |
|
部署特定領域模型的法律研究平台,可理解法律術語和判例法關係 |
TEI |
快速實作,資源使用效率高 |
|
內容管理系統需要具備標準需求的高效重排功能 |
一致性 |
以可靠性和易整合性為優先考量的企業應用程式 |
|
需要高可用性搜尋與一致 API 效能和多語言產品目錄的電子商務平台 |
Voyage AI |
具有特定效能與情境需求的 RAG 應用程式 |
|
具有不同文件長度的研究資料庫,需要微調的效能控制和專門的語意理解 |
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
參數 |
需要嗎? |
說明 |
值/範例 |
|---|---|---|---|
|
是 |
執行搜尋時使用的功能識別碼。 |
|
|
是 |
用於重新排序的文字欄位名稱。 必須是 |
|
|
是 |
指定正在建立的函式類型。 對於所有模型排名器,必須設定為 |
|
|
是 |
包含基於模型的重新排序函式設定的辭典。可用參數 (鍵) 依服務供應商而有所不同。 |
|
|
是 |
必須設定為 |
|
|
是 |
用於重排的模型服務提供者。 |
|
|
是 |
重排模型用來計算相關性分數的查詢字串清單。 查詢字串的數量必須與搜尋作業中的查詢字串數量完全相同 (即使使用查詢向量來取代文字),否則會報錯。 |
|
|
是 |
模型服務的 URL。 |
|
|
否 |
單一批次中要處理的最大文件數量。較大值會增加吞吐量,但需要較多記憶體。 |
|
套用至標準向量搜尋
定義模型排序器之後,您可以將它傳給排序器參數,在搜尋作業時套用:
# 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