Skip to content

Commit 276378a

Browse files
authored
feat: application workflow (#3415)
1 parent 8468d08 commit 276378a

File tree

19 files changed

+130
-102
lines changed

19 files changed

+130
-102
lines changed

apps/application/flow/step_node/__init__.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,24 @@
1010
from .application_node import BaseApplicationNode
1111
from .condition_node import *
1212
from .direct_reply_node import *
13+
from .document_extract_node import *
1314
from .form_node import *
14-
from .function_lib_node import *
15-
from .function_node import *
15+
from .image_generate_step_node import *
16+
from .image_understand_step_node import *
17+
from .mcp_node import BaseMcpNode
1618
from .question_node import *
1719
from .reranker_node import *
18-
19-
from .document_extract_node import *
20-
from .image_understand_step_node import *
21-
from .image_generate_step_node import *
22-
23-
from .search_dataset_node import *
20+
from .search_knowledge_node import *
2421
from .speech_to_text_step_node import BaseSpeechToTextNode
2522
from .start_node import *
2623
from .text_to_speech_step_node.impl.base_text_to_speech_node import BaseTextToSpeechNode
24+
from .tool_lib_node import *
25+
from .tool_node import *
2726
from .variable_assign_node import BaseVariableAssignNode
28-
from .mcp_node import BaseMcpNode
2927

30-
node_list = [BaseStartStepNode, BaseChatNode, BaseSearchDatasetNode, BaseQuestionNode,
28+
node_list = [BaseStartStepNode, BaseChatNode, BaseSearchKnowledgeNode, BaseQuestionNode,
3129
BaseConditionNode, BaseReplyNode,
32-
BaseFunctionNodeNode, BaseFunctionLibNodeNode, BaseRerankerNode, BaseApplicationNode,
30+
BaseToolNodeNode, BaseToolLibNodeNode, BaseRerankerNode, BaseApplicationNode,
3331
BaseDocumentExtractNode,
3432
BaseImageUnderstandNode, BaseFormNode, BaseSpeechToTextNode, BaseTextToSpeechNode,
3533
BaseImageGenerateNode, BaseVariableAssignNode, BaseMcpNode]

apps/application/flow/step_node/search_dataset_node/__init__.py renamed to apps/application/flow/step_node/search_knowledge_node/__init__.py

File renamed without changes.

apps/application/flow/step_node/search_dataset_node/i_search_dataset_node.py renamed to apps/application/flow/step_node/search_knowledge_node/i_search_knowledge_node.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ class DatasetSettingSerializer(serializers.Serializer):
3535

3636
class SearchDatasetStepNodeSerializer(serializers.Serializer):
3737
# 需要查询的数据集id列表
38-
dataset_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True),
39-
label=_("Dataset id list"))
40-
dataset_setting = DatasetSettingSerializer(required=True)
38+
knowledge_id_list = serializers.ListField(required=True, child=serializers.UUIDField(required=True),
39+
label=_("Dataset id list"))
40+
knowledge_setting = DatasetSettingSerializer(required=True)
4141

4242
question_reference_address = serializers.ListField(required=True)
4343

@@ -52,8 +52,8 @@ def get_paragraph_list(chat_record, node_id):
5252
'paragraph_list', []) is not None and key == node_id])
5353

5454

55-
class ISearchDatasetStepNode(INode):
56-
type = 'search-dataset-node'
55+
class ISearchKnowledgeStepNode(INode):
56+
type = 'search-knowledge-node'
5757

5858
def get_node_params_serializer_class(self) -> Type[serializers.Serializer]:
5959
return SearchDatasetStepNodeSerializer

