n8n으로 Qdrant 워크플로우 자동화하기

n8n으로 Qdrant 워크플로우 자동화하기 (tutorials-build-essentials-qdrant-n8n)

시간: 45분 수준: 중급

이 튜토리얼은 Qdrant를 n8n 로우코드 자동화 플랫폼과 결합해 기본적인 RAG(Retrieval-Augmented Generation)를 넘어서는 유스 케이스를 다루는 방법을 보여줘요. 벡터 검색을 추천과 비정형 빅데이터 분석에 사용하는 방법을 배울 거예요.

이 튜토리얼이 만들어진 이후로 n8n용 공식 Qdrant 노드가 출시되었어요. 이 노드는 워크플로우를 단순화하고, 아래 예시에서 쓰는 HTTP 요청 노드를 대체해요. 이에 대한 짧은 비디오 소개를 시청해보세요.

n8n에서 Qdrant 설정하기

n8n에서 Qdrant를 사용하려면 credentials 탭에서 Qdrant 인스턴스 자격 증명을 제공해야 해요. 목록에서 QdrantApi를 선택하세요.

Qdrant Cloud

Qdrant Cloud를 n8n에 연결하려면:

  1. Cloud Dashboard를 열고 클러스터를 선택해요.
  2. Cluster Details에서 Endpoint 주소를 복사해요. 이것이 n8n에서 Qdrant URL로 사용돼요.
  3. API Keys 탭으로 이동해 API 키를 복사해요. 이것이 n8n에서 API Key가 돼요.

단계별 안내는 이 비디오 가이드를 참고하세요.

로컬 모드

완전히 로컬로 실험 중심 설정을 원한다면, 유용한 옵션이 n8n의 Self-hosted AI Starter Kit이에요. 로컬 AI & 로우코드 개발 환경을 위한 오픈소스 Docker Compose 템플릿이죠.

이 키트에는 로컬 Qdrant 인스턴스가 포함돼요. 시작하려면:

  1. 저장소의 지침에 따라 AI Starter Kit을 설치해요.
  2. docker-compose.yml 파일의 값들을 사용해 연결 세부 정보를 채워요.
  3. docker-compose pull을 사용해 최신 Qdrant Docker 이미지로 업데이트하는 것을 잊지 마세요.

AI Starter Kit의 docker-compose.yml에 있는 기본 Qdrant 구성은 다음과 같아요:

qdrant:
  image: qdrant/qdrant
  hostname: qdrant
  container_name: qdrant
  networks: ['demo']
  restart: unless-stopped
  ports:
    - 6333:6333
  volumes:
    - qdrant_storage:/qdrant/storage

이 구성에서 n8n Qdrant 자격 증명의 Qdrant URL은 http://qdrant:6333/이에요. 로컬 Qdrant API 키를 설정하려면 YAML 파일에 다음 줄을 추가해요:

qdrant:
  ...
  volumes:
    - qdrant_storage:/qdrant/storage

  environment:
    - QDRANT_API_KEY=test

구성을 저장하고 Starter Kit을 실행한 후에는 QDRANT_API_KEY 값(예: test)을 API Key로, http://qdrant:6333/을 Qdrant URL로 사용해요.

단순 유사도 검색을 넘어서는 Qdrant + n8n

벡터 검색이 객체 간 의미론적 유사성을 판별하는 능력은 모델의 환각(hallucination)을 해결하는 데 자주 쓰이며, RAG 기반 애플리케이션의 메모리를 구동해요. 하지만 벡터 검색은 "지식 베이스" 역할을 하는 것 이상을 할 수 있어요.

벡터 공간에서 유사성과 비유사성(dissimilarity) 메트릭의 결합은 벡터 검색을 추천, 발견 검색(discovery search), 대규모 비정형 데이터 분석으로 확장해줘요.

추천 (Recommendations)

새 음악, 영화, 책, 음식을 찾을 때 우리가 정확히 원하는 것을 말로 표현하는 건 어려울 수 있어요. 대신 우리가 좋아하거나 싫어하는 예시와 비교해서 새 콘텐츠를 발견하는 데 의존하곤 하죠.

Qdrant 추천 API는 긍정·부정 예시를 앵커로 사용해 이런 발견 검색을 가능하게 만들도록 설계됐어요. 여러분의 선호도에 기반한 새롭고 관련성 높은 결과를 찾는 데 도움을 줘요.

영화 추천

홈 시네마의 밤을 상상해보세요. 해리 포터를 666번이나 봤고, 젊은 마법사들이 나오는 새 시리즈가 간절히 땡겨요. 즐겨 쓰는 스트리밍 서비스는 밀레니얼 사가의 7부작을 반복해서 추천하죠. 지친 당신은 n8n으로 에이전틱 영화 추천 도구를 만들기로 해요.

