public List<Node> addBuiltInField(StreamSource sourceInfo, StreamSink sinkInfo,
            List<TransformResponse> transformResponses, Map<String, StreamField> constantFieldMap) {
        ExtractNodeProvider extractNodeProvider = extractNodeProviderFactory.getExtractNodeProvider(
                sourceInfo.getSourceType());
        LoadNodeProvider loadNodeProvider = loadNodeProviderFactory.getLoadNodeProvider(sinkInfo.getSinkType());

        if (loadNodeProvider.isSinkMultiple(sinkInfo)) {
            sourceInfo.setFieldList(loadNodeProvider.addStreamFieldsForSinkMultiple(sourceInfo.getFieldList()));
            sinkInfo.setSinkFieldList(loadNodeProvider.addSinkFieldsForSinkMultiple(sinkInfo.getSinkFieldList()));
        }
        if (FieldInfoUtils.compareFields(extractNodeProvider.getMetaFields(), loadNodeProvider.getMetaFields())) {
            if (loadNodeProvider.needInlongPropertiesField(sinkInfo)) {
                loadNodeProvider.addInlongPropertiesFieldForStream(sourceInfo.getFieldList());
                loadNodeProvider.addInlongPropertiesFieldForSink(sinkInfo.getSinkFieldList());
            }
            if (extractNodeProvider.needInlongPropertiesField(sourceInfo)) {
                extractNodeProvider.addInlongPropertiesFieldForStream(sourceInfo.getFieldList());
            }
            extractNodeProvider.addStreamMetaFields(sourceInfo.getFieldList());
            if (CollectionUtils.isNotEmpty(transformResponses)) {
                transformResponses.forEach(v -> {
                    if (loadNodeProvider.needInlongPropertiesField(sinkInfo)) {
                        loadNodeProvider.addInlongPropertiesFieldForStream(v.getFieldList());
                    }
                    if (extractNodeProvider.needInlongPropertiesField(sourceInfo)) {
                        extractNodeProvider.addInlongPropertiesFieldForStream(v.getFieldList());
                    }
                    extractNodeProvider.addStreamMetaFields(v.getFieldList());
                });
            }
            loadNodeProvider.addSinkMetaFields(sinkInfo.getSinkFieldList());
        }

        ExtractNode extractNode = extractNodeProvider.createExtractNode(sourceInfo);
        List<TransformNode> transformNodes =
                TransformNodeUtils.createTransformNodes(transformResponses, constantFieldMap);
        LoadNode loadNode = loadNodeProvider.createLoadNode(sinkInfo, constantFieldMap);

        List<Node> nodes = new ArrayList<>();
        nodes.add(extractNode);
        nodes.addAll(transformNodes);
        nodes.add(loadNode);
        return nodes;
    }
Add built-in field for extra node and load node
inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/sort/node/NodeFactory.java