apps/application/flow/step_node/search_dataset_node/impl/__init__.py renamed to apps/application/flow/step_node/search_knowledge_node/impl/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
@date:2024/6/11 15:35
77
@desc:
88
"""
9-
from .base_search_dataset_node import BaseSearchDatasetNode
9+
from .base_search_knowledge_node import BaseSearchKnowledgeNode

apps/application/flow/step_node/search_dataset_node/impl/base_search_dataset_node.py renamed to apps/application/flow/step_node/search_knowledge_node/impl/base_search_knowledge_node.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from django.db.models import QuerySet
1414

1515
from application.flow.i_step_node import NodeResult
16-
from application.flow.step_node.search_dataset_node.i_search_dataset_node import ISearchDatasetStepNode
16+
from application.flow.step_node.search_knowledge_node.i_search_knowledge_node import ISearchKnowledgeStepNode
1717
from common.config.embedding_config import VectorStore
1818
from common.db.search import native_search
1919
from common.utils.common import get_file_content
@@ -44,7 +44,7 @@ def reset_title(title):
4444
return f"#### {title}\n"
4545

4646

47-
class BaseSearchDatasetNode(ISearchDatasetStepNode):
47+
class BaseSearchKnowledgeNode(ISearchKnowledgeStepNode):
4848
def save_context(self, details, workflow_manage):
4949
result = details.get('paragraph_list', [])
5050
dataset_setting = self.node_params_serializer.data.get('dataset_setting')
@@ -60,24 +60,25 @@ def save_context(self, details, workflow_manage):
6060
result])[0:dataset_setting.get('max_paragraph_char_number', 5000)]
6161
self.context['directly_return'] = directly_return
6262

63-
def execute(self, dataset_id_list, dataset_setting, question,
63+
def execute(self, knowledge_id_list, knowledge_setting, question,
6464
exclude_paragraph_id_list=None,
6565
**kwargs) -> NodeResult:
6666
self.context['question'] = question
67-
if len(dataset_id_list) == 0:
67+
if len(knowledge_id_list) == 0:
6868
return get_none_result(question)
69-
model_id = get_embedding_id(dataset_id_list)
69+
model_id = get_embedding_id(knowledge_id_list)
7070
workspace_id = self.workflow_manage.get_body().get('workspace_id')
7171
embedding_model = get_model_instance_by_model_workspace_id(model_id, workspace_id)
7272
embedding_value = embedding_model.embed_query(question)
7373
vector = VectorStore.get_embedding_vector()
7474
exclude_document_id_list = [str(document.id) for document in
7575
QuerySet(Document).filter(
76-
dataset_id__in=dataset_id_list,
76+
knowledge_id__in=knowledge_id_list,
7777
is_active=False)]
78-
embedding_list = vector.query(question, embedding_value, dataset_id_list, exclude_document_id_list,
79-
exclude_paragraph_id_list, True, dataset_setting.get('top_n'),
80-
dataset_setting.get('similarity'), SearchMode(dataset_setting.get('search_mode')))
78+
embedding_list = vector.query(question, embedding_value, knowledge_id_list, exclude_document_id_list,
79+
exclude_paragraph_id_list, True, knowledge_setting.get('top_n'),
80+
knowledge_setting.get('similarity'),
81+
SearchMode(knowledge_setting.get('search_mode')))
8182
# 手动关闭数据库连接
8283
connection.close()
8384
if embedding_list is None:
@@ -89,7 +90,7 @@ def execute(self, dataset_id_list, dataset_setting, question,
8990
'is_hit_handling_method_list': [row for row in result if row.get('is_hit_handling_method')],
9091
'data': '\n'.join(
9192
[f"{reset_title(paragraph.get('title', ''))}{paragraph.get('content')}" for paragraph in
92-
result])[0:dataset_setting.get('max_paragraph_char_number', 5000)],
93+
result])[0:knowledge_setting.get('max_paragraph_char_number', 5000)],
9394
'directly_return': '\n'.join(
9495
[paragraph.get('content') for paragraph in
9596
result if
@@ -112,7 +113,7 @@ def reset_paragraph(paragraph: Dict, embedding_list: List):
112113
'update_time': paragraph.get('update_time').strftime("%Y-%m-%d %H:%M:%S"),
113114
'create_time': paragraph.get('create_time').strftime("%Y-%m-%d %H:%M:%S"),
114115
'id': str(paragraph.get('id')),
115-
'dataset_id': str(paragraph.get('dataset_id')),
116+
'knowledge_id': str(paragraph.get('knowledge_id')),
116117
'document_id': str(paragraph.get('document_id'))
117118
}
118119

@@ -124,7 +125,7 @@ def list_paragraph(embedding_list: List, vector):
124125
paragraph_list = native_search(QuerySet(Paragraph).filter(id__in=paragraph_id_list),
125126
get_file_content(
126127
os.path.join(PROJECT_DIR, "apps", "application", 'sql',
127-
'list_dataset_paragraph_by_paragraph_id.sql')),
128+
'list_knowledge_paragraph_by_paragraph_id.sql')),
128129
with_table_name=True)
129130
# 如果向量库中存在脏数据 直接删除
130131
if len(paragraph_list) != len(paragraph_id_list):

apps/application/flow/step_node/function_lib_node/__init__.py renamed to apps/application/flow/step_node/tool_lib_node/__init__.py

File renamed without changes.

apps/application/flow/step_node/function_lib_node/i_function_lib_node.py renamed to apps/application/flow/step_node/tool_lib_node/i_tool_lib_node.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99
from typing import Type
1010

1111
from django.db.models import QuerySet
12+
from django.utils.translation import gettext_lazy as _
1213
from rest_framework import serializers
1314

1415
from application.flow.i_step_node import INode, NodeResult
1516
from common.field.common import ObjectField
16-
1717
from tools.models.tool import Tool
18-
from django.utils.translation import gettext_lazy as _
1918

2019

2120
class InputField(serializers.Serializer):
@@ -36,8 +35,8 @@ def is_valid(self, *, raise_exception=False):
3635
raise Exception(_('The function has been deleted'))
3736

3837

39-
class IFunctionLibNode(INode):
40-
type = 'function-lib-node'
38+
class IToolLibNode(INode):
39+
type = 'tool-lib-node'
4140

4241
def get_node_params_serializer_class(self) -> Type[serializers.Serializer]:
4342
return FunctionLibNodeParamsSerializer

apps/application/flow/step_node/function_lib_node/impl/__init__.py renamed to apps/application/flow/step_node/tool_lib_node/impl/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
@date:2024/8/8 17:48
77
@desc:
88
"""
9-
from .base_function_lib_node import BaseFunctionLibNodeNode
9+
from .base_tool_lib_node import BaseToolLibNodeNode

apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py renamed to apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from django.utils.translation import gettext as _
1515

1616
from application.flow.i_step_node import NodeResult
17-
from application.flow.step_node.function_lib_node.i_function_lib_node import IFunctionLibNode
17+
from application.flow.step_node.tool_lib_node.i_tool_lib_node import IToolLibNode
1818
from common.exception.app_exception import AppApiException
1919
from common.utils.function_code import FunctionExecutor
2020
from common.utils.rsa_util import rsa_long_decrypt
@@ -110,7 +110,7 @@ def valid_function(function_lib, user_id):
110110
raise Exception(_('Function {name} is unavailable').format(name=function_lib.name))
111111

112112

113-
class BaseFunctionLibNodeNode(IFunctionLibNode):
113+
class BaseToolLibNodeNode(IToolLibNode):
114114
def save_context(self, details, workflow_manage):
115115
self.context['result'] = details.get('result')
116116
if self.node_params.get('is_result'):

apps/application/flow/step_node/function_node/__init__.py renamed to apps/application/flow/step_node/tool_node/__init__.py

File renamed without changes.

0 commit comments

Comments
 (0)