PILLAR 03 · RAG 與向量資料庫

BM25 + Vector Hybrid Search + Reranker:把命中率從 60% 拉到 90%

單純 vector search 不夠——混合檢索與 Reranker 把召回率帶到產線水準。

PUBLISHED
2026-06-02
READ TIME
11 min
CATEGORY
PILLAR 03
UPDATED
2026-09-27
KEY TAKEAWAY · 一句話結論

純 Vector Search 在大量文件下 Top-3 命中率往往只有 60 到 70%,作者以 1,000 篇技術文件與 200 個問題實測,BM25 與向量搜尋以 RRF 合併的 Hybrid Search 可將命中率提升到 84%,再加上 Reranker 對 Top-20 重新打分後達到 92%,是企業 RAG 提升檢索準確度最有效的組合。

發布 2026-06-02 · 最後更新 2026-09-27 · 作者 賴家榮 Andy Lai

純 Vector Search 在大量文件下命中率往往只有 60–70%。混合搜尋(Hybrid)+ Reranker 是把命中率拉到 90% 的關鍵組合拳。

Vector Search 為什麼不夠?

Vector Search 找的是「語義相近」,但有些情境語義抓不到:

  • 專有名詞(型號、產品 ID)
  • 數字(年份、版本)
  • 縮寫(HR、IT)

這些情境,傳統的 BM25 關鍵字搜尋反而強。

Hybrid Search:BM25 + Vector

同時跑兩種搜尋,然後合併排序:

# 簡化邏輯
bm25_results = bm25_search(query, top_k=20)
vector_results = vector_search(query, top_k=20)

# RRF (Reciprocal Rank Fusion) 合併
def rrf_score(rank, k=60):
    return 1 / (k + rank)

combined = {}
for i, doc in enumerate(bm25_results):
    combined[doc.id] = combined.get(doc.id, 0) + rrf_score(i+1)
for i, doc in enumerate(vector_results):
    combined[doc.id] = combined.get(doc.id, 0) + rrf_score(i+1)

ranked = sorted(combined.items(), key=lambda x: -x[1])[:10]

實測:Hybrid 提升命中率多少?

測試:1,000 篇技術文件 + 200 個問題

  • 只用 Vector:Top-3 命中率 62%
  • 只用 BM25:Top-3 命中率 71%
  • Hybrid(RRF):Top-3 命中率 84%
  • Hybrid + Reranker:Top-3 命中率 92%

Reranker 是什麼?

Reranker 是專門訓練來「給 (query, doc) 對打相關度分數」的小模型。比 Embedding 慢但準很多。

流程:

  1. 用 Hybrid Search 取 Top-20
  2. Reranker 對這 20 筆重新打分
  3. 取 Top-3–5 給 LLM

常用 Reranker

模型類型價格
Cohere Rerank 3API$2/1K queries
BGE Reranker v2開源、自架免費
jina-reranker-v2API / 自架$0.05/M tokens
Voyage rerank-2API$0.05/M tokens

實作範例

from cohere import Client
co = Client('YOUR_KEY')

# 取得 Top-20 後
candidates = ['切片1...', '切片2...', ...]
reranked = co.rerank(
    model='rerank-multilingual-v3.0',
    query=user_question,
    documents=candidates,
    top_n=5
)
# reranked.results 已按相關度排序

性能考量

  • Reranker 慢:每個 (query, doc) 對需 50–200ms
  • 建議只 rerank Top-20,不要 rerank 整個資料庫
  • 有些 Reranker 支援批次(一次 100 個更快)

什麼時候不用 Reranker?

  • 資料量 < 1,000 筆(用 Long Context 算了)
  • 延遲要求極嚴(< 200ms 全程)
  • Vector Search 命中率已經 > 85%

進階:Metadata 過濾

在 Hybrid Search 之前先用 metadata 過濾:

# Qdrant 範例
results = client.search(
    collection_name='docs',
    query_vector=embed(query),
    query_filter=Filter(must=[
        FieldCondition(key='department', match=MatchValue(value='HR')),
        FieldCondition(key='year', range=Range(gte=2024))
    ]),
    limit=20
)

這個技巧能再提升命中率 5–15%,特別是企業多部門情境。

常見問題

為什麼純 Vector Search 在企業 RAG 命中率不夠?

Vector Search 找的是語義相近的內容,但專有名詞(型號、產品 ID)、數字(年份、版本)與縮寫(HR、IT)這類情境語義抓不到,傳統 BM25 關鍵字搜尋反而更強。實測中只用 Vector 的 Top-3 命中率為 62%,只用 BM25 反而有 71%。

Hybrid Search 是什麼,怎麼把 BM25 和向量結果合併?

Hybrid Search 是同時執行 BM25 關鍵字搜尋與 Vector 語義搜尋,各取 Top-20 後合併排序。常用合併方式是 RRF(Reciprocal Rank Fusion),每筆文件依在兩個名單中的排名計算 1/(k+rank) 分數(k 通常取 60)並加總,再依總分取前 10 筆。

Reranker 是什麼,能把命中率提升多少?

Reranker 是專門訓練來替 (query, doc) 配對打相關度分數的小模型,比 Embedding 慢但準很多。流程是先用 Hybrid Search 取 Top-20,Reranker 重新打分後取 Top-3 到 5 給 LLM。實測從 Hybrid 的 84% 再提升到 92% Top-3 命中率。

常用 Reranker 有哪些,費用大約多少?

文章列出四款:Cohere Rerank 3 為 API 服務,每 1,000 次查詢 2 美元;BGE Reranker v2 開源可自架,免費;jina-reranker-v2 與 Voyage rerank-2 皆約每百萬 tokens 0.05 美元。效能上每個 (query, doc) 配對需 50 到 200ms,因此建議只 rerank Top-20。

什麼情況下不需要用 Reranker?

三種情況可以省略:資料量少於 1,000 筆時直接用 Long Context 即可;全程延遲要求低於 200ms 的極嚴場景;或 Vector Search 命中率已經超過 85%。另外在 Hybrid Search 前先用 metadata 過濾(如部門、年份),能再提升 5 到 15% 命中率,特別適合企業多部門情境。


RELATED ARTICLES

延伸閱讀。

延伸工具

LAST STEP

給我 30 分鐘,
告訴我你的業務。

我直接告訴你:你公司最該先用 AI 的 3 個地方、大概花多少預算、能不能用政府補助降低成本。

SOUTH TAIWAN AI WEEKLY

每週一封,南台灣中小企業
AI 應用週報。

賴家榮親自整理:本週最值得看的 AI 應用案例、補助公告、課程開班資訊。免費、可隨時退訂。

我們不分享您的 Email · 可隨時退訂

📞 立即撥打 預約免費診斷