GitHub Repo
Dify、Weaviateのスコア伝達を修正するパッチを提出 キーワード一致が検索パイプラインで破棄される問題に対応
Difyコミュニティは11月5日、Weaviateの全文検索でBM25スコアを要求し、伝達する修正を提案した。ヒットした文書がフィルタリングされる問題に対処する。提案は未マージで、作者による部分的な回帰テストはあるものの、バックエンド全体の検証は未完了だ。

Difyコミュニティは11月5日、Weaviateの全文検索に関する修正をPR #45642として提出した。データベースが文書を見つけても、統合レイヤーが関連性スコアを返さず、その結果、後続の検索パイプラインがヒット結果を破棄する可能性があるという問題に対応する。確認時点で提案はレビュー中であり、正式版で修正済みとはみなせない。修正提案
この問題は具体的に再現されている。最初の報告では、自前で運用する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件が除外された。追加された2件の回帰テストは、修正前の実装では失敗するという。ただし、テストではアプリケーション層のインポートを代替オブジェクトで置き換えており、バックエンド全体のlintと型チェックはまだ実施されていない。今後はメンテナーのレビュー、実データベースとの統合テスト、リリースへの収録状況を確認する必要がある。影響範囲を他のベクトルデータベースにまで広げて考えるべきではない。検証上の制約