返回首頁

GitHub Repo

Dify 提出 Weaviate 分數傳遞修補,處理關鍵字命中卻遭檢索管線丟棄的問題

Dify 社群於 11 月 5 日提出修補,補上 Weaviate 全文搜尋的 BM25 分數請求與傳遞,處理命中文件仍可能被過濾的問題。提案尚未合併,作者提供局部回歸測試,完整後端驗證仍待完成。

The original uploader was Ggia at Greek Wikipedia. · CC BY-SA 2.5 · Image source
zh-Hant

Dify 社群於 11 月 5 日提交 PR #45642,針對 Weaviate 全文搜尋提出修補:資料庫雖然找到文件,整合層卻未把相關性分數帶回,導致後續檢索管線可能將命中結果丟棄。截至查核時,提案仍開放審查,尚不能視為正式版本已修復。修補提案

這個問題已有具體重現。原始回報使用自架 Dify 1.14.1,以告警文字查詢知識庫;直接呼叫 Weaviate 可取得約 10.29 的 BM25 分數,Dify Chat API 的檢索資源卻為空。回報指出,缺失的分數在 Dify 內被當成 0.0,隨後遭過濾。這提供了排查方向:空白檢索結果也可能來自資料庫與應用程式之間的欄位傳遞。問題回報

依提案說明,修補涵蓋首次查詢與補齊屬性後的重試路徑,兩處都加入 MetadataQuery(score=True),再把回傳分數轉成浮點數,寫入文件的 metadata["score"];缺值或無法解析時則保留原狀。Weaviate 官方文件也明列,Python 客戶端可透過這個參數要求回傳 BM25F 分數,再從 obj.metadata.score 讀取。提案實作說明、Weaviate 文件

對維運 RAG 的工程師而言,這表示調整嵌入模型或切塊策略之前,應先比較資料庫原始命中與應用層保留結果。建議以固定文件及精確關鍵字,逐段核對命中數、分數欄位與過濾條件;這是依上述故障機制提出的驗證方式,並非已公布的效能收益。

作者表示局部測試有 55 項通過、1 項排除,新增兩項回歸測試在未修補實作上會失敗。不過測試使用應用層匯入替身,完整後端 lint 與型別檢查尚未執行。接下來應追蹤維護者審查、真實資料庫整合測試及版本收錄情況,影響範圍也不宜推廣到其他向量資料庫。驗證限制

來源

  1. fix(weaviate): propagate BM25 scores in full-text search — PR #45642
  2. Weaviate Full-Text (BM25) Search Always Drops Results Due to Missing Score Extraction — Issue #37045
  3. Keyword search — Retrieve BM25F scores