설정:

  • 데이터셋: IMDB Top 1000 Kaggle 데이터셋의 영화 설명을 사용해요.
  • 임베딩 모델: OpenAI text-embedding-3-small을 사용하되, 다른 적절한 임베딩 모델을 골라도 돼요.

워크플로우:

에이전틱 영화 추천 템플릿 워크플로우는 세 부분으로 구성돼요:

  1. 영화 데이터 업로더: Qdrant Vector Store 노드를 사용해 영화 설명을 임베딩하고 Qdrant에 업로드해요(이제는 공식 Qdrant 노드를 사용해도 돼요). 템플릿 워크플로우에서는 데이터셋을 GitHub에서 가져오지만, 예를 들어 Google Cloud Storage 노드 같은 지원되는 어떤 스토리지든 사용할 수 있어요.
  2. AI 에이전트: AI Agent 노드를 사용해 자연어 요청을 기반으로 추천 API 호출을 구성해요. LLM을 "두뇌"로 선택하고 Qdrant가 구동하는 추천 도구의 JSON 스키마를 정의해요. 이 스키마는 LLM이 여러분의 요청을 도구 입력 형식에 매핑하게 해줘요.
  3. 추천 도구: HTTP Request 노드(이제 공식 Qdrant 노드를 사용해도 됨)로 Qdrant 추천 API를 호출하는 서브워크플로우예요. 에이전트가 채팅 메시지에서 관련 있고 관련 없는 영화 설명을 추출해 도구에 전달해요. 도구는 이를 text-embedding-3-small로 임베딩하고 Qdrant 추천 API로 영화 추천을 받아 에이전트에 돌려줘요.

설정을 마치고 채팅을 열어 "해리 포터는 아니지만 마법사에 관한 것"을 물어보세요. 어떤 결과가 나오나요?

이 워크플로우를 단계별로 구축하는 자세한 안내를 원한다면 아래 비디오를 시청하세요.

이 추천 시나리오는 어떤 언어나 데이터 유형(이미지, 오디오, 비디오)에도 쉽게 적용할 수 있어요.

빅데이터 분석 (Big Data Analysis)

데이터를 항목 간 유사성·비유사성 관계를 반영하는 벡터 공간에 매핑하는 능력은 데이터 분석을 위한 다양한 수학적 도구를 제공해요.

벡터 검색 전용 솔루션은 수십억 개의 데이터 포인트를 처리하고 그 사이의 거리를 빠르게 계산하도록 설계됐어요. 클러스터링, 분류, 비유사성 샘플링, 중복 제거, 보간, 이상 탐지(anomaly detection)를 대규모로 단순화하죠.

이 벡터 검색 기능을 n8n 같은 자동화 도구와 결합하면 데이터의 시간적 변화(temporal shift)를 모니터링하고, 데이터 드리프트를 관리하며, 겉보기에 비정형적인 데이터에서 패턴을 발견할 수 있는 프로덕션 수준 솔루션을 만들 수 있어요.

실용적인 예시 하나가 백 마디 말보다 낫죠. 데이터 분석 자동화를 위해 n8n AI Agent 노드에서 사용하도록 설계된 Qdrant 기반 이상 탐지 및 분류 도구를 살펴볼게요.

흥미를 더하기 위해 이번에는 이미지 데이터에 집중할게요.

이상 탐지 도구 (Anomaly Detection Tool)

"이상(anomaly)"이라는 정의 하나는 데이터 포인트의 벡터 표현을 2D 공간에 투영하면 직관적으로 떠오르는데, Qdrant webUI가 이 기능을 제공해요.

어느 클러스터에도 속하지 않는 포인트는 이상일 가능성이 더 높아요.

이 직관을 바탕으로 이상 탐지 도구를 만드는 레시피가 나와요. 농작물의 이상 탐지로 시연해볼게요. Qdrant는 다음에 사용돼요:

  • 벡터화된 이미지를 저장한다.
  • 각 작물 클러스터의 "중심"(대표)을 식별한다.
  • 각 클러스터의 경계를 정의한다.
  • 새 이미지가 이 경계 안에 들어오는지 확인한다. 어떤 클러스터에도 맞지 않으면 이상으로 플래그된다. 또는 특정 클러스터에 이상인지 확인할 수도 있다.

설정:

  • 데이터셋: Agricultural Crops Image Classification 데이터셋을 사용해요.
  • 임베딩 모델: Voyage AI 멀티모달 임베딩 모델을 사용해요. 이미지와 텍스트 데이터를 공유 벡터 공간에 투영할 수 있어요.

1. Qdrant에 이미지 업로드

Qdrant Vector Store 노드는 사전 정의된 목록에 없는 임베딩 모델(Voyage AI 포함)을 지원하지 않으므로, HTTP Request 노드의 직접 API 호출로 이미지를 임베딩해 Qdrant에 업로드해요.

임의의 벡터화된 입력을 지원하는 공식 Qdrant 노드가 출시되면서, HTTP Request 노드는 이 네이티브 통합으로 대체할 수 있게 됐어요.

워크플로우:

세 가지 워크플로우가 있어요: (1) Qdrant에 이미지 업로드 (2) 클러스터 중심과 임계값 설정 (3) 이상 탐지 도구 자체.

이미지 업로드 템플릿 워크플로우(1/3)는 다음 블록들로 구성돼요:

  • Check Collection: Qdrant에 지정된 이름의 컬렉션이 있는지 확인한다. 없으면 만든다.
  • Payload Index: crop_name 페이로드(메타데이터) 필드에 페이로드 인덱스를 추가한다. 이 필드는 작물 클래스 레이블을 저장하며, 인덱싱하면 Qdrant에서 필터링 검색 속도가 빨라진다. 벡터 인덱스가 구성되는 방식을 바꿔 필터링 제약 하의 빠른 벡터 검색에 맞게 적응시킨다. 자세한 내용은 Qdrant 필터링 가이드를 참고한다.
  • Fetch Images: Google Cloud Storage 노드를 사용해 Google Cloud Storage에서 이미지를 가져온다.
  • Generate IDs: 각 데이터 포인트에 UUID를 할당한다.
  • Embed Images: Voyage API로 이미지를 임베딩한다.
  • Batch Upload: 임베딩을 배치로 Qdrant에 업로드한다.

2. 클러스터 대표 정의하기

레이블링된 데이터의 가용성에 따라 클러스터 대표를 정의하는 두 가지 접근 방식을 사용했어요(완전한 목록은 아니에요):

방법 설명
메도이드(Medoids) 클러스터 내 다른 모든 클러스터 포인트에 대한 거리 합이 가장 작은 클러스터 내 포인트. 이 접근 방식은 각 클러스터에 대해 레이블링된 데이터가 필요하다.
완벽 대표(Perfect Representative) 이상적인 클러스터 구성원의 텍스트 설명으로 정의된 대표. Voyage AI 임베딩의 멀티모달성 덕분에 가능한 트릭이다. 예를 들어 체리라면: "Slender branches와 톱니 모양 잎을 가진 중간 크기 나무의 작고 윤기 나는 붉은 과일." 벡터 공간에서 이 설명에 가장 가까운 이미지가 대표로 선택된다. 이 방법은 설명을 실제 데이터와 맞추기 위해 실험이 필요하다.

워크플로우:

두 방법 모두 이상 탐지용 2/3 템플릿 워크플로우에서 시연돼요.

방법 단계
메도이드 1. Qdrant에서 레이블링된 클러스터 포인트를 샘플링한다.
2. Qdrant의 Distance Matrix API로 클러스터의 쌍별 거리 매트릭스를 계산한다. 이 API는 확장 가능한 클러스터 분석과 데이터 포인트 관계 탐색에 도움을 준다.
3. 각 포인트에 대해 다른 모든 포인트까지의 거리 합을 계산한다. 총 거리가 가장 작은 포인트(COSINE 거리 메트릭이면 유사도가 가장 높은)가 메도이드다.
4. 이 포인트를 클러스터 대표로 표시한다.
완벽 대표 1. 각 클러스터에 대한 텍스트 설명을 정의한다(예: AI 생성).
2. Voyage로 이 설명들을 임베딩한다.
3. 설명 임베딩에 가장 가까운 이미지 임베딩을 찾는다.
4. 이 이미지를 클러스터 대표로 표시한다.

3. 클러스터 경계 정의하기

워크플로우:

이상 탐지용 2/3 템플릿 워크플로우에서 보여주는 접근 방식은 두 유형의 클러스터 대표 모두에 대해 유사하게 동작해요.

클러스터 내에서 클러스터 대표로부터 가장 먼 데이터 포인트를 식별한다(2번째 또는 X번째로 먼 지점일 수도 있다. 정의하는 최선의 방법은 실험이며, 우리는 5번째로 먼 지점이 잘 동작했다). COSINE 유사도를 사용하므로 이것은 클러스터 대표의 반대(벡터에 -1을 곱한 것)에 가장 유사한 포인트와 동일하다. 대표와 해당 최원점 사이의 거리를 클러스터 경계(임계값)로 저장한다.

4. 이상 탐지 도구

워크플로우:

준비 단계가 끝나면 이상 탐지용 3/3 템플릿 워크플로우에서 시연되는 이상 탐지 도구를 설정할 수 있어요.

단계:

  1. 클러스터 대표 정의 방법을 선택한다.
  2. 후보 이미지를 비교할 모든 클러스터를 가져온다.
  3. Voyage AI로 후보 이미지를 같은 벡터 공간에 임베딩한다.
  4. 각 클러스터 대표에 대한 후보의 유사도를 계산한다. 모든 클러스터에 대해 유사도가 임계값보다 낮으면(클러스터 경계 밖) 이미지가 이상으로 플래그된다. 또는 특정 클러스터, 예를 들어 체리 클러스터에 이상인지 확인할 수도 있다.

이미지 데이터의 이상 탐지는 다양한 분야에 적용돼요:

  • 광고 검열(moderation)
  • 수직 농업(vertical farming)의 이상 탐지
  • 식품 산업의 품질 관리, 예를 들어 커피 원두의 이상 탐지
  • 지도 타일에서의 이상 식별, 예를 들어 자동 지도 업데이트나 생태 모니터링

이 도구는 이런 유스 케이스에 쉽게 적용할 수 있어요.

분류 도구 (Classification Tool)

이상 탐지 도구는 분류에도 사용할 수 있지만, 더 간단한 접근 방식이 있어요. K-Nearest Neighbors(KNN) 분류죠.

"네 친구를 보여줘, 네가 누군지 말해줄게."

KNN 방법은 분류된 이웃을 분석해 데이터 포인트에 레이블을 붙이고, 이 포인트에 이웃의 다수 클래스를 할당해요. 이 접근 방식은 모든 데이터 포인트가 레이블링될 필요가 없어요. 레이블링된 예시의 일부가 앵커 역할을 해 데이터셋 전체로 레이블을 전파할 수 있죠.

KNN 기반 이미지 분류 도구를 만들어볼게요.

설정:

  • 데이터셋: Land-Use Scene Classification 데이터셋을 사용해요. 위성 이미지 분석은 생태학, 구조 작업, 지도 업데이트에 응용돼요.
  • 임베딩 모델: 이상 탐지에서처럼 Voyage AI 멀티모달 임베딩 모델을 사용해요.

추가로, 데이터셋에 대한 최적의 K 값을 결정하려면 테스트·검증 데이터가 있는 것이 좋아요.

워크플로우:

Qdrant에 이미지 업로드는 데이터셋만 바꿔서 같은 워크플로우(이미지 업로드 1/3 템플릿 워크플로우)로 할 수 있어요.

KNN 분류 도구 템플릿은 다음 단계를 가져요:

  1. Embed Image: 분류 후보를 Voyage로 임베딩한다.
  2. Fetch neighbors: Qdrant에서 K개의 가장 가까운 레이블링된 이웃을 가져온다.
  3. Majority Voting: 단순 다수결 투표로 이웃에서 우세한 클래스를 결정한다.
  4. Optional: Ties Resolving: 동률일 경우 이웃 반경을 확장한다.

물론 이건 단순한 솔루션이고, 정밀도가 더 높고 레이블링된 데이터가 필요 없는 더 발전된 접근 방식도 있어요. 예를 들어 Qdrant로 메트릭 러닝(metric learning)을 시도해볼 수 있어요.

분류는 수십 년 전에 머신러닝에서 풀린 문제처럼 보이지만, 운영 환경에서 다루기는 그렇게 단순하지 않아요. 데이터 드리프트, 이동하는 클래스 정의, 잘못 레이블링된 데이터, 클래스 간의 모호한 차이 같은 문제가 예상치 못한 문제를 만들어요. 분류기의 지속적인 조정이 필요하죠. 그리고 벡터 검색은 확장성 덕분에 특이하지만 효과적인 솔루션이 될 수 있어요.

라이브 워크스루

n8n 에이전트가 이런 도구들을 실제로 어떻게 사용하는지 보고 "빅데이터 분석" 섹션의 핵심 아이디어를 다시 살펴보려면, 우리 통합 웨비나를 시청하세요.

결론

벡터 검색은 유사도 검색이나 기본 RAG에 국한되지 않아요. n8n 같은 자동화 플랫폼과 결합하면 더 똑똑한 시스템을 만드는 강력한 도구가 돼요. 고객 지원의 동적 라우팅, 사용자 행동 기반 콘텐츠 검열, 데이터 모니터링 대시보드의 AI 기반 알림을 생각해보세요.

이 튜토리얼은 AI 기반 추천, 분류, 이상 탐지에 Qdrant와 n8n을 사용하는 방법을 보여줬어요. 하지만 그것은 시작에 불과해요. 벡터 검색을 시도해보세요:

  • 중복 제거 (Deduplication)
  • 비유사성 검색 (Dissimilarity search)
  • 다양한 샘플링 (Diverse sampling)

Qdrant와 n8n으로 뭔가 독특한 것을 만들 공간이 충분해요!

더 알아보기 (Learn more)

출처: Qdrant 공식문서