{
  "name": "Document Processing - DocuSearch",
  "nodes": [
    {
      "parameters": {},
      "id": "workflow-trigger",
      "name": "\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u958b\u59cb",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "// \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u60c5\u5831\u3092\u6e96\u5099\nconst item = $input.first();\nconst binaryData = item.binary?.data;\n\nif (!binaryData) {\n  return [{\n    json: {\n      error: 'No binary data found',\n      success: false\n    }\n  }];\n}\n\n// \u30d5\u30a1\u30a4\u30eb\u540d\u3092\u53d6\u5f97\nconst fileName = binaryData.fileName || item.json.name || 'unknown';\n\n// binaryData.directory\u304b\u3089\u30d5\u30eb\u30d1\u30b9\u3092\u69cb\u7bc9\nconst directory = binaryData.directory || item.json.directory || '/watch/documents';\nlet originalPath = `${directory}/${fileName}`;\n\n// \u547c\u3073\u51fa\u3057\u5143\u304b\u3089path\u304c\u6e21\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u305d\u308c\u3092\u4f7f\u7528\nif (item.json.path) {\n  originalPath = item.json.path;\n}\n\n// \u76f8\u5bfe\u30d1\u30b9\u3092\u751f\u6210\uff08/watch/\u3092\u9664\u53bb\uff09\nlet relativePath = item.json.relativePath;\nif (!relativePath) {\n  relativePath = originalPath.replace(/^\\/watch\\//, '');\n}\n\n// \u30d5\u30a1\u30a4\u30eb\u62e1\u5f35\u5b50\u3092\u53d6\u5f97\nconst ext = fileName.split('.').pop()?.toLowerCase() || '';\n\n// \u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3092\u5224\u5b9a\nconst textExtensions = ['txt', 'md', 'mdx', 'csv', 'json', 'xml', 'html', 'htm', 'yaml', 'yml', 'properties'];\nconst isPdf = ext === 'pdf';\nconst isTextFile = textExtensions.includes(ext);\n\n// \u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7: 'text', 'pdf', 'binary'\nlet fileType = 'binary';\nif (isTextFile) fileType = 'text';\nelse if (isPdf) fileType = 'pdf';\n\n// \u30d0\u30a4\u30ca\u30ea\u30d0\u30c3\u30d5\u30a1\u3092\u53d6\u5f97\nconst binaryBuffer = await this.helpers.getBinaryDataBuffer(0, 'data');\nconst base64String = binaryBuffer.toString('base64');\n\n// \u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u5408\u306fUTF-8\u3068\u3057\u3066\u30c7\u30b3\u30fc\u30c9\nlet textContent = '';\nif (isTextFile) {\n  try {\n    textContent = binaryBuffer.toString('utf-8');\n  } catch (e) {\n    textContent = '';\n  }\n}\n\nreturn [{\n  json: {\n    originalPath: originalPath,\n    relativePath: relativePath,\n    fileName: fileName,\n    extension: ext,\n    fileType: fileType,\n    isTextFile: isTextFile,\n    isPdf: isPdf,\n    textContent: textContent,\n    base64Data: base64String,\n    mimeType: binaryData.mimeType || 'application/octet-stream',\n    fileSize: binaryData.fileSize || 0\n  },\n  binary: item.binary\n}];"
      },
      "id": "prepare-document",
      "name": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6e96\u5099",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.fileType }}",
              "value2": "text"
            }
          ]
        }
      },
      "id": "check-is-text",
      "name": "\u30c6\u30ad\u30b9\u30c8\u5224\u5b9a",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        440,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.fileType }}",
              "value2": "pdf"
            }
          ]
        }
      },
      "id": "check-is-pdf",
      "name": "PDF\u5224\u5b9a",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        660,
        100
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "http://dify-api:5001/v1/datasets/b6e67602-dbd0-4777-bf44-de9ab18a8a11/document/create-by-text",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"name\": \"{{ $json.relativePath }}\",\n  \"text\": \"\u25a0\u30d5\u30a1\u30a4\u30eb\u540d: {{ $json.fileName }}\\n\u25a0\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9: {{ $json.relativePath }}\\n\u25a0\u30d5\u30a1\u30a4\u30ebURL: http://localhost/docs/{{ encodeURI($json.relativePath) }}\\n\\n\u25a0\u5185\u5bb9:\\n\" + {{ JSON.stringify($json.textContent) }},\n  \"indexing_technique\": \"high_quality\",\n  \"process_rule\": {\n    \"mode\": \"automatic\"\n  }\n}",
        "options": {
          "timeout": 120000
        }
      },
      "id": "dify-upload-text",
      "name": "Dify\u30c6\u30ad\u30b9\u30c8\u767b\u9332",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        660,
        -100
      ],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 5000,
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// PDF\u306eBase64\u30c7\u30fc\u30bf\u304b\u3089Gemini API\u30ea\u30af\u30a8\u30b9\u30c8\u30da\u30a4\u30ed\u30fc\u30c9\u3092\u69cb\u7bc9\nconst item = $input.first();\nconst base64Data = item.json.base64Data;\nconst fileName = item.json.fileName;\n\nif (!base64Data) {\n  throw new Error('No base64Data found for PDF');\n}\n\n// Gemini API\u30ea\u30af\u30a8\u30b9\u30c8\u30da\u30a4\u30ed\u30fc\u30c9\u3092\u69cb\u7bc9\nconst requestPayload = {\n  contents: [{\n    parts: [\n      {\n        text: `\u3053\u306ePDF\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5185\u5bb9\u3092\u8a73\u7d30\u306b\u62bd\u51fa\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n## \u51fa\u529b\u5f62\u5f0f\n\u4ee5\u4e0b\u306e\u5f62\u5f0f\u3067\u69cb\u9020\u5316\u3057\u3066\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n\u3010\u6587\u66f8\u7a2e\u5225\u3011\uff08\u5951\u7d04\u66f8\u3001\u898b\u7a4d\u66f8\u3001\u7269\u4ef6\u60c5\u5831\u3001\u8b70\u4e8b\u9332\u3001\u8acb\u6c42\u66f8\u3001\u305d\u306e\u4ed6\uff09\n\n\u3010\u7269\u4ef6\u60c5\u5831\u306e\u5834\u5408\u3011\u203b\u8a72\u5f53\u3059\u308b\u5834\u5408\u306e\u307f\n\u30fb\u8cc3\u6599: \u25cb\u25cb\u5186/\u6708\uff08\u7ba1\u7406\u8cbb\u8fbc\u307f\u306e\u5834\u5408\u306f\u5408\u8a08\u984d\u3082\uff09\n\u30fb\u7ba1\u7406\u8cbb/\u5171\u76ca\u8cbb: \u25cb\u25cb\u5186/\u6708\n\u30fb\u6577\u91d1: \u25cb\u30f6\u6708\u5206\n\u30fb\u793c\u91d1: \u25cb\u30f6\u6708\u5206\n\u30fb\u6240\u5728\u5730: \u90fd\u9053\u5e9c\u770c\u304b\u3089\u756a\u5730\u307e\u3067\n\u30fb\u6700\u5bc4\u99c5: \u25cb\u25cb\u7dda\u25cb\u25cb\u99c5 \u5f92\u6b69\u25cb\u5206\n\u30fb\u9593\u53d6\u308a: \u25cbLDK\u7b49\n\u30fb\u5c02\u6709\u9762\u7a4d: \u25cb\u25cb\u33a1\n\u30fb\u7bc9\u5e74\u6570: \u25cb\u5e74\uff08\u7bc9\u5e74\u6708\u304c\u308f\u304b\u308c\u3070\u8a18\u8f09\uff09\n\u30fb\u968e\u6570: \u25cb\u968e/\u25cb\u968e\u5efa\u3066\n\u30fb\u69cb\u9020: RC\u9020\u3001\u9244\u9aa8\u9020\u3001\u6728\u9020\u306a\u3069\n\u30fb\u8a2d\u5099: \u30a8\u30a2\u30b3\u30f3\u3001\u30d0\u30b9\u30c8\u30a4\u30ec\u5225\u3001\u30aa\u30fc\u30c8\u30ed\u30c3\u30af\u7b49\n\n\u3010\u91d1\u984d\u60c5\u5831\u3011\u203b\u7269\u4ef6\u4ee5\u5916\u306e\u6587\u66f8\u306e\u5834\u5408\n\u30fb\u5408\u8a08\u91d1\u984d: \u25cb\u25cb\u5186\n\u30fb\u5185\u8a33\u304c\u3042\u308c\u3070\u8a18\u8f09\n\n\u3010\u65e5\u4ed8\u60c5\u5831\u3011\n\u30fb\u4f5c\u6210\u65e5/\u5951\u7d04\u65e5/\u6709\u52b9\u671f\u9650\u306a\u3069\n\n\u3010\u95a2\u4fc2\u8005\u60c5\u5831\u3011\n\u30fb\u4f1a\u793e\u540d\u3001\u62c5\u5f53\u8005\u540d\u3001\u9023\u7d61\u5148\u306a\u3069\n\n\u3010\u6587\u66f8\u306e\u8981\u7d04\u3011\n\u5185\u5bb9\u30922-3\u6587\u3067\u8981\u7d04\n\n\u3010\u691c\u7d22\u30ad\u30fc\u30ef\u30fc\u30c9\u3011\n\u3053\u306e\u6587\u66f8\u3092\u691c\u7d22\u3059\u308b\u306e\u306b\u5f79\u7acb\u3064\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u30ab\u30f3\u30de\u533a\u5207\u308a\u3067\u5217\u6319\n\n\u3010\u5168\u6587\u30c6\u30ad\u30b9\u30c8\u3011\n\u8aad\u307f\u53d6\u308c\u308b\u5168\u3066\u306e\u6587\u5b57\u60c5\u5831\u3092\u6f0f\u308c\u306a\u304f\u8a18\u8f09`\n      },\n      {\n        inline_data: {\n          mime_type: \"application/pdf\",\n          data: base64Data\n        }\n      }\n    ]\n  }],\n  generationConfig: {\n    temperature: 0.3,\n    maxOutputTokens: 8192\n  }\n};\n\nreturn [{\n  json: {\n    ...item.json,\n    geminiPayload: requestPayload\n  }\n}];"
      },
      "id": "prepare-gemini-request",
      "name": "Gemini\u30ea\u30af\u30a8\u30b9\u30c8\u6e96\u5099",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        880,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "key",
              "value": "={{ $env.GEMINI_API_KEY }}"
            }
          ]
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.geminiPayload) }}",
        "options": {
          "timeout": 120000
        }
      },
      "id": "gemini-pdf",
      "name": "Gemini PDF\u51e6\u7406",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        1100,
        0
      ],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 5000
    },
    {
      "parameters": {
        "jsCode": "// Gemini\u306e\u5fdc\u7b54\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u3092\u62bd\u51fa\nconst item = $input.first();\nconst geminiResponse = item.json;\nconst prevData = $('\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6e96\u5099').first().json;\n\n// Gemini\u30ec\u30b9\u30dd\u30f3\u30b9\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u3092\u62bd\u51fa\nlet extractedText = '';\ntry {\n  extractedText = geminiResponse.candidates[0].content.parts[0].text || '';\n} catch (e) {\n  extractedText = '\u30c6\u30ad\u30b9\u30c8\u62bd\u51fa\u30a8\u30e9\u30fc: ' + e.message;\n}\n\n// \u30d5\u30a1\u30a4\u30ebURL\u3092\u751f\u6210\uff08Nginx\u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\uff09\nconst fileUrl = `http://localhost/docs/${encodeURI(prevData.relativePath)}`;\n\n// \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30c6\u30ad\u30b9\u30c8\u3092\u69cb\u7bc9\nconst parts = [];\nparts.push(`\u25a0\u30d5\u30a1\u30a4\u30eb\u540d: ${prevData.fileName}`);\nparts.push(`\u25a0\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9: ${prevData.relativePath}`);\nparts.push(`\u25a0\u30d5\u30a1\u30a4\u30ebURL: ${fileUrl}`);\nparts.push('');\nparts.push('\u25a0\u62bd\u51fa\u5185\u5bb9:');\nparts.push(extractedText);\n\nconst documentText = parts.join('\\n');\n\nreturn [{\n  json: {\n    ...prevData,\n    fileUrl: fileUrl,\n    extractedText: extractedText,\n    documentText: documentText\n  }\n}];"
      },
      "id": "build-pdf-document",
      "name": "PDF\u6587\u66f8\u69cb\u7bc9",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1320,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "http://dify-api:5001/v1/datasets/b6e67602-dbd0-4777-bf44-de9ab18a8a11/document/create-by-text",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"name\": \"{{ $json.relativePath }}\",\n  \"text\": {{ JSON.stringify($json.documentText) }},\n  \"indexing_technique\": \"high_quality\",\n  \"process_rule\": {\n    \"mode\": \"automatic\"\n  }\n}",
        "options": {
          "timeout": 120000
        }
      },
      "id": "dify-upload-pdf-text",
      "name": "Dify\u306bPDF\u30c6\u30ad\u30b9\u30c8\u767b\u9332",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        1540,
        0
      ],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 5000,
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// \u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u5f62\u5f0f\u306b\u5909\u66f4\nconst item = $input.first();\nconst relativePath = item.json.relativePath;\n\n// \u30b9\u30e9\u30c3\u30b7\u30e5\u3092\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u306b\u7f6e\u63db\nconst safeFileName = relativePath.replace(/\\//g, '_');\n\n// \u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u5909\u66f4\nif (item.binary && item.binary.data) {\n  item.binary.data.fileName = safeFileName;\n}\n\nreturn [{\n  json: {\n    ...item.json,\n    safeFileName: safeFileName\n  },\n  binary: item.binary\n}];"
      },
      "id": "rename-file",
      "name": "\u30d5\u30a1\u30a4\u30eb\u540d\u5909\u66f4",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        880,
        200
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "http://dify-api:5001/v1/datasets/b6e67602-dbd0-4777-bf44-de9ab18a8a11/document/create_by_file",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "parameterType": "formBinaryData",
              "name": "file",
              "inputDataFieldName": "data"
            },
            {
              "parameterType": "formData",
              "name": "data",
              "value": "{\"indexing_technique\":\"high_quality\",\"process_rule\":{\"mode\":\"automatic\"}}"
            }
          ]
        },
        "options": {
          "timeout": 120000
        }
      },
      "id": "dify-upload-file",
      "name": "Dify\u30d5\u30a1\u30a4\u30eb\u767b\u9332",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        1100,
        200
      ],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 5000,
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const item = $input.first();\nconst prevData = $('\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6e96\u5099').first().json;\nconst difyResponse = item.json;\n\nconst documentId = difyResponse.document?.id || null;\nconst batch = difyResponse.batch || null;\n\nreturn [{\n  json: {\n    success: true,\n    documentId: documentId,\n    batch: batch,\n    fileName: prevData.fileName,\n    originalPath: prevData.originalPath,\n    relativePath: prevData.relativePath,\n    fileType: 'text',\n    status: 'completed',\n    processedAt: new Date().toISOString()\n  }\n}];"
      },
      "id": "result-text",
      "name": "\u30c6\u30ad\u30b9\u30c8\u7d50\u679c",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        880,
        -100
      ]
    },
    {
      "parameters": {
        "jsCode": "const item = $input.first();\nconst prevData = $('\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6e96\u5099').first().json;\nconst difyResponse = item.json;\n\nconst documentId = difyResponse.document?.id || null;\nconst batch = difyResponse.batch || null;\n\nreturn [{\n  json: {\n    success: true,\n    documentId: documentId,\n    batch: batch,\n    fileName: prevData.fileName,\n    originalPath: prevData.originalPath,\n    relativePath: prevData.relativePath,\n    fileType: 'pdf',\n    status: 'completed',\n    processedAt: new Date().toISOString()\n  }\n}];"
      },
      "id": "result-pdf",
      "name": "PDF\u7d50\u679c",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1760,
        0
      ]
    },
    {
      "parameters": {
        "jsCode": "const item = $input.first();\nconst prevData = $('\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6e96\u5099').first().json;\nconst difyResponse = item.json;\n\nconst documentId = difyResponse.document?.id || null;\nconst batch = difyResponse.batch || null;\n\nreturn [{\n  json: {\n    success: true,\n    documentId: documentId,\n    batch: batch,\n    fileName: prevData.fileName,\n    originalPath: prevData.originalPath,\n    relativePath: prevData.relativePath,\n    fileType: 'binary',\n    status: 'completed',\n    processedAt: new Date().toISOString()\n  }\n}];"
      },
      "id": "result-file",
      "name": "\u30d5\u30a1\u30a4\u30eb\u7d50\u679c",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1320,
        200
      ]
    }
  ],
  "connections": {
    "\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u958b\u59cb": {
      "main": [
        [
          {
            "node": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6e96\u5099",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u6e96\u5099": {
      "main": [
        [
          {
            "node": "\u30c6\u30ad\u30b9\u30c8\u5224\u5b9a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u30c6\u30ad\u30b9\u30c8\u5224\u5b9a": {
      "main": [
        [
          {
            "node": "Dify\u30c6\u30ad\u30b9\u30c8\u767b\u9332",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "PDF\u5224\u5b9a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "PDF\u5224\u5b9a": {
      "main": [
        [
          {
            "node": "Gemini\u30ea\u30af\u30a8\u30b9\u30c8\u6e96\u5099",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u30d5\u30a1\u30a4\u30eb\u540d\u5909\u66f4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini\u30ea\u30af\u30a8\u30b9\u30c8\u6e96\u5099": {
      "main": [
        [
          {
            "node": "Gemini PDF\u51e6\u7406",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dify\u30c6\u30ad\u30b9\u30c8\u767b\u9332": {
      "main": [
        [
          {
            "node": "\u30c6\u30ad\u30b9\u30c8\u7d50\u679c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini PDF\u51e6\u7406": {
      "main": [
        [
          {
            "node": "PDF\u6587\u66f8\u69cb\u7bc9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "PDF\u6587\u66f8\u69cb\u7bc9": {
      "main": [
        [
          {
            "node": "Dify\u306bPDF\u30c6\u30ad\u30b9\u30c8\u767b\u9332",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dify\u306bPDF\u30c6\u30ad\u30b9\u30c8\u767b\u9332": {
      "main": [
        [
          {
            "node": "PDF\u7d50\u679c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u30d5\u30a1\u30a4\u30eb\u540d\u5909\u66f4": {
      "main": [
        [
          {
            "node": "Dify\u30d5\u30a1\u30a4\u30eb\u767b\u9332",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dify\u30d5\u30a1\u30a4\u30eb\u767b\u9332": {
      "main": [
        [
          {
            "node": "\u30d5\u30a1\u30a4\u30eb\u7d50\u679c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [
    "docusearch",
    "document-processing"
  ]
}