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

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 與型別檢查尚未執行。接下來應追蹤維護者審查、真實資料庫整合測試及版本收錄情況,影響範圍也不宜推廣到其他向量資料庫。驗證限制