8
n8n 한국어amn8n.com

AI 기반 지식 어시스턴트

중급

이것은Engineering, AI분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 Set, Code, Gmail, HttpRequest, GithubTrigger 등의 노드를 사용하며인공지능 기술을 결합하여 스마트 자동화를 구현합니다. Google Sheets, OpenAI 및 Supabase 벡터 검색을 활용한 AI 기반 지식 어시스턴트

사전 요구사항
  • Google 계정 및 Gmail API 인증 정보
  • 대상 API의 인증 정보가 필요할 수 있음
  • GitHub Personal Access Token
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "7d8066d2f56a07000fe7d753d3eeabf0ecdf68413466f30d10afe0906f058427",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "7f2ffaa3-9829-44fb-980b-373c09b8eaab",
      "name": "Github Trigger",
      "type": "n8n-nodes-base.githubTrigger",
      "position": [
        -500,
        -180
      ],
      "webhookId": "e2daea05-4e51-4dc2-8a4e-37e165a12bf1",
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "url",
          "value": "https://github.com/akhilv77"
        },
        "events": [
          "push"
        ],
        "options": {},
        "repository": {
          "__rl": true,
          "mode": "list",
          "value": "relevance",
          "cachedResultUrl": "https://github.com/akhilv77/relevance",
          "cachedResultName": "relevance"
        }
      },
      "credentials": {
        "githubApi": {
          "id": "PSygiwMjdjFDImYb",
          "name": "GitHub account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1d9880f7-d8b4-4405-873b-cf6c7dde9f58",
      "name": "HTTP 요청",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -60,
        -180
      ],
      "parameters": {
        "url": "=https://api.github.com/repos/{{ $json.body.repository.owner.name }}/{{ $json.body.repository.name }}/commits/{{ $json.body.head_commit.id }}",
        "options": {},
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {}
          ]
        },
        "nodeCredentialType": "githubOAuth2Api"
      },
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "a2afa7ad-f3d6-4c33-bdda-f79a36a327e0",
      "name": "Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        976,
        -180
      ],
      "webhookId": "88d96e90-68ae-4149-a8a3-1aeb12bca678",
      "parameters": {
        "sendTo": "akhilgadiraju@gmail.com",
        "message": "={{ $json.html }}",
        "options": {},
        "subject": "Code Review"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "wqFUFuFpF5eRAp4E",
          "name": "Gmail OAuth2 - Akhil"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "aedd9de4-6069-4c1e-976d-2b234576b06a",
      "name": "코드",
      "type": "n8n-nodes-base.code",
      "position": [
        160,
        -180
      ],
      "parameters": {
        "jsCode": "function formatPatch(patch) {\n  if (!patch) return '';\n\n  const lines = patch.split('\\n');\n  let formatted = '';\n\n  lines.forEach(line => {\n    let color = '#000000'; // default text\n    if (line.startsWith('+')) {\n      color = '#237804'; // green\n    } else if (line.startsWith('-')) {\n      color = '#cf1322'; // red\n    } else if (line.startsWith('@@')) {\n      color = '#595959'; // gray for hunk headers\n    }\n\n    formatted += `<div style=\"color: ${color}; font-family: monospace;\">${line.replace(/</g, '&lt;').replace(/>/g, '&gt;')}</div>`;\n  });\n\n  return formatted;\n}\n\nfunction renderResponse(data, repoDetails) {\n  const items = Array.isArray(data) ? data : [data];\n\n  let html = ``;\n\n  // Repo Info\n  html += `\n    <div style=\"margin: 20px 10px; padding: 15px; background-color: #f0f9ff; border-left: 5px solid #1890ff; font-family: Arial, sans-serif;\">\n      <h2 style=\"margin-top: 0; color: #0050b3;\">🔗 Repository Info</h2>\n      <p style=\"margin: 5px 0;\"><strong>Name:</strong> <a href=\"${repoDetails.repo_url}\" target=\"_blank\" style=\"color: #007acc;\">${repoDetails.name}</a></p>\n      <p style=\"margin: 5px 0;\"><strong>Owner:</strong> ${repoDetails.owner_name}</p>\n    </div>\n  `;\n\n  // Commit Info\n  html += `\n    <div style=\"margin: 20px 10px; padding: 15px; background-color: #e6f7ff; border-left: 5px solid #52c41a; font-family: Arial, sans-serif;\">\n      <h3 style=\"margin-top: 0; color: #237804;\">✅ Commit Info</h3>\n      <p style=\"margin: 5px 0;\"><strong>Author:</strong> ${repoDetails.author.name}</p>\n      <p style=\"margin: 5px 0;\"><strong>Email:</strong> ${repoDetails.author.email}</p>\n      <p style=\"margin: 5px 0;\"><strong>Date:</strong> ${repoDetails.author.date}</p>\n      <p style=\"margin: 5px 0;\"><strong>Message:</strong> ${repoDetails.commit_message}</p>\n    </div>\n  `;\n\n  // Changed files\n  items.forEach(item => {\n    html += `\n      <section style=\"border: 1px solid #d9d9d9; margin: 10px; padding: 15px; border-radius: 8px; background-color: #ffffff; font-family: Arial, sans-serif;\">\n        <h3 style=\"margin-top: 0; color: #262626;\">📄 File: ${item.filename}</h3>\n        <p><strong>Status:</strong> <span style=\"color: #fa8c16;\">${item.status}</span></p>\n        <p><strong>SHA:</strong> <code style=\"background-color: #f5f5f5; padding: 2px 6px; border-radius: 3px;\">${item.sha}</code></p>\n        <p>\n          <strong>➕ Additions:</strong> ${item.additions}, \n          <strong>➖ Deletions:</strong> ${item.deletions}, \n          <strong>✏️ Changes:</strong> ${item.changes}\n        </p>\n        <div style=\"background-color: #f6f6f6; padding: 10px; overflow-x: auto; border-radius: 5px; font-size: 13px; line-height: 1.4; border-left: 3px solid #d9d9d9;\">\n          ${formatPatch(item.patch)}\n        </div>\n      </section>\n    `;\n  });\n\n  return [{\n    json: {\n      htmlOutput: html\n    }\n  }];\n}\n\n// Input parsing\nlet data = $input.first().json.files;\n\nlet repo_details = {\n  id: $('Github Trigger').first().json.body.repository.id,\n  name: $('Github Trigger').first().json.body.repository.name,\n  owner_name: $('Github Trigger').first().json.body.repository.owner.name,\n  repo_url: $('Github Trigger').first().json.body.repository.html_url,\n  author: $input.first().json.commit.author,\n  commit_message: $('Github Trigger').first().json.body.commits[0].message\n};\n\nreturn renderResponse(data, repo_details);\n"
      },
      "typeVersion": 2
    },
    {
      "id": "d790ebbb-64f2-4c1d-99d4-d44b778d7e58",
      "name": "Parser",
      "type": "n8n-nodes-base.set",
      "position": [
        -280,
        -180
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1fdc93f7-ebe7-4dd0-b3ec-caa079543c9e",
              "name": "body.repository.id",
              "type": "number",
              "value": "={{ $json.body.repository.id }}"
            },
            {
              "id": "1ccd2e84-f8a4-4629-9a93-c345beb6c376",
              "name": "body.repository.name",
              "type": "string",
              "value": "={{ $json.body.repository.name }}"
            },
            {
              "id": "73464699-e678-4852-a612-a82daa02f474",
              "name": "body.repository.owner.name",
              "type": "string",
              "value": "={{ $json.body.repository.owner.name }}"
            },
            {
              "id": "4178463f-5bc1-4230-b152-908af1c3e8e9",
              "name": "body.head_commit.id",
              "type": "string",
              "value": "={{ $json.body.head_commit.id }}"
            },
            {
              "id": "f47b9183-9c87-40f0-bdaa-ad5c367c552b",
              "name": "body.head_commit.added",
              "type": "array",
              "value": "={{ $json.body.head_commit.added }}"
            },
            {
              "id": "e471d686-decd-40ea-9a23-f3afe5e1f184",
              "name": "body.head_commit.removed",
              "type": "array",
              "value": "={{ $json.body.head_commit.removed }}"
            },
            {
              "id": "21c2ddf1-b38d-40e3-a899-8e761a096ff1",
              "name": "body.head_commit.modified",
              "type": "array",
              "value": "={{ $json.body.head_commit.modified }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "2000b06f-2065-43df-94dc-8bcc6d38f600",
      "name": "출력 파서",
      "type": "n8n-nodes-base.code",
      "position": [
        756,
        -180
      ],
      "parameters": {
        "jsCode": "let output = $('Code').first().json.htmlOutput + $input.first().json.output;\nreturn [\n  {\n    json: {\n      html: output\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "d1d76c26-9572-47d0-8d5e-dda2b178dfdf",
      "name": "AI 에이전트",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        380,
        -180
      ],
      "parameters": {
        "text": "=You are an AI code reviewer. You are given an HTML snippet that includes commit metadata and code diffs.\n\nYour job is to analyze only the code changes in the diff and return a single HTML block with your observations.\n\nYour review must include:\n✅ Functional issues (e.g., syntax or logic errors)\n\n✅ Style or readability issues (e.g., naming, formatting)\n\n✅ Suggestions or improvements based on the type of file (e.g., HTML, JS, Python, etc.)\n\n✅ Spelling or grammar errors in comments, strings, and documentation\n\n✅ Security issues (e.g., unsanitized inputs, use of eval, secrets in code)\n\nFormat your response as ONE of the following HTML blocks:\n🟨 If any suggestions, improvements, or security concerns are found:\n\n<div style=\"margin: 20px 10px; padding: 15px; background-color: #fffbe6; border-left: 5px solid #faad14; font-family: Arial, sans-serif;\">\n  <h3 style=\"margin-top: 0; color: #d48806;\">🛠️ AI Code Review Summary</h3>\n  <ul style=\"margin: 0; padding-left: 20px;\">\n    <li><strong>Summary:</strong> [Brief summary of what changed]</li>\n    <li><strong>Suggestion:</strong> [What can be improved: spelling, logic, naming, formatting, etc.]</li>\n    <li><strong>Security Review:</strong> [Any security concern, or write “No security issues found”]</li>\n  </ul>\n</div>\n✅ If there are no issues at all, return only this block:\n\n<div style=\"margin: 20px 10px; padding: 15px; background-color: #f6ffed; border-left: 5px solid #52c41a; font-family: Arial, sans-serif;\">\n  <h3 style=\"margin-top: 0; color: #389e0d;\">✅ Code Review Result</h3>\n  <p style=\"margin: 0;\">No issues detected in the recent commit. All changes look good! 🎉</p>\n</div>\n⚠️ Important:\n\nDo not return any other explanation or markdown outside the single HTML block.\n\nUse context from the diff (file type, filenames, comments, content).\n\nMake sure the output is clean, actionable, and visually consistent.\n\n {{ $json.htmlOutput }}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "aa0d60c3-de08-4ede-8e83-a41fe5917489",
      "name": "심플 메모리",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        528,
        40
      ],
      "parameters": {
        "sessionKey": "dsfklasdyerbmnabfdaghkjhgashgkjhgaksjdhfgaoaiwrqwkbclayga",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "c17c6c0d-ca9c-428e-a094-f4552d32e8d0",
      "name": "Groq Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        408,
        40
      ],
      "parameters": {
        "model": "llama-3.1-8b-instant",
        "options": {}
      },
      "credentials": {
        "groqApi": {
          "id": "HJl5cdJzjhf727zW",
          "name": "Groq - Akhil"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "34f15fd6-354d-4890-a6a7-dfe5e5b9ab07",
      "name": "End Workflow",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1196,
        -180
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "151e34ff-2dfe-4421-9311-aa5155195d29",
      "name": "메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        -300
      ],
      "parameters": {
        "height": 120,
        "content": "## 👨‍💻 Github Trigger \ncustomize the fields inside the github trigger to listen to specific project"
      },
      "typeVersion": 1
    },
    {
      "id": "5bc8c0fe-b21a-47d9-a346-01ec2bd74c74",
      "name": "메모1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        360,
        -300
      ],
      "parameters": {
        "width": 280,
        "height": 100,
        "content": "## Customize AI Agent\nUpdate the prompt to focus on different review aspects."
      },
      "typeVersion": 1
    },
    {
      "id": "86c25475-ccd9-4556-ba60-e4647b0df269",
      "name": "메모2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        160
      ],
      "parameters": {
        "height": 100,
        "content": "## Customize LLM\nSwap for other supported LLMs if needed."
      },
      "typeVersion": 1
    },
    {
      "id": "ad3cbae3-a1bc-4bad-a546-b0c100a8bc78",
      "name": "메모3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        940,
        -20
      ],
      "parameters": {
        "height": 100,
        "content": "## Email Update\nChange recipient or email styling."
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a2afa7ad-f3d6-4c33-bdda-f79a36a327e0": {
      "main": [
        [
          {
            "node": "34f15fd6-354d-4890-a6a7-dfe5e5b9ab07",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d790ebbb-64f2-4c1d-99d4-d44b778d7e58": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Output Parser",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Output Parser": {
      "main": [
        [
          {
            "node": "a2afa7ad-f3d6-4c33-bdda-f79a36a327e0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "7f2ffaa3-9829-44fb-980b-373c09b8eaab": {
      "main": [
        [
          {
            "node": "d790ebbb-64f2-4c1d-99d4-d44b778d7e58",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c17c6c0d-ca9c-428e-a094-f4552d32e8d0": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

중급 - 엔지니어링, 인공지능

유료인가요?

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

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

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
Akhil Varma Gadiraju

Akhil Varma Gadiraju

@akhilv7

I'm a full stack developer passionate about building intelligent, scalable solutions that automate workflows and enhance productivity. I love working at the intersection of AI, APIs, and automation—using tools like n8n to streamline processes, integrate data, and unlock smarter decision-making. Whether it's crafting custom backend services or designing intuitive frontends, I’m always exploring ways to build more with less manual effort.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34