diff --git a/apps/application/flow/step_node/document_split_node/i_document_split_node.py b/apps/application/flow/step_node/document_split_node/i_document_split_node.py index 39684d6bd..6834238d3 100644 --- a/apps/application/flow/step_node/document_split_node/i_document_split_node.py +++ b/apps/application/flow/step_node/document_split_node/i_document_split_node.py @@ -35,13 +35,38 @@ class DocumentSplitNodeSerializer(serializers.Serializer): required=False, label=_("document name relate problem reference"), child=serializers.CharField(), default=[] ) limit = serializers.IntegerField(required=False, label=_("limit"), default=4096) + limit_type = serializers.ChoiceField( + choices=['custom', 'referencing'], required=False, label=_("document name relate problem type"), + default='custom' + ) + limit_reference = serializers.ListField( + required=False, label=_("limit reference"), child=serializers.CharField(), default=[] + ) chunk_size = serializers.IntegerField(required=False, label=_("chunk size"), default=256) + chunk_size_type = serializers.ChoiceField( + choices=['custom', 'referencing'], required=False, label=_("chunk size type"), default='custom' + ) + chunk_size_reference = serializers.ListField( + required=False, label=_("chunk size reference"), child=serializers.CharField(), default=[] + ) patterns = serializers.ListField( required=False, label=_("patterns"), child=serializers.CharField(), default=[] ) + patterns_type = serializers.ChoiceField( + choices=['custom', 'referencing'], required=False, label=_("patterns type"), default='custom' + ) + patterns_reference = serializers.ListField( + required=False, label=_("patterns reference"), child=serializers.CharField(), default=[] + ) with_filter = serializers.BooleanField( required=False, label=_("with filter"), default=False ) + with_filter_type = serializers.ChoiceField( + choices=['custom', 'referencing'], required=False, label=_("with filter type"), default='custom' + ) + with_filter_reference = serializers.ListField( + required=False, label=_("with filter reference"), child=serializers.CharField(), default=[] + ) class IDocumentSplitNode(INode): @@ -59,5 +84,7 @@ class IDocumentSplitNode(INode): def execute(self, document_list, knowledge_id, split_strategy, paragraph_title_relate_problem_type, paragraph_title_relate_problem, paragraph_title_relate_problem_reference, document_name_relate_problem_type, document_name_relate_problem, - document_name_relate_problem_reference, limit, chunk_size, patterns, with_filter, **kwargs) -> NodeResult: + document_name_relate_problem_reference, limit, limit_type, limit_reference, chunk_size, chunk_size_type, + chunk_size_reference, patterns, patterns_type, patterns_reference, with_filter, with_filter_type, + with_filter_reference, **kwargs) -> NodeResult: pass diff --git a/apps/application/flow/step_node/document_split_node/impl/base_document_split_node.py b/apps/application/flow/step_node/document_split_node/impl/base_document_split_node.py index 7806ffc85..0703ff6e5 100644 --- a/apps/application/flow/step_node/document_split_node/impl/base_document_split_node.py +++ b/apps/application/flow/step_node/document_split_node/impl/base_document_split_node.py @@ -44,11 +44,23 @@ class BaseDocumentSplitNode(IDocumentSplitNode): def execute(self, document_list, knowledge_id, split_strategy, paragraph_title_relate_problem_type, paragraph_title_relate_problem, paragraph_title_relate_problem_reference, document_name_relate_problem_type, document_name_relate_problem, - document_name_relate_problem_reference, limit, chunk_size, patterns, with_filter, **kwargs) -> NodeResult: + document_name_relate_problem_reference, limit, limit_type, limit_reference, chunk_size, chunk_size_type, + chunk_size_reference, patterns, patterns_type, patterns_reference, with_filter, with_filter_type, + with_filter_reference, **kwargs) -> NodeResult: self.context['knowledge_id'] = knowledge_id - file_list = self.workflow_manage.get_reference_field(document_list[0], document_list[1:]) - paragraph_list = [] + file_list = self.get_reference_content(document_list) + # 处理引用类型的参数 + if patterns_type == 'referencing': + patterns = self.get_reference_content(patterns_reference) + if limit_type == 'referencing': + limit = self.get_reference_content(limit_reference) + if chunk_size_type == 'referencing': + chunk_size = self.get_reference_content(chunk_size_reference) + if with_filter_type == 'referencing': + with_filter = self.get_reference_content(with_filter_reference) + + paragraph_list = [] for doc in file_list: get_buffer = FileBufferHandle().get_buffer diff --git a/ui/src/workflow/nodes/document-split-node/index.vue b/ui/src/workflow/nodes/document-split-node/index.vue index 122b48965..c2bd301ce 100644 --- a/ui/src/workflow/nodes/document-split-node/index.vue +++ b/ui/src/workflow/nodes/document-split-node/index.vue @@ -29,7 +29,7 @@ :label="$t('views.workflow.nodes.documentSplitNode.splitStrategy.label')" :rules="{ required: true, - message: $t('views.workflow.nodes.documentSplitNode.splitStrategy.required'), + message: $t('views.workflow.nodes.documentSplitNode.splitStrategy.requiredMessage'), trigger: 'change' }" > @@ -52,45 +52,79 @@ +
-
- {{ - $t('views.document.setRules.patterns.label') - }} - - - +
+
+ + {{ $t('views.document.setRules.patterns.label') }} + + + + +
+ + + +
+
-
- {{ $t('views.document.setRules.limit.label') }} +
+
+ {{ $t('views.document.setRules.limit.label') }} +
+ + + +
+
-
- {{ $t('views.document.setRules.with_filter.label') }} +
+
+ {{ $t('views.document.setRules.with_filter.label') }} +
+ + + +
- + +
{{ $t('views.document.setRules.with_filter.text') }} @@ -240,9 +323,17 @@ const form = { document_name_relate_problem: false, document_name_relate_problem_reference: [], limit: 4096, + limit_type: 'custom', + limit_reference: [], chunk_size: 256, + chunk_size_type: 'custom', + chunk_size_reference: [], patterns: [], - with_filter: false + patterns_type: 'custom', + patterns_reference: [], + with_filter: false, + with_filter_type: 'custom', + with_filter_reference: [] }