n8n 찍먹으로 나만의 AI Agent 구축하기

choonsikmom·3일 전
0

NLP/LLMs

목록 보기
9/9
post-thumbnail

n8n 소개

[Github] [Docs]

n8n은 노코드/로우코드 기반의 워크플로우 자동화 플랫폼이다. 다양한 앱과 AI 모델들을 연결해서 AI Agent를 만들 수 있다.

Github 공식 사이트를 들어가보면 위와 같은 n8n Web UI 사진을 볼 수 있는데, 이렇게 코딩 없이도 워크플로우를 설계하고, 여러 노드들을 연결해서 실행하는 것 만으로도 Agent를 간편히 구현해 볼 수 있다.


n8n 설치 및 실행 (with Docker)

공식 깃허브에서는 node.js가 설치되어 있을 때, npx로 즉시 실행할 수 있다고 한다.

하지만 본 포스팅에서는 Docker 실행을 기준으로 작성한다. (도커 사전 설치 필요!)

# docker run으로 빠르게 실행 
docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

위 공식 깃허브의 커맨드를 따르면 빠르게 실행할 수 있다. 도커 컨테이너를 띄우고 n8n 서버 http://localhost:5678/ 로 접속하면 된다.

하지만, 깔끔한 관리를 위해 전용 폴더에서 docker-compose.yml을 통해 실행해보자.

mkdir -p ~/n8n-agent
cd ~/n8n-agent

docker-compose.yml 파일을 생성하고 아래 내용을 삽입한다.

version: '3.8'
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "5678:5678"  # 웹 접속 포트
    environment:
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - NODE_ENV=production
      - WEBHOOK_URL=http://localhost:5678/
      - GENERIC_TIMEZONE=Asia/Seoul 
    volumes:
      - n8n_data:/home/node/.n8n # 
volumes:
  n8n_data:

해당 위치에서 아래 명령어로 실행

docker compose up -d
# - `d`: 백그라운드 실행 

컨테이너 작동 여부는 docker ps 명령어를 통해 확인할 수 있다.

# docker 관련 명령어
docker compose pull    # 도커 허브에서 최신 이미지 다운로드
docker compose down    # 기존 컨테이너 중지
docker compose up -d   # 새 이미지 재시작

n8n 기반 pdf 파일 RAG chatbot Agent 만들기

http://localhost:5678/ 사이트에 들어가보면 이제 이런 ui 화면이 뜬다. 처음 입장이라면 workflow는 비어 있을 것이다.

우측 상단에 "create workflow" 버튼을 눌러 아래 화면으로 넘어가면, 코드 없이 나만의 agent 구축을 시작할 수 있다!

아무것도 없는 빈 base 화면에서 시작해서, pdf 파일을 RAG 하여 질의 응답 하는 간단한 챗봇을 만들어 보기로 했다. 노드들을 이것저것 추가하여 연결해 보았다.

위와 같이 나만의 워크플로우를 완성하고 execute workflow를 누르면, 워크플로우가 순서대로 실행되고 하단에 채팅창을 통해 agent와 대화해볼 수 있다.

각 노드는 더블 클릭 하면 상세한 옵션이나 파라미터 조정이 가능하다.

Credentials 입력하기

에이전트 구축에 앞서, credentials 탭에서 openai API KEY를 등록해줘야 한다. (타사 API Key를 쓸 경우, 해당 API KEY를 사전에 입력해둘 것)

도큐먼트 주입

  • When clicking Execute Workflow (manual-trigger)
    역할: 수동으로 워크플로우를 시작하는 버튼
    설명: 문서를 처음 로드할 때 한 번 실행 (RAG 대상 문서를 로드하기 위함)

  • Read Binary File
    역할: 설정 경로의 파일을 읽어옴
    설명: 설정된 경로(예:/home/node/paper.pdf)에 있는 파일을 n8n으로 가져온다. 해당 경로는 Docker 컨테이너 내부의 경로여야 한다.

  • In-Memory Vector Store (Insert)
    역할: 검색을 위해 읽어온 문서를 벡터 데이터베이스에 저장
    설명: 문서를 임베딩 벡터 형태로 변환해서 메모리에 쌓아둔다. RAG를 하기 위해서는 채팅 전에 먼저 실행 시켜야 한다.

  • Default Data Loader : 이전 노드 출력 데이터를 자동으로 Vector Store에 입력할 수 있는 형식으로 변환
  • Recursive Character Text Splitter (text-splitter): PDF 내용을 적절한 크기의 Chunk로 자름
  • OpenAI Embeddings: 청킹된 텍스트를 벡터로 변환

채팅 주입

  • When chat message received
    역할: 사용자의 채팅 메시지를 입력 받음
    설명: 채팅 인터페이스에서 엔터를 치면 여기서부터 시작된다.

  • AI Agent
    역할: 실질적인 agent 역할을 담당하는 노드
    설명: 사용자의 질문을 분석하고, 필요하면 도구(Vector Store Tool)를 사용해서 정보를 찾은 뒤, 최종 답변을 생성

  • OpenAI Chat Model : 실제 대화 능력을 가진 언어 모델(GPT api를 사용). api 버전을 선택하여 사용할 수 있다.

  • Vector Store Tool
    역할: Agent가 벡터 저장소를 도구처럼 사용할 수 있게 해줍니다.
    설명: Agent에게 부여하는 검색 도구입니다. Agent가 PDF 관련 질문일 경우 이 도구를 사용하도록 판단하게 한다.

  • In-Memory Vector Store (Retrieve)
    역할: 실제 저장소에서 데이터를 검색(Retrieve)
    설명: Vector Store Tool에서 요청이 들어오면, 벡터 스토어에 저장해둔 데이터 중에서 가장 비슷한 내용을 찾아서 돌려준다.

  • Simple Memory
    역할: 대화의 맥락을 기억하도록 돕는 단기 기억 장치
    설명: Window Buffer 수 만큼의 대화 쌍을 기억하게 할 수 있다.

워크플로우 실행 및 채팅 해보기

워크플로우를 실행하고 채팅을 치면 이제 실행 로그와 아웃풋을 볼 수 있는데, 처음에는 멀티턴이 안돼서 왜 그런가 했더니 memory를 넣지 않아서였다. AI Agent에 Simple memory를 삽입 해주니, 이전 대화 맥락을 이해할 수 있게 되었다.

export

이렇게 구현한 워크플로우는 save로 저장할 수 있지만, json 형식으로 export해서 다른 n8n 서버에 사용할 수도 있다. (Save 버튼 우측에 ... 에서 Download 를 누르면 json 형식으로 export된다.)

이렇게 간단하게 코딩 없이 AI Agent 구축할 수 있다는 게 재밌고 흥미로웠다. 찍먹만 해봤지만 시간이 된다면 n8n을 통해 좀 더 똑똑한 에이전트 구현을 해보고 싶다.

profile
춘식이랑 함께하는 개발일지.. 그런데 이제 먼작귀를 곁들인

0개의 댓글