8
n8n 中文网amn8n.com

[astro/nextjs] 为文章/帖子分配类别/标签

高级

这是一个Content Creation, AI Summarization领域的自动化工作流,包含 29 个节点。主要使用 Code, Form, Merge, Github, Switch 等节点。 使用OpenAI GPT-4、GitHub和Google Sheets为Astro/Next.js博客文章自动分类

前置要求
  • GitHub Personal Access Token
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "c3REFIr9ubIDDYJ5",
  "meta": {
    "instanceId": "2295c029f4cb86c8f849f9c87dade323734dc279619eb9e2704f8473c381e4d1",
    "templateCredsSetupCompleted": true
  },
  "name": "[astro/nextjs] Assign cattegories / tags for article / post",
  "tags": [],
  "nodes": [
    {
      "id": "48cac2b7-14b3-4d02-8db7-082c9a8a5cec",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2192,
        96
      ],
      "parameters": {
        "text": "={{ $json.path }}",
        "options": {
          "systemMessage": "You are a helpful assistant which helps to assign proper tags and categories for post. Example of post is added in section <post>.  \n\nEach post has a section which starts with \"---\" and ands with next ocurance of \"---\". This section is metadata which describes the post. After second ocurance of \"---\" file has a content. \n\nRead tags and categories and assign them to <tags> and <categories> variables used later in response.\n\nBased on content please provide categories assigned to <new_assigned_categories> and tags list assigned to <new_assigned_tags> as example below:\n\n<example>\ncategories: [\"business\"] \ntags: [\"DigitalGirls\", \"ITPioneers\", \"WomenInIT\", \"IT\", \"FemalePower\", \"Debugging\", \"GraceHopper\"] \n</example>\n\nFinal result should be post with updated metadata passed to variable <content>.\n\n<post> \n--- \ntitle: \"Where Did the Term ‘Debug’ Come From? – Women in IT\" \npubDate: 2024-07-23 description: \"Did you know that the term ‘debug’ was coined by Admiral Grace Hopper?\" \ncategories: [\"business\"] \ntags: [\"DigitalGirls\", \"ITPioneers\", \"WomenInIT\", \"IT\", \"FemalePower\", \"Debugging\", \"GraceHopper\"] \ncoverImage: \"@assets/2024-07-23-skad-sie-wzielo-okreslenie-debug-kobiety-w-it.jpeg\" \n---\n\nDid you know that the term debug was coined by Admiral Grace Hopper?\nWhile working on the Mark II computer at Harvard University, a moth got trapped in a relay, interfering with the machine’s operation. Removing the dead insect was humorously referred to by Admiral Hopper as debugging.\n\nPS. After a conversation with Wioletta Klimczak, I got my hands on the book “Digital Girls. Pioneers of Polish Computer Science” by Karolina Wasielewska. The story above comes from that book. It’s proof that women are an important part of the IT world!\n\n#DigitalGirls #ITPioneers #WomenInIT #IT #FemalePower #Debugging #GraceHopper\n</post>"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "1844db4c-6da3-47cb-be7a-2aad32126178",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        2272,
        288
      ],
      "parameters": {
        "sessionKey": "simple_memory",
        "sessionIdType": "customKey",
        "contextWindowLength": 2
      },
      "typeVersion": 1.3
    },
    {
      "id": "5467bd31-25c6-4133-ba33-a6c66c332881",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2128,
        288
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {
          "responseFormat": "json_object"
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "7lmHcPMAjhsZFa1f",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d462260a-ba85-4e3b-9ddf-f3e0d37ea249",
      "name": "List posts/articles/pages",
      "type": "n8n-nodes-base.github",
      "position": [
        -240,
        512
      ],
      "webhookId": "ecf1a2e3-4fc4-4660-b4a9-a97743df2a1b",
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "list",
          "value": "pjsikora",
          "cachedResultUrl": "https://github.com/pjsikora",
          "cachedResultName": "pjsikora"
        },
        "filePath": "src/content/blog/pl/",
        "resource": "file",
        "operation": "list",
        "repository": {
          "__rl": true,
          "mode": "list",
          "value": "astro-n8n-test",
          "cachedResultUrl": "https://github.com/pjsikora/astro-n8n-test",
          "cachedResultName": "astro-n8n-test"
        }
      },
      "credentials": {
        "githubApi": {
          "id": "Qjzxc6aMdLBzUGJB",
          "name": "GitHub account"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "3fb2d73a-f707-46dc-8357-67772d6a9b67",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        208
      ],
      "parameters": {
        "color": 6,
        "width": 256,
        "height": 480,
        "content": "## Define repository\nDefine repository and directory in which workflow can find articles / post "
      },
      "typeVersion": 1
    },
    {
      "id": "41217dfe-2aa3-43bc-a415-88d22bb7e042",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1424,
        -576
      ],
      "parameters": {
        "color": 5,
        "height": 416,
        "content": "## Get file content\nGet file content and pass it to AI Agent"
      },
      "typeVersion": 1
    },
    {
      "id": "9985d456-e5ec-4546-9020-ce0a0f9eb57c",
      "name": "Append rows with posts / article analysis",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2768,
        400
      ],
      "parameters": {
        "columns": {
          "value": {
            "Tags": "={{ JSON.stringify($json.output.old_tags) }}",
            "FileName": "={{ $('Get post/article file').item.json.path }}",
            "Categories": "={{ JSON.stringify($json.output.old_categories) }}",
            "Proposed Tags": "={{ JSON.stringify($json.output.tags) }}",
            "Proposed Categories": "={{ JSON.stringify($json.output.categories) }}"
          },
          "schema": [
            {
              "id": "FileName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "FileName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Categories",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Categories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Proposed Categories",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Proposed Categories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tags",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Tags",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Proposed Tags",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Proposed Tags",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1MU35s5OAZ4rcCXRnvkkcxrgSVAjXISeULPrCdCl0gXo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1MU35s5OAZ4rcCXRnvkkcxrgSVAjXISeULPrCdCl0gXo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1MU35s5OAZ4rcCXRnvkkcxrgSVAjXISeULPrCdCl0gXo/edit?usp=drivesdk",
          "cachedResultName": "[AstroPosts]"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "sgj6aGeryqEVmS3h",
          "name": "GSheets - Piotr.Sikora.Ck@gmail.com"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2476998a-9a1b-4d40-b9d1-32f6f68d5d02",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2624,
        112
      ],
      "parameters": {
        "color": 4,
        "width": 368,
        "height": 464,
        "content": "## Save propositions to Google SHeet file\n\nPrepare Google Sheet to contain following columns:\n- FileName\n- Categories\n- Proposed Categories\n- Tags\n- Proposed Tags"
      },
      "typeVersion": 1
    },
    {
      "id": "b8e31673-da84-4368-9f88-7a9cc2980e43",
      "name": "Get post/article file",
      "type": "n8n-nodes-base.github",
      "position": [
        1504,
        -352
      ],
      "webhookId": "682a79e6-7c61-452d-8170-6f83196743a8",
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "list",
          "value": "pjsikora",
          "cachedResultUrl": "https://github.com/pjsikora",
          "cachedResultName": "pjsikora"
        },
        "filePath": "={{ $json.path }}",
        "resource": "file",
        "operation": "get",
        "repository": {
          "__rl": true,
          "mode": "list",
          "value": "piotr-sikora.com",
          "cachedResultUrl": "https://github.com/pjsikora/piotr-sikora.com",
          "cachedResultName": "piotr-sikora.com"
        },
        "additionalParameters": {}
      },
      "credentials": {
        "githubApi": {
          "id": "Qjzxc6aMdLBzUGJB",
          "name": "GitHub account"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "980668bc-d2d2-4452-8f89-b16bec365c91",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -512,
        -512
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1MU35s5OAZ4rcCXRnvkkcxrgSVAjXISeULPrCdCl0gXo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1MU35s5OAZ4rcCXRnvkkcxrgSVAjXISeULPrCdCl0gXo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1MU35s5OAZ4rcCXRnvkkcxrgSVAjXISeULPrCdCl0gXo/edit?usp=drivesdk",
          "cachedResultName": "[AstroPosts]"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "sgj6aGeryqEVmS3h",
          "name": "GSheets - Piotr.Sikora.Ck@gmail.com"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "00c43343-2e97-43fb-96d7-a1df7492516e",
      "name": "List FileName only / Remove duplicates",
      "type": "n8n-nodes-base.code",
      "position": [
        -240,
        -512
      ],
      "parameters": {
        "jsCode": "const filteredList = $input.all().map(item => {\n  return {\n    json: {\n      path: item.json.FileName\n    }\n  };\n});\n\n\nconst seen = new Set();\nconst unique = [];\n\nfor (const item of filteredList) {\n  const name = item.json.path;\n  if (!seen.has(name)) {\n    seen.add(name);\n    unique.push(item);\n  }\n}\n\nreturn unique;"
      },
      "typeVersion": 2
    },
    {
      "id": "2f1096f5-0280-4a3b-9a6f-3247bdd1ea44",
      "name": "Get paths to files only from GitHub repository",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        48,
        512
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "githubPaths",
              "fieldToAggregate": "path"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "31799c27-6a3b-4220-bceb-e7dcf6277f5f",
      "name": "Get file paths only  from GoogleSheets",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        32,
        -512
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "googlesheetsPaths",
              "fieldToAggregate": "path"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3aba4eab-3305-4f86-9976-ef33d5a7c96e",
      "name": "Check new repo files for AI processing",
      "type": "n8n-nodes-base.code",
      "position": [
        800,
        -448
      ],
      "parameters": {
        "jsCode": "const allItems = $input.all();\n\n// Extract arrays \nconst googlePaths = allItems.find(i => i.json.googlesheetsPaths)?.json.googlesheetsPaths || [];\nconst githubPaths = allItems.find(i => i.json.githubPaths)?.json.githubPaths || [];\n\n// Compute difference: elements in githubPaths not in googlesheetsPaths\nconst difference = githubPaths.filter(path => !googlePaths.includes(path));\n\n// Return as n8n item array\nreturn difference.map(path => ({ json: { path } }));"
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "1b542ec1-b963-4064-89fb-40a2a846c5f6",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        1008,
        -448
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Empty JSON",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "7a2c39ae-c079-4e60-ac98-163b1b148244",
                    "operator": {
                      "type": "object",
                      "operation": "empty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Not empty JSON",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "90067dec-6a4b-4a26-8703-61d4fd44ed7a",
                    "operator": {
                      "type": "object",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3
    },
    {
      "id": "8e129b23-d5a7-4630-ab8a-e780373657db",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -832,
        -512
      ],
      "webhookId": "67880b06-ee61-4732-9324-3440d25c9f95",
      "parameters": {
        "options": {},
        "formTitle": "Start process ",
        "formDescription": "Start process of adding tags and categories"
      },
      "typeVersion": 2.3
    },
    {
      "id": "47908ded-1702-483c-9ab9-f60a1ba3c82f",
      "name": "No new posts/articles in GitHub",
      "type": "n8n-nodes-base.form",
      "position": [
        1488,
        -848
      ],
      "webhookId": "bee21cb0-92f3-45a1-b680-d9fc37b4f9d8",
      "parameters": {
        "options": {},
        "operation": "completion",
        "completionTitle": "List is empty",
        "completionMessage": "List of articles is empty (there is no new articles/pages in repository)"
      },
      "typeVersion": 2.3
    },
    {
      "id": "a1410a1b-0ce6-490e-912b-3c14107b13bb",
      "name": "Proces finished - Categories and tags added",
      "type": "n8n-nodes-base.form",
      "position": [
        2176,
        -560
      ],
      "webhookId": "bee21cb0-92f3-45a1-b680-d9fc37b4f9d8",
      "parameters": {
        "options": {},
        "operation": "completion",
        "completionTitle": "Proces finished",
        "completionMessage": "Categories and tags added"
      },
      "typeVersion": 2.3
    },
    {
      "id": "ec135e1d-ba4d-4069-8da0-a1d663ad839c",
      "name": "Merge GitHub and Google Sheets read",
      "type": "n8n-nodes-base.merge",
      "position": [
        560,
        -448
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "ba6b4acc-e548-4df7-9559-bf3ba9b087b6",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        2416,
        288
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"old_categories\": [\"category1\"],\n  \"categories\": [\"category1\",\"category2\"],\n  \"old_tags\": [\"tag1\",\"tag2\"],\n  \"tags\": [\"tag1\",\"tag2\",\"tag3\",\"tag4\"]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "a637ee7d-af38-420d-8717-e82dbafb3edb",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -592,
        -960
      ],
      "parameters": {
        "color": 4,
        "width": 256,
        "height": 608,
        "content": "## Get list of posts from Google Sheets\n\nThis step prevents repeating usage of AI Agent for previously analysed posts/pages.\n\nPrepare Google Sheet to contain following columns:\n- FileName\n- Categories\n- Proposed Categories\n- Tags\n- Proposed Tags"
      },
      "typeVersion": 1
    },
    {
      "id": "3fa92146-9b0d-45a9-be49-9cf6be9d66ec",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -960
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 608,
        "content": "## List FileNames only and Remove duplicates\n\nThis function filters out duplicate items from a list of Google Sheet objects based on the value of each item’s `FileName` property"
      },
      "typeVersion": 1
    },
    {
      "id": "1653cada-fdf6-418e-aab6-bb715d25ebf1",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -960
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 608,
        "content": "## Conver JSON to Array\n\nConvert from:\n```\n{\n\"path\": \"src1\"\n},\n{\n\"path\": \"src2\"\n},\n```\nTo\n```\n{\n\"googlesheetsPaths\": \n[\n\"src1\", \n\"src2\"\n]\n}\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "45a2544a-424d-466c-9fa4-afa25ea1f08c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1424,
        -1008
      ],
      "parameters": {
        "height": 352,
        "content": "## No new files in GitHub repository\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8b7ed568-b0fb-4589-9d5d-cf10699794d1",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        208
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 480,
        "content": "## Conver JSON to Array\n\nConvert complex JSON to Array\n```\n{\n\"githubPaths\": \n[\n\"src1\", \n\"src2\"\n]\n}\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "c39a9ece-2d68-47c0-b4e5-82e6acb0eb1e",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -608
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 320,
        "content": "## Compare list from Google Sheets with list from Github\n"
      },
      "typeVersion": 1
    },
    {
      "id": "97c232f0-6358-442d-a8c1-8234e7afff4d",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        -288
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 736,
        "content": "## AI Agent\n\nRole of **AI Agent** is to:\n- Analyse content of the file (post/page)\n- Assign categories and tags per analysed file\n- Return JSON in format by `Structured output` like below:\n\n```\n{\n  \"old_categories\": [\"category1\"],\n  \"categories\": [\"category1\",\"category2\"],\n  \"old_tags\": [\"tag1\",\"tag2\"],\n  \"tags\": [\"tag1\",\"tag2\",\"tag3\",\"tag4\"]\n}\n```"
      },
      "typeVersion": 1
    },
    {
      "id": "935037f1-860d-42a3-b898-fccbd545c145",
      "name": "Loop Over Posts/Pages",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1776,
        -352
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "779d1b8f-1523-4c49-bdcc-6f4ed34ca301",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2096,
        -736
      ],
      "parameters": {
        "height": 352,
        "content": "## No new files in GitHub repository\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "e501f3f5-a580-4fdb-94cb-62bb5de8d0dc",
  "connections": {
    "1b542ec1-b963-4064-89fb-40a2a846c5f6": {
      "main": [
        [
          {
            "node": "47908ded-1702-483c-9ab9-f60a1ba3c82f",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "b8e31673-da84-4368-9f88-7a9cc2980e43",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "48cac2b7-14b3-4d02-8db7-082c9a8a5cec": {
      "main": [
        [
          {
            "node": "9985d456-e5ec-4546-9020-ce0a0f9eb57c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1844db4c-6da3-47cb-be7a-2aad32126178": {
      "ai_memory": [
        [
          {
            "node": "48cac2b7-14b3-4d02-8db7-082c9a8a5cec",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "5467bd31-25c6-4133-ba33-a6c66c332881": {
      "ai_languageModel": [
        [
          {
            "node": "48cac2b7-14b3-4d02-8db7-082c9a8a5cec",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "8e129b23-d5a7-4630-ab8a-e780373657db": {
      "main": [
        [
          {
            "node": "980668bc-d2d2-4452-8f89-b16bec365c91",
            "type": "main",
            "index": 0
          },
          {
            "node": "d462260a-ba85-4e3b-9ddf-f3e0d37ea249",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "980668bc-d2d2-4452-8f89-b16bec365c91": {
      "main": [
        [
          {
            "node": "00c43343-2e97-43fb-96d7-a1df7492516e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b8e31673-da84-4368-9f88-7a9cc2980e43": {
      "main": [
        [
          {
            "node": "935037f1-860d-42a3-b898-fccbd545c145",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "935037f1-860d-42a3-b898-fccbd545c145": {
      "main": [
        [
          {
            "node": "a1410a1b-0ce6-490e-912b-3c14107b13bb",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "48cac2b7-14b3-4d02-8db7-082c9a8a5cec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ba6b4acc-e548-4df7-9559-bf3ba9b087b6": {
      "ai_outputParser": [
        [
          {
            "node": "48cac2b7-14b3-4d02-8db7-082c9a8a5cec",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "d462260a-ba85-4e3b-9ddf-f3e0d37ea249": {
      "main": [
        [
          {
            "node": "2f1096f5-0280-4a3b-9a6f-3247bdd1ea44",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ec135e1d-ba4d-4069-8da0-a1d663ad839c": {
      "main": [
        [
          {
            "node": "3aba4eab-3305-4f86-9976-ef33d5a7c96e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3aba4eab-3305-4f86-9976-ef33d5a7c96e": {
      "main": [
        [
          {
            "node": "1b542ec1-b963-4064-89fb-40a2a846c5f6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "31799c27-6a3b-4220-bceb-e7dcf6277f5f": {
      "main": [
        [
          {
            "node": "ec135e1d-ba4d-4069-8da0-a1d663ad839c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "00c43343-2e97-43fb-96d7-a1df7492516e": {
      "main": [
        [
          {
            "node": "31799c27-6a3b-4220-bceb-e7dcf6277f5f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9985d456-e5ec-4546-9020-ce0a0f9eb57c": {
      "main": [
        [
          {
            "node": "935037f1-860d-42a3-b898-fccbd545c145",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2f1096f5-0280-4a3b-9a6f-3247bdd1ea44": {
      "main": [
        [
          {
            "node": "ec135e1d-ba4d-4069-8da0-a1d663ad839c",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 内容创作, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量29
分类2
节点类型14
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

外部链接
在 n8n.io 查看

分享此工作流

分类

分类: 34