n8n을 활용한 간단한 Agent 만들기 : 2편

소개

지난 글에선 n8n을 작업하기 위한 환경 세팅에 집중했다면, 이번엔 본격적으로 n8n을 이용한 워크플로우 작성에 집중하고자 합니다.

진행 방법

이번 n8n 워크플로우는 다음과 같이 작성했습니다.

전체 흐름은 실시간으로 구글메일/노션페이지를 트리거로 받아서 수시한 데이터를 정제한 뒤, AI로 보내서 요약하고, 그 내용을 다시 개인 메일로 보내고, 노션의 다른 페이지에 자동 업로드하는 순서로 진행됩니다.

각 노드에 대해 소개드리며 전체 흐름을 설명드리겠습니다.

  1. Gmail Trigger 노드로 메일이 왔을 때, Gmail에서 INBOX에 있는 메일을 가져오기

    메일 태그 지깅 프로세스의 다른 단계를 보여주는 다이어그램

    Gmail trigger 노드를 사용하면 지정한 시간마다, 메일함을 확인하고, 메일을 가져올 수 있습니다.

    Gmail 인증 관련, OAuth 처리는이전 글에서 작업한 방식(도메인 생성+셀프호스팅)으로 해결할 수 있었습니다.


    🤖 필터에서 INBOX나 특정 메일 설정을 하지 않으면, 메일발송함도 Trigger로 잡는다는 사실 주의하세요!

    위처럼 MessageID를 받아오는 형식으로 메일의 제목과 내용을 가져올 수 있습니다.

    WordPress에서 코드 편집기의 스크린 샷

    수집한 데이터는 Code 노드에서 위처럼 코드를 작성한 뒤, textashtml의 정보를 title-texts-timeline 포맷을 갖도록 조정해주었습니다.

    🤖 코드는 GPT 4o를 따로 사용하여 생성했습니다.


  2. Notion DB에 페이지가 생성되거나 업데이트 되었을 때, Notion Trigger페이지 내용을 가져오기

    Notion으로 작업하는 일상이다보니 이 노드를 추가하게 되었습니다.

    Notion Trigger는 Notion DB에 특정 이벤트가 발생했을 때 액션을 취할 수 있는 기능이 있었습니다. 그래서 Notion Trigger1에서는 <내가 생성한 Notion DB>에 있는 페이지가 갱신되었을 때, 그리고 Notion Trigger2에서는 페이지가 생성되었을 때를 지정한 시간간격마다 확인할 수 있습니다.


    개념의 스크린 샷 1 설정을 트리거합니다


    Notion 노드에서는 각 Notion Trigger로 가져온 콘텐츠 id를 이전의 Gamil 노드에서 작업한 것처럼 동일하게 진행합니다.

    사용자 계정 설정을 보여주는 화면
    사용자 계정 설정의 스크린 샷

    동일해보이지만 두 Notion 노드는 조금 차이가 있는데, Notion1에서는 Operation을 "Get"으로 했고, Notion2에서는 "Get Child Blocks"로 수행할 작업을 다르게 둔 것인데요.

    Notion에서 id로 페이지 정보를 가져올 때 제목과 내용(블록)을 같이 가져오기 어려워서 위처럼 노드를 나눈 뒤, 각자 내용을 가져오도록 했습니다.
    "Get"에서는 페이지 제목을, "Get child blocks"에서는 페이지 글(노션은 글이 블록으로 나뉘어져있기 때문에 모든 블록을 가져오지 않으면 일부 글만 가져오게 됩니다.)을 가져오도록 했습니다.

    Merge 플러그인의 설정 페이지의 스크린 샷

    그리고 두 노드의 내용을 Merge 노드로 병합하여, 제목과 블록들이 다음 노드로 전달될 수 있도록 하였습니다.
    옵션으로 Combine 모드에서 All Possible Combinations 기능을 사용하면 서로 다른 노드들이 결합될 수 있는 모든 경우의 수를 고려해서 병합해 줄 수 있었습니다.

    Gmail때와 비슷하게 이번에도 Code노드를 이용해, Notion노드로 가져와 Merge한 데이터를 title-texts-timeline 포맷을 갖도록 하였습니다.

  3. AI노드에서 "내용"을 요약

    AI에게 어떤 정보를 어떻게 처리할 지 아래와 같이 프롬프트로 작성하였습니다.
    프롬프트 내용은 입력받은 text를 잘 요약해달라는 내용으로 작성했습니다. 그리고 답변은 반드시 한국어로 하도록 지시하여, 입력받은 내용이 다른 나라 언어라도 한국어로 요약하도록 하였습니다.

    🤖 챗봇형식이 아닌, 고정된 포맷으로 답변을 해야하기 때문에 output을 어떻게 작성해야하는지 포맷예시를 추가하였고, parser subnode를 추가해서 좀 더 일관된 포맷의 답변을 할 수 있도록 하였습니다.

    모델은 현재 무료로 사용할 수 있는 Gemini 2.0 flash exp를 사용했습니다.

    🤖 다른 노드에서 작업한 것과 마찬가지로 API를 가져와 사용해야 하기 때문에 API를 발급받아 gemini 모델 노드에 등록한 뒤 사용합니다. 그리고 Host 주소를 추가해야 사용할 수 있었습니다. (n8n 공식문서 Google Gemini(PaLM) credentials | n8n Docs 참조)

  4. Gmail 및 Notion 요약 DB에 요약내용 보내기

    이전 노드에서 AI가 요약한 내용을 특정 메일주소로 보내는 것, 그리고 Notion노드로 지정한 DB에 페이지를 작성하도록 했습니다.

    Gmail 노드에서 Resource는 Message, Opertaion은 Send로 하여 메시지를 보내도록 하고, 누구에게(To) 어떤 제목으로(Subject), 어떤 메시지를 보낼지(Message) 설정하였습니다.

Notion노드에서 DB에 업로드를 하기 위해서 Resource는 Database page, Operation은 Create, 그리고 DB를 지정한 뒤 어떤 속성을 작성할지 설정했습니다.

요약 DB 요약 DB 요약 DB 요약 DB 요약 DB 요약 DB 요약 DB 요약

위처럼 데일리 로그 DB에 작성한 내용들이 워크플로우를 거쳐 Summary DB에 요약된 것을 확인할 수 있습니다.

결과와 배운 점

추후 월간 목표에 대한 비교 및 평가를 하기 위해서는 VectorDB가 필요해보이고, 평가를 하는 Agent를 추가해야겠다는 생각이 들었습니다. 아직까지는 일일 요약만 하고 있지만 주가 요약, 월간 요약 등을 진행하여 목표에 맞게 "나"의 일상이 진행되고 있는지, 그리고 거기서 오는 어려움은 없는지 기록/알림해주는 기능을 구현하도록 해볼 예정입니다.
얼마나 걸릴 지는 모르지만 좀 더 사용할만한 기능을 가지고 돌아오겠습니다🖐🖐🖐

4
1개의 답글

👉 이 게시글도 읽어보세요