#05 Reranking 精排序

Tech sentence-transformers CrossEncoder, BAAI/bge-reranker-v2-m3 AI Claude Code

源起

向量檢索(Bi-Encoder)能找到相關內容,但排序不夠精確——最相關的結果不一定排最前面,這直接影響餵給 LLM 的上下文品質。

設計

兩階段檢索:第一階段用 Bi-Encoder(bge-small-zh-v1.5)快速召回 top 20 候選,第二階段用 Cross-Encoder(bge-reranker-v2-m3)對 20 個候選逐一評分,取最相關的 top 8 給 LLM。

Bi-Encoder 把 query 和 document 分開編碼再比餘弦距離,速度快但精度有限。Cross-Encoder 把 query-document 對一起餵進去算相關性分數,精度高但慢。兩者結合剛好:大範圍用快的撈、小範圍用準的排。

參數設 initial_k=20、final_k=8。20 個候選夠涵蓋相關內容,8 個分片約 3000-5000 字不會讓 LLM prompt 太長。

實現

實作上是把舊的 vector_search(query, top_k=8) 內部替換成兩階段流程,外部 API 不變,其他程式碼不用改。

每個結果同時保留 vector_similarity 和 rerank_score 兩個分數,方便除錯和分析。實測 Rerank 分數的區間(0.76-0.92)比向量相似度(0.63-0.69)差異更明顯,更容易區分相關性。

Reranking 增加約 0.5 秒,整體問答時間從 4-6 秒變成 5-7 秒,可以接受。

尾聲

項目結果
Reranker 模型bge-reranker-v2-m3(~560 MB)
增加耗時~0.5 秒
檢索流程top 20 → rerank → top 8
記憶體增加~800 MB

排序品質提升明顯,最相關的結果確實排到了前面。0.5 秒換更好的答案品質,值得。


返回 專案首頁