From 342a8f8224be3c82a37bcf345419d8b4504ee632 Mon Sep 17 00:00:00 2001 From: "liuchangsheng@wisdomidata.com" Date: Wed, 11 Jun 2025 15:52:42 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90Dify=E3=80=91=20=E6=81=A2=E5=A4=8Din?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/core/rag/retrieval/dataset_retrieval.py | 14 ++++++++++++++ .../knowledge_retrieval_node.py | 10 ++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/api/core/rag/retrieval/dataset_retrieval.py b/api/core/rag/retrieval/dataset_retrieval.py index 6978860529..d680d36f3b 100644 --- a/api/core/rag/retrieval/dataset_retrieval.py +++ b/api/core/rag/retrieval/dataset_retrieval.py @@ -1058,6 +1058,20 @@ class DatasetRetrieval: filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) <= value) case "≥" | ">=": filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) >= value) + case "in": + values = [] + if isinstance(value, str): + if value.strip(): # 非空字符串 + values = [v.strip() for v in value.split(',')] + elif isinstance(value, list): + values = value # 或者进行其他处理 + + if not values: + filters.append(1 == 2) + else: + filters.append( + (text("documents.doc_metadata ->> :key in :value")).params(key=metadata_name, value=tuple(values)) + ) case _: pass return filters diff --git a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py index fc31f8f170..5b61ba1579 100644 --- a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py +++ b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py @@ -533,10 +533,16 @@ class KnowledgeRetrievalNode(LLMNode): case "≥" | ">=": filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) >= value) case "in": - if value is None or value == "": + values = [] + if isinstance(value, str): + if value.strip(): # 非空字符串 + values = [v.strip() for v in value.split(',')] + elif isinstance(value, list): + values = value # 或者进行其他处理 + + if not values: filters.append(1 == 2) else: - values = value.split(',') filters.append( (text("documents.doc_metadata ->> :key in :value")).params(key=metadata_name, value=tuple(values)) )