노코드캣님의 n8n 영상을 보고 따라해보았다.
n8n은 강력하고 유연한 워크플로우 자동화 도구다.
n8n ai starter kit github
에가서 자신의 환경에 맞는 방식으로 clone
을 받는다.
$ git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git
ollama까지 한번에 컨테이너에 올리는게 아닌 로컬의 ollama를 사용할 것이기 때문에 docker-compse.yml
를 다음과 같이 수정한다.
(ollama도 한번에 하려면 그대로 해도 무관하다.)
volumes:
n8n_storage:
postgres_storage:
ollama_storage:
qdrant_storage:
networks:
demo:
x-n8n: &service-n8n
image: n8nio/n8n:latest
networks: ['demo']
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_PERSONALIZATION_ENABLED=false
- N8N_ENCRYPTION_KEY
- N8N_USER_MANAGEMENT_JWT_SECRET
links:
- postgres
services:
postgres:
image: postgres:16-alpine
networks: ['demo']
restart: unless-stopped
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
volumes:
- postgres_storage:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
n8n-import:
<<: *service-n8n
container_name: n8n-import
entrypoint: /bin/sh
command:
- "-c"
- "n8n import:credentials --separate --input=/backup/credentials && n8n import:workflow --separate --input=/backup/workflows"
volumes:
- ./n8n/backup:/backup
depends_on:
postgres:
condition: service_healthy
n8n:
<<: *service-n8n
container_name: n8n
extra_hosts:
- "host.docker.internal:host-gateway"
restart: unless-stopped
ports:
- 5678:5678
volumes:
- n8n_storage:/home/node/.n8n
- ./n8n/backup:/backup
- ./shared:/data/shared
depends_on:
postgres:
condition: service_healthy
n8n-import:
condition: service_completed_successfully
qdrant:
image: qdrant/qdrant
container_name: qdrant
networks: ['demo']
restart: unless-stopped
ports:
- 6333:6333
volumes:
- qdrant_storage:/qdrant/storage
ollama 컨테이너에 대한 내용을 제거하고 컨테이너가 host에 접근할 수 있게 했다.
docker가 설치되어있지만 docker compose
명령어가 없다면 docker 버전을 확인해보자
$ docker compose up -d
접속 후 대충 사용할 계정을 생성하고 로그인(귀찮게 비밀번호 검증도 있음)
$ curl http://localhost:5678/webhook-test/youtube\?url\=https://www.youtube.com/watch\?v\=AmwEIt0vhxA
요청을 보내면 url의 영상을 읽어서 요약/관련 링크를 최대 3개 알려준다.
응답은 다음과 같다.
{
"response": {
"text": "'팩토리 패턴'(Factory Pattern)란 프로그래밍에서 특정 오브젝트를 생성하는 공장 클래스를 의미하며, 클라이언트가 직접 오브젝트의 복잡한 생성 과정을 관리하지 않고 팩토리가 이를 관리하는 방식입니다. 이 패턴은 고양이와 강아지와 같은 오브젝트를 클라이언트에게 제공할 때 유용합니다."
},
"output": [
{
"title": "Factory Method Pattern – Design Patterns (ep 4)",
"link": "https://www.youtube.com/watch?v=EcFVTgRHJLM"
},
{
"title": "Factory Method Design Pattern | C#",
"link": "https://www.youtube.com/watch?v=5RrR6MaimT0"
},
{
"title": "Factory Design Pattern in Java Explained in 3 Minutes",
"link": "https://www.youtube.com/watch?v=a7U4fj_kV1U"
}
]
}
로컬의 ollama 모델을 사용하려면 docker-compose에 설정해준 host.docker.internal
에 요청을 보내게 해야한다.
이렇게해야 n8n 컨테이너
가 호스트에서 실행중인 ollama에 요청을 보낼 수 있다.
테스트를 하다가 두 가지 문제가 발생했다.
llama3.1 8B
모델을 사용했는대 대규모 모델에 비해 파라미터 수가 작다. 그래서 한번에 처리가능한 토큰수가 현저히 낮다.장기 의존성 문제(망각)
가 발생하여 너무 긴 컨텍스트의 경우 원하는 결과를 얻지 못했다.위 문제의 보완하기 위해 일부는 OpenAI API를 사용했다.
영상을 따라하고 이걸 API 처럼 사용하고 싶어서 webhook 노드를 적용해봤다.
url에 유튜브영상 주소를 보내면 후속 작업을 실행 후 응답을 준다.
Response Body를 다르게 작성하고 싶었지만 잘 안돼서 통짜로 응답을 보내게 했다.
이외는 영상의 내용과 동일하다.
지금까지 AI를 어떻게 활용하면 좋을지를 잘 몰랐는대
이번에 방향성을 알게된 것 같다.
AI 외에도 n8n이란 멋진 서비스를 알게돼서 좋았다.
온보딩 자동화, 프로세스의 시각화 등등
미니피씨에 ollama 버전으로 n8n 재설치할려고 했는데 m1 맥북프로에도 성능이 부족하다고 하니 그냥 마음 접어야 겠네요! ㅜ,.ㅜ