
混合檢索是什么關鍵詞檢索與向量檢索如何結合碼海尋道 · 大模型、智能體與 RAG 工程組件系列第 26 篇向量檢索擅長理解語義但可能忽略精確的產品型號、合同編號、錯誤碼和專有名詞關鍵詞檢索擅長精確匹配卻不一定理解同義表達。混合檢索的目標是同時利用兩種能力。混合檢索通常不是把兩個分數直接相加。不同檢索器的分數范圍、排序方向和候選數量可能完全不同必須先做候選去重、分數歸一化或使用排名融合再交給 Reranker。一、兩種檢索各自擅長什么稠密向量檢索把問題和文檔轉換為稠密向量根據語義距離查找相關內容。適合同義改寫自然語言問題概念和主題關聯用戶表達不規范的場景。稀疏或關鍵詞檢索根據詞項、頻率和倒排索引匹配文本。適合產品型號API 名稱和錯誤碼人名、組織名、合同編號必須出現的精確詞。二、為什么單一檢索會失敗用戶問“錯誤碼PG-23505如何處理”關鍵詞檢索很容易定位包含該錯誤碼的文檔而純語義檢索可能認為“數據庫唯一約束沖突”與問題相關卻漏掉精確的錯誤碼頁面。反過來用戶問“員工出差住酒店超標怎么辦”如果文檔寫的是“住宿費用超出標準的處理流程”關鍵詞可能匹配不穩定而向量檢索更容易理解語義關系。三、混合檢索的基本流程用戶問題 ├── 稠密 Embedding → 向量檢索 → 候選 A └── 關鍵詞 / BM25 → 倒排檢索 → 候選 B ↓ 合并、去重、歸一化 ↓ RRF 或加權重排 ↓ Top K 結果四、RRF 是什么不同檢索器的分數通常不可直接比較。余弦相似度、BM25 分數和內積的數值范圍可能不同直接相加容易讓某一路結果天然占優。RRFReciprocal Rank Fusion可以按排名合并RRF(d) Σ 1 / (k rank_i(d))其中rank_i(d)是文檔在第 i 個檢索結果中的名次k是平滑常數。RRF 不要求不同檢索器的分數處于同一尺度工程上較容易使用。工程上要保存每個候選來自哪些召回通道便于解釋“為什么命中”也便于分析某個通道是否長期帶來噪聲。五、Milvus 中的混合檢索思路Milvus 支持在同一集合中保存稠密和稀疏向量并通過混合搜索合并結果。偽代碼如下dense_requestAnnSearchRequest([dense_query],dense_vector,{metric_type:COSINE},limit20)sparse_requestAnnSearchRequest([sparse_query],sparse_vector,{metric_type:IP},limit20)resultsclient.hybrid_search(collection_nameknowledge_chunks,reqs[dense_request,sparse_request],rankerRRFRanker(),limit10,)具體方法名和參數隨 SDK 版本可能不同正式實現應參考目標版本文檔。混合檢索并不是“加兩個字段”就完成還需要同時維護兩種向量的生成和版本。兩路召回還應使用相同的租戶、權限和文檔版本邊界合并時按穩定的chunk_id去重并記錄各通道命中數、融合后命中數和最終排名。六、如何選擇權重如果使用加權融合可以根據查詢類型動態調整包含錯誤碼、型號、編號 → 提高關鍵詞權重 自然語言解釋型問題 → 提高語義權重 無法判斷查詢類型 → 使用 RRF 或默認權重權重不要憑感覺長期固定。應準備包含精確術語和自然語言問題的評測集比較 RecallK、MRR、答案引用正確率和延遲。七、混合檢索不等于最終答案混合檢索得到的是候選集合還可能需要按租戶和權限過濾按文檔版本過濾按document_id去重使用 Reranker 對候選重新排序控制送入大模型的上下文數量。稠密 稀疏候選 ↓ 融合與去重 ↓ Reranker ↓ 上下文壓縮 ↓ 大模型回答八、什么時候不需要混合檢索如果語料主題單一、用戶問題簡單、關鍵詞檢索效果已經足夠額外引入稀疏向量會增加模型調用、索引和運維成本。不要為了“架構完整”而強行使用混合檢索。九、上線時需要注意什么稠密和稀疏向量必須對應同一 Chunk兩種索引的更新和刪除要保持一致記錄各路召回數量和合并后的數量監控關鍵詞檢索和語義檢索的空結果率對編號、金額和日期等字段增加規則校驗注意混合檢索會增加查詢延遲和內存占用。結語混合檢索的價值在于互補向量檢索理解“意思相近”關鍵詞檢索守住“詞必須準確”。二者合并后再通過去重、重排和評測才能形成適合企業知識庫的檢索鏈路。下一篇將繼續優化召回質量從查詢改寫、召回數量和 Reranker 講起。參考資料Milvus 官方文檔Hybrid SearchMilvus 官方文檔Sparse VectorMilvus 官方文檔Full Text SearchPostgreSQL 官方文檔Full Text Search本文為“碼海尋道”原創技術文章。混合檢索 API 和索引能力會隨版本變化請使用目標版本 SDK 實測。