問題の説明
Dockerで自己デプロイされたDify v1.13.0において、ナレッジ検索ノードのメタデータフィルタリング機能に以下の異常があります。
-
フィルタリング値を定数に設定した場合:正常にフィルタリングされ、結果は期待通りです。 -
フィルタリング値を変数に設定した場合(他のノードの出力を参照):フィルタリングが完全に機能せず、結果が正しくありません。
v1.11.4バージョンではこの機能は正常に動作していましたが、v1.13.0にアップグレード後にこの問題が発生しました。
根本原因(ソースコード分析)
v1.13.0のソースコードを分析した結果、v1.13.0ではナレッジ検索ノードがリファクタリングされ、コードが古いパスから:
Code
api/core/workflow/nodes/knowledge_retrieval/
新しいパスに移行しました:
Code
api/dify_graph/nodes/knowledge_retrieval/
問題は _extract_variable_selector_to_variable_mapping メソッドにあります。このメソッドの役割は、グラフエンジンに「このノードがどのアップストリーム変数に依存しているか」を伝えることであり、エンジンはこれに基づいて事前に変数値を variable_pool(変数プール)に注入します。
しかし、新しいバージョンのコードでは、このメソッドはクエリ変数のみを登録しており、メタデータフィルタリング条件内の変数参照を完全に漏らしています:
Python
# api/dify_graph/nodes/knowledge_retrieval/knowledge_retrieval_node.py
@classmethod
def _extract_variable_selector_to_variable_mapping(cls, *, graph_config, node_id, node_data):
typed_node_data = KnowledgeRetrievalNodeData.model_validate(node_data)
variable_mapping = {}
if typed_node_data.query_variable_selector:
variable_mapping[node_id + ".query"] = typed_node_data.query_variable_selector
if typed_node_data.query_attachment_selector:
variable_mapping[node_id + ".queryAttachment"] = typed_node_data.query_attachment_selector
# ❌ ここでは metadata_filtering_conditions 内の変数参照が全く処理されていません!
return variable_mapping
これにより、実行時に _resolve_metadata_filtering_conditions() を実行する際、variable_pool.convert_template("{{#node_id.var#}}") を呼び出しても変数プールに対応する変数が見つからず、フィルタリング条件が無効になります。
定数が正常に動作する理由は、定数値(例:"abc")が convert_template 時にテンプレート内に {{#...#}} プレースホルダーを持たず、そのまま返されるため、変数プールに全く依存しないからです。
実行フローの比較
| 定数 | 変数 | |
|---|---|---|
| 保存形式 | "abc" |
"{{#start.my_var#}}" |
| 変数プールに依存するか | いいえ、直接使用 | はい、実行時にプールから値を取得 |
| 事前登録が必要か | いいえ | はい、_extract_variable_selector_to_variable_mapping で登録必須 |
| v1.13.0の結果 |
修正案
_extract_variable_selector_to_variable_mapping メソッドにおいて、metadata_filtering_conditions 内の変数参照の登録ロジックを追加し、各 condition.value 内の {{#...#}} テンプレートを解析して、対応する変数を variable_mapping に追加してください。
環境情報
-
Dify バージョン:v1.13.0(Docker 自己デプロイ)
-
問題バージョン比較:v1.11.4 正常、v1.13.0 異常
-
問題のパス:
api/dify_graph/nodes/knowledge_retrieval/knowledge_retrieval_node.py
公式による早急な修正を希望します。よろしくお願いいたします!