8
n8n 한국어amn8n.com

GPT-4o와 Tavily를 사용하여 블로그 개요를 생성하고 풍부화합니다.

고급

이것은Content Creation, Multimodal AI분야의자동화 워크플로우로, 17개의 노드를 포함합니다.주로 Set, Code, SplitOut, Aggregate, FormTrigger 등의 노드를 사용하며. 사용하여 GPT-4o와 Tavily로 데이터를 검색하여 사실에 기반한 블로그 개요를 생성합니다.

사전 요구사항
  • OpenAI API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "5MtO3uahWJoQ7FAC",
  "meta": {
    "instanceId": "b597f3db206729fea79938d01afc341ae2811ad29d941b24c1597c0110c58f12",
    "templateCredsSetupCompleted": true
  },
  "name": "Generate and enrich a blog outline using GPT-4o & Tavily",
  "tags": [],
  "nodes": [
    {
      "id": "a115791a-30b2-47a0-85fb-d27e9d22811d",
      "name": "연구 질문 생성",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        224,
        112
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "GPT-4O"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Create an outline and research questions for this keyword: {{ $json.Keyword }}\n"
            },
            {
              "role": "system",
              "content": "=You're acting as a research assistant. your job is to take the keyword and come up with 5 to 6 research questions that will be used later down thee line to find information. Output the questions in the following JSON format.\n\n+++JSON+++\n{\n    \"outline\": [\n    {\n      \"section\": \"<section headline>\"\n      \"question\": \"<question related to section topic>\"\n    },\n  {\n      \"section\": \"<section headline>\"\n      \"question\": \"<question related to section topic>\"\n    },\n{\n      \"section\": \"<section headline>\"\n      \"question\": \"<question related to section topic>\"\n    },\n  ...continue for each section...\n  ]\n}\n+++END JSON+++\n"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "R5mcnwXQyAqWYNFn",
          "name": "OpenAi account - SOAX"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "f58f5390-254a-4dac-840b-89f7670cf632",
      "name": "질문 목록을 개별 항목으로 분리",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        640,
        112
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "message.content.outline"
      },
      "typeVersion": 1
    },
    {
      "id": "9ac43406-ca6c-45fb-8c69-49607d996ff9",
      "name": "연구 질문 답변",
      "type": "@tavily/n8n-nodes-tavily.tavily",
      "position": [
        992,
        112
      ],
      "parameters": {
        "query": "={{ $json.question }}",
        "options": {
          "topic": "general",
          "search_depth": "advanced",
          "include_answer": "advanced",
          "include_domains": []
        }
      },
      "credentials": {
        "tavilyApi": {
          "id": "qsfFofW0fRkxeCXW",
          "name": "Tavily - Personal"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f3cfa3ff-0d94-4032-87d1-62c5142560f8",
      "name": "답변을 섹션에 추가",
      "type": "n8n-nodes-base.set",
      "position": [
        1344,
        112
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "f0d21628-de35-4fbb-aa23-4bbad7635d4a",
              "name": "section_title",
              "type": "string",
              "value": "={{ $('Split out list of questions into separate items').item.json.section }}"
            },
            {
              "id": "01691bba-98ef-4c60-b69b-a7004e0203f3",
              "name": "section_question",
              "type": "string",
              "value": "={{ $('Split out list of questions into separate items').item.json.question }}"
            },
            {
              "id": "40576892-a95c-4859-8913-3ae1f2a96c55",
              "name": "answer",
              "type": "string",
              "value": "={{ $json.answer }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ed044b17-d4d5-485d-ba70-da2de93dbd05",
      "name": "하나의 큰 항목으로 변환",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1696,
        112
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "outline"
      },
      "typeVersion": 1
    },
    {
      "id": "dbcea747-de4e-4e34-bc70-ccc5d5c8b62f",
      "name": "JSON를 마크다운으로 변환",
      "type": "n8n-nodes-base.code",
      "position": [
        2064,
        112
      ],
      "parameters": {
        "jsCode": "// n8n Code node (JavaScript)\n\n// Input: JSON array in items[0].json\n// Example: your provided JSON pasted into items[0].json.sections\n// Output: single Markdown string in items[0].json.markdown\n\nconst sections = $input.first().json.outline;  \n\nfunction toMarkdown(data) {\n  return data.map(section => {\n    return `## ${section.section_title}\\n\\n**${section.section_question}**\\n\\n${section.answer}\\n`;\n  }).join(\"\\n\");\n}\n\nreturn [\n  {\n    json: {\n      markdown: toMarkdown(sections)\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "4ee2689e-c092-4e2e-8797-e566fff3dbb3",
      "name": "워크플로우 계속",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2400,
        112
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "968c5579-577a-4caa-a6f3-8eb1ca77cf41",
      "name": "키워드 입력",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -64,
        112
      ],
      "webhookId": "85ff78f8-1b0c-4443-b0e0-a26f54ddb5e1",
      "parameters": {
        "options": {},
        "formTitle": "Outline generator",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Keyword",
              "placeholder": "What's the keyword you're going for?",
              "requiredField": true
            }
          ]
        },
        "formDescription": "This workflows generates an outline and gets up to date information from Tavily"
      },
      "typeVersion": 2.3
    },
    {
      "id": "c7ed6f1b-9f5f-41a8-91c2-4332bb43da92",
      "name": "스티키 노트",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -768,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 1200,
        "content": "## Overview\n\nTurn your keyword research into a clear, fact-based content outline with this workflow. It splits your keyword into 5-6 subtopics, makes research questions for those subtopics, and uses Tavily to pull answers from real search results. This way your outline is based on real data, not just AI training data, so you can create accurate and reliable content.\n\n## How it works\n\n- Enter a keyword in the form to start the workflow\n- The OpenAI node splits the keyword into 5-6 research subtopics and makes a research question for each one. These questions will be used to enrich the outline later on\n- We split the research questions into separate items so we can process them one by one\n- Each research question is sent to Tavily. Tavily searches the web for answers and returns a short summary\n- Next, we add the answers to our JSON sections\n- We take all the separate items and join them into one list again\n- The JSON outline is converted into Markdown using a code node. The code takes the JSON headers, turns them into Markdown headings (level 2), and puts the answers underneath\n\n## Setup steps\n\n1. Get an [OpenAI API](https://openai.com/api/) key and set up your credentials inside n8n\n2. Sign up for a [Tavily](https://www.tavily.com/) account and get an API key — you can use a free account for testing\n3. Install the Tavily community node. If you don’t want to use a community node, you can call Tavily directly using an HTTP node. Check their [API reference](https://docs.tavily.com/documentation/api-reference/endpoint/search) for what endpoints to call\n4. Run the workflow and enter the keyword you want to target in the form\n5. Adjust the workflow to decide what to do with the Markdown outline\n\n## Requirements\n\n- An [OpenAI API](https://openai.com/api/) key\n- A [Tavily](https://www.tavily.com/) account\n- The Tavily community node installed\n- *(Optional)* If you don’t want to use the Tavily community node, use a regular HTTP node and call the API directly. Check their [API reference](https://docs.tavily.com/documentation/api-reference/endpoint/search) for what endpoints to call\n\n## Workflow customizations\n\n- Instead of using a form to enter your keyword, you can keep all your research in a Google Doc and go through it row by row\n- You can add another AI node at the end to turn the outline into a full article\n- You can put the outline in a Google Doc and send it to a writer using the Google Docs node and the Gmail node"
      },
      "typeVersion": 1
    },
    {
      "id": "6966d96b-038f-46a7-8fa9-72cf25741652",
      "name": "스티키 노트1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -176,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 624,
        "content": "## Enter keyword\nEnter your main topic into the form. The AI will split it up into 5-6 different subtopics"
      },
      "typeVersion": 1
    },
    {
      "id": "6990c008-60ab-446f-882e-5fc3dc56139b",
      "name": "스티키 노트2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 624,
        "content": "## Create subtopics and generate research questions\nThis AI node takes the keyword and turns it into 5-6 subtopics. For each subtopic, it generates a research question. These questions will be used to enrich the outline later down the line"
      },
      "typeVersion": 1
    },
    {
      "id": "afc0bc15-c62a-45ae-8f56-950bc57cc896",
      "name": "스티키 노트3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 624,
        "content": "## Split out questions\nIn this node we split all the research questions into separate items so we can research them\n"
      },
      "typeVersion": 1
    },
    {
      "id": "066148b2-78dd-4266-bf3f-390ed88dfcc5",
      "name": "스티키 노트4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 624,
        "content": "## Get answers to research questions using Tavily API\nSearch for the research question using Tavily API. This will research our question using up to date search results and synthesize an answer for each research question\n\n:warning: Note :warning:\nThis workflow uses the Tavily community node. You can get the same results by using a HTTP node and calling the Tavily API that way. The community node just makes it slightly easier"
      },
      "typeVersion": 1
    },
    {
      "id": "afcb6f03-8c62-459c-87b1-7e961178df97",
      "name": "스티키 노트5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1232,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 624,
        "content": "## Add answers to JSON\nAdd our answers to our JSON section outline. Now we have a section title, a main question, and an answer."
      },
      "typeVersion": 1
    },
    {
      "id": "e3a36778-7206-411e-a80a-d0c5030df51d",
      "name": "스티키 노트6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1584,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 624,
        "content": "## Turn into one list\ncombine all the different sections into one big list again."
      },
      "typeVersion": 1
    },
    {
      "id": "0b16e614-f068-474f-9ac3-d00fc5c77f8f",
      "name": "스티키 노트7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1936,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 624,
        "content": "## Convert JSON into markdown\nIn this node we take our JSON outline and turn it into a markdown outline. We convert the section titles into headings and add the answer we just researched. We don't really need the questions anymore since the LLMs will use the answers as a guide during writing"
      },
      "typeVersion": 1
    },
    {
      "id": "ffd676c9-072e-4c67-bc87-7bf484031a2c",
      "name": "스티키 노트8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2288,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 624,
        "content": "## Continue with the workflow\nAdd another AI node to turn the outline into an article or write it to a Google doc and give it to a writer. You now have an outline that is enriched with accurate data instead of relying on the LLMs own training data "
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "cdd1fb90-3e24-4da3-bf02-561833fc6ecb",
  "connections": {
    "968c5579-577a-4caa-a6f3-8eb1ca77cf41": {
      "main": [
        [
          {
            "node": "a115791a-30b2-47a0-85fb-d27e9d22811d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ed044b17-d4d5-485d-ba70-da2de93dbd05": {
      "main": [
        [
          {
            "node": "dbcea747-de4e-4e34-bc70-ccc5d5c8b62f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f3cfa3ff-0d94-4032-87d1-62c5142560f8": {
      "main": [
        [
          {
            "node": "ed044b17-d4d5-485d-ba70-da2de93dbd05",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dbcea747-de4e-4e34-bc70-ccc5d5c8b62f": {
      "main": [
        [
          {
            "node": "4ee2689e-c092-4e2e-8797-e566fff3dbb3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9ac43406-ca6c-45fb-8c69-49607d996ff9": {
      "main": [
        [
          {
            "node": "f3cfa3ff-0d94-4032-87d1-62c5142560f8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a115791a-30b2-47a0-85fb-d27e9d22811d": {
      "main": [
        [
          {
            "node": "f58f5390-254a-4dac-840b-89f7670cf632",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f58f5390-254a-4dac-840b-89f7670cf632": {
      "main": [
        [
          {
            "node": "9ac43406-ca6c-45fb-8c69-49607d996ff9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

고급 - 콘텐츠 제작, 멀티모달 AI

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수17
카테고리2
노드 유형9
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

저자
Robin Geuens

Robin Geuens

@robingeuens

Hi, I'm Robin. I'm a veteran marketer of 7 years and love automation. If you have any questions about automation feel free to reach out to me on LinkedIn: https://www.linkedin.com/in/rgeuens/

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34