Develiper
Develiper
🌿 뉴비 파트너
📚 학습반장

[Dify AI랑 탱자탱자 놀기 3탄] - Dify Knowledge 구축에 애를 먹은 Big 삽질기 🧑‍🌾 (feat. 처음 해보는 크롤링, Firecrawl)

Dify 탱자탱자 3탄은 Big 삽질에 대한 기록입니다.

Dify AI가 어떤 애인지 1, 2탄에서 체험해봤으니
이제 본격적으로 RAG AI Agent 내지는 챗봇을 만들어보기로 합니다. 🧑‍🔧

그 전에 좀 더 지식을 쌓고 적응을 하기 위해서 Dify AI 공식 tutorial 영상들을 정주행합니다.

https://www.youtube.com/@dify_ai

인내심을 가지고 정주행하니 그래도 좀 더 눈이 떠지는 느낌입니다.

그러면 실제로 해봐야 실력이 늘겠죠?

Go Go!!

목표: n8n docs를 Knowledge로 구축하여
이를 바탕으로 대답하는 n8n 사용자 도우미 봇을 만들자!

(n8n 사용 시, 초보자라 무엇을 어떻게 해야 하는지 몰라서
매번 n8n docs(영어로 되어 있어서 읽기도 힘듬)와
Perplexity AI에게 캡쳐 떠서 물어보던 어려움이 서러워서(?)
챗봇을 만들어서 간단하게 물어보고 도움을 받으면 좋겠다라고 생각하였음)

n8n docs를 둘러보니 파일 형태로 제공하지는 않아서
Perplexity에게 물어보니

한국어 페이지의 스크린 샷

라고 하여, 2022년 기준 문서는 너무 old하니 어떡하지? 하다가

Dify 에서는 크롤링한 문서들로도 Knowledge를 구축할 수 있다는 점에 주목하여

난생 처음으로 크롤링을 해보기로 합니다.
(4탄에 나오지만 Perplexity를 믿고 n8n docs가 문서로 실제로 있는지,
그리고 언제 시점으로 존재하는지 확인하지 않았던 것이 패착이었습니다.)

Dify에서 지식 구축 시, 웹사이트 동기화라는 것이 있습니다.
이것이 크롤링하는 것입니다.

한국어 웹 사이트의 스크린 샷

Perplexity에게 물어보고 제공자 세 개 중에서
Firecrawl을 쓰는 것이 제일 좋다라고 추천받아서

제공자

특징 및 장점

참고사항

Firecrawl

- Dify 공식 블로그와 가이드에서 대표적으로 추천
- 500페이지 무료 크레딧 제공
- 별도 설정 없이 빠르고 안정적으로 크롤링
- 하위 페이지, 깊이, 경로 등 세부 옵션 제공

Dify와의 통합이 매우 원활함

Jina Reader

- 유사한 기능 제공
- API Key 필요
- 세부 옵션 제공

Firecrawl과 큰 차이 없음, Firecrawl이 더 많이 활용됨

WaterCrawl

- 개발자 친화적, 플러그인 설치 필요
- 세부 추출 옵션 다양

일반 사용자에겐 다소 복잡할 수 있음


Firecrawl에 처음으로 가입을 합니다. 그리고 제공하는 API를 받습니다.

받은 API를 Dify에서 Firecrawl 설정에 집어넣고 사용을 위한 준비를 마칩니다.

n8n docs 주소를 넣어주고 '달리다'를 눌러주면 크롤링을 시작합니다.

그 전에 옵션들을 설정해주어야 합니다.

옵션명

의미

추천 설정 (n8n docs 기준)

하위 페이지 크롤링

체크 시, 입력한 URL(예: https://docs.n8n.io/)의 하위 경로(예: /getting-started/, /workflows/)까지 자동으로 따라가며 콘텐츠를 수집합니다.

ON(체크)
n8n 공식 문서는 대부분 하위 경로에 실제 내용이 있으므로 반드시 활성화하세요.

한계

크롤링할 최대 페이지 수(숫자). 예를 들어 10으로 설정하면, 최대 10개의 문서 페이지만 수집합니다.

30~100
n8n 전체 문서를 모두 수집하려면 50~100 이상으로 넉넉히 설정하세요. (초기 테스트는 10~20으로 시작 가능)

최대 수심

크롤러가 몇 단계까지 하위 경로를 따라갈지(Depth).
1: 루트만, 2: 루트+1단계 하위, 3: 2단계 하위까지.

3~4
n8n 문서 구조상 3~4면 대부분의 실질적 내용을 포함할 수 있습니다. 너무 높이면 불필요한 페이지까지 크롤링될 수 있음.

경로 제외

제외할 경로 패턴(예: blog/, /about/). 입력한 경로는 크롤링하지 않습니다.

blog/, /about/, /legal/ 등*
n8n 공식 문서 외에 블로그, 소개, 법적 고지 등은 제외 추천.

경로만 포함

이 패턴에 해당하는 경로만 크롤링합니다. 입력하지 않으면 모든 하위 경로 포함.

/getting-started/, /workflows/
특정 섹션만 수집하고 싶을 때 사용. 전체 문서라면 비워두세요.

기본 콘텐츠만 추출

체크 시, 본문(메인 콘텐츠)만 추출. 헤더, 탐색, 바닥글 등은 제외.

ON(체크)
AI 지식베이스로 쓸 때 불필요한 정보가 줄어듭니다.

뭔 말인지 뜯어보고 고민해보고 하다가 대강 알아먹습니다.
그런데 고민이 생깁니다.

한계는 몇 으로 설정하지? 100개 안에 크롤링 문서 개수가
다 들어오려나? 넘어가면? 모자라면?

모자라는 것은 걱정하지 않아도 되는군요.

그러면 넘는 것은?

누락된다고?

그렇다면 n8n docs를 크롤링하면 대략 몇 개의 문서 개수가 생길지 알아야
한계 값을 정할 수 있잖아?

어떻게 알지?

Perplexity에게 물어보니 Firecrawl의 map_url 기능이라는 것이 있다고 해서 따라합니다.
Python으로 코딩도 해야 하고 Run도 해야 하나
최근에 Python 코딩 기초 배우고 있어서 어렵지 않게 따라합니다.

from firecrawl import FirecrawlApp

app = FirecrawlApp(api_key="fc-여기에_네_API_키를_넣어줘")

map_result = app.map_url('https://docs.n8n.io')

# 링크 개수 세기!

link_count = len(map_result["links"])

print("주소(링크) 개수는:", link_count, "개")

뚱땅뚱땅거리다가 겨우 알아냅니다.

총 링크 개수가 1241 이라고 나오네요. 헉! 이렇게 많아? 어쩌지?

확인해보니

한국 웹 사이트의 스크린 샷

음... 그러면 한 번 해볼만 합니다.

개수는 400으로 설정하고

제외할 것들을 최대한 넣어서 제외해주고

[

"/blog/*",

"/about/*",

"/legal/*",

"/changelog/*",

"/community/*",

"/pricing/*",

"/team/*",

"/jobs/*",

"/contact/*",

"/press/*",

"/privacy/*",

"/terms/*",

"/cookies/*",

"/search/*",

"/assets/*",

"/static/*",

"/media/*",

"/images/*",

"/img/*",

"/icons/*",

"/fonts/*",

"/api/*",

"/*.png",

"/*.jpg",

"/*.jpeg",

"/*.gif",

"/*.svg",

"/*.webp",

"/*.ico",

"/*.pdf",

"/*.zip",

"/*.tar",

"/*.gz",

"/*.mp4",

"/*.mp3",

"/*.mov",

"/*.avi",

"/*.js",

"/*.css",

"/*.json",

"/*.xml",

"/*.csv",

"/*.txt"

]

'달리다'를 눌러서 말 달려봅니다. 🐎 🐴 🦄 🦓

222개로 크롤링 문서 개수가 나오네요. 될 것 같습니다.

크롤링 완료가 되니 228개로 약간 문서 개수가 늘었습니다.

오차도 생기는군요

1064초 걸렸으니 약 16분 정도 걸린 듯 합니다.

1단계를 완료하고, 2단계로 넘어가서 여러 설정들을 해 줍니다.

그리고 나서 3단계로 넘어가려니

에러 메시지가 뜹니다.

한 번에 올리는 개수는 50개를 넘어갈 수 없다는 겁니다.

228개니 당연히 못 넘어갑니다.

여러 번 시도를 해 봤지만 매번 실패해서

perplexity에게 자문을 구하니

50개씩 나누어서 올리랍니다.

50개씩 쪼개기 해서 올리려고 시도하나

다양한 에러가 발생합니다.

  1. 50개 올려도 작동이 멈추거나, 몇 개씩 문서를 제대로 전처리 및 후속 작업 진행을 못합니다.

  2. 50개 올리려고 해도 순서대로 예쁘게 크롤링을 하지 않습니다. 그래서 51번 째 부터 올리려 해도 순서가 랜덤으로 크롤링 되어서 일일이 확인해야 하는데 노가다일 뿐더러 오류 가능성이 너무 높아서 포기합니다.

  3. 다양한 에러의 종합 선물 폭탄을 맞고 거의 4시간을 헛짓거리를 반복합니다.

결국 포기합니다.

그리고 나서 스터디장님에게 SOS를 칩니다.

to be continued......
이어서 4탄에서

배운 점

  • 크롤링을 하는 법과 크롤링 관련 용어들

  • Firecrawl 기본 사용법

  • Dify 에서 크롤링으로 Knowledge 구축하는 법

  • Dify의 지식 구축 관련한 한계점들

6
4개의 답글

👉 이 게시글도 읽어보세요