fix: The import method was used to create the intelligent agent, but the MCP and tool referenced by the AI dialogue node were not successfully created (#4574)

This commit is contained in:
shaohuzhang1 2025-12-29 14:06:51 +08:00 committed by GitHub
parent dceb05bf5b
commit c0eb0db78e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 41 additions and 17 deletions

View File

@ -506,3 +506,23 @@ def save_workflow_mapping(workflow, source_type, source_id, other_resource_mappi
resource_mapping_list += other_resource_mapping
QuerySet(ResourceMapping).bulk_create(
{(str(item.target_type) + str(item.target_id)): item for item in resource_mapping_list}.values())
def get_tool_id_list(workflow):
_result = []
for node in workflow.get('nodes', []):
if node.get('type') == 'tool-lib-node':
tool_id = node.get('properties', {}).get('node_data', {}).get('tool_lib_id')
if tool_id:
_result.append(tool_id)
elif node.get('type') == 'loop-node':
r = get_tool_id_list(node.get('properties', {}).get('node_data', {}).get('loop_body', {}))
for item in r:
_result.append(item)
elif node.get('type') == 'ai-chat-node':
node_data = node.get('properties', {}).get('node_data', {})
mcp_tool_ids = node_data.get('mcp_tool_ids') or []
tool_ids = node_data.get('tool_ids') or []
for _id in mcp_tool_ids + tool_ids:
_result.append(_id)
return _result

View File

@ -71,6 +71,14 @@ def hand_node(node, update_tool_map):
tool_lib_id)
if node.get('type') == 'search-knowledge-node':
node.get('properties', {}).get('node_data', {})['knowledge_id_list'] = []
if node.get('type') == 'ai-chat-node':
node_data = node.get('properties', {}).get('node_data', {})
mcp_tool_ids = node_data.get('mcp_tool_ids') or []
node_data['mcp_tool_ids'] = [update_tool_map.get(tool_id,
tool_id) for tool_id in mcp_tool_ids]
tool_ids = node_data.get('tool_ids') or []
node_data['tool_ids'] = [update_tool_map.get(tool_id,
tool_id) for tool_id in tool_ids]
class MKInstance:
@ -781,13 +789,8 @@ class ApplicationOperateSerializer(serializers.Serializer):
self.is_valid()
application_id = self.data.get('application_id')
application = QuerySet(Application).filter(id=application_id).first()
tool_id_list = [node.get('properties', {}).get('node_data', {}).get('tool_lib_id') for node
in
application.work_flow.get('nodes', []) + reduce(lambda x, y: [*x, *y], [
n.get('properties', {}).get('node_data', {}).get('loop_body', {}).get('nodes', []) for n
in
application.work_flow.get('nodes', []) if n.get('type') == 'loop-node'], []) if
node.get('type') == 'tool-lib-node']
from application.flow.tools import get_tool_id_list
tool_id_list = get_tool_id_list(application.work_flow)
tool_list = []
if len(tool_id_list) > 0:
tool_list = QuerySet(Tool).filter(id__in=tool_id_list).exclude(scope=ToolScope.SHARED)
@ -863,7 +866,7 @@ class ApplicationOperateSerializer(serializers.Serializer):
work_flow_version.save()
access_token = hashlib.md5(
str(uuid.uuid7()).encode()).hexdigest()[
8:24]
8:24]
application_access_token = QuerySet(ApplicationAccessToken).filter(
application_id=application.id).first()
if application_access_token is None:

View File

@ -52,6 +52,14 @@ def hand_node(node, update_tool_map):
if node.get('type') == 'search-knowledge-node':
node.get('properties', {}).get('node_data', {})['knowledge_id_list'] = []
if node.get('type') == 'ai-chat-node':
node_data = node.get('properties', {}).get('node_data', {})
mcp_tool_ids = node_data.get('mcp_tool_ids') or []
node_data['mcp_tool_ids'] = [update_tool_map.get(tool_id,
tool_id) for tool_id in mcp_tool_ids]
tool_ids = node_data.get('tool_ids') or []
node_data['tool_ids'] = [update_tool_map.get(tool_id,
tool_id) for tool_id in tool_ids]
class KnowledgeWorkflowModelSerializer(serializers.ModelSerializer):
@ -372,15 +380,8 @@ class KnowledgeWorkflowSerializer(serializers.Serializer):
knowledge_id = self.data.get('knowledge_id')
knowledge_workflow = QuerySet(KnowledgeWorkflow).filter(knowledge_id=knowledge_id).first()
knowledge = QuerySet(Knowledge).filter(id=knowledge_id).first()
tool_id_list = [node.get('properties', {}).get('node_data', {}).get('tool_lib_id') for node
in
knowledge_workflow.work_flow.get('nodes', []) + reduce(lambda x, y: [*x, *y], [
n.get('properties', {}).get('node_data', {}).get('loop_body', {}).get('nodes', [])
for n
in
knowledge_workflow.work_flow.get('nodes', []) if n.get('type') == 'loop-node'], [])
if
node.get('type') == 'tool-lib-node']
from application.flow.tools import get_tool_id_list
tool_id_list = get_tool_id_list(knowledge_workflow.work_flow)
tool_list = []
if len(tool_id_list) > 0:
tool_list = QuerySet(Tool).filter(id__in=tool_id_list).exclude(scope=ToolScope.SHARED)