
n8n, Qdrant, Groq를 활용한 Slack 지식 봇 구축
요약
n8n, Qdrant, Groq를 활용하여 Google Drive 문서를 기반으로 답변하는 Slack 지식 봇 구축 방법을 소개합니다. RAG 워크플로우를 통해 출처가 명확하고 추적 가능한 답변을 제공하는 실용적인 가이드를 제공합니다.
핵심 포인트
- n8n, Qdrant, Groq를 결합한 RAG 기반 Slack 봇 구축
- Google Drive 문서를 청킹 및 임베딩하여 지식 계층 생성
- 답변의 신뢰도를 높이기 위해 출처와 매칭 강도 제공
- Ollama, n8n 셀프 호스팅 등을 활용한 저비용 운영 전략
승인된 Google Drive 문서를 Slack 어시스턴트로 변환하는 실용적인 워크플로우입니다. 선택된 파일을 청킹(chunking)하고, 임베딩(embeddings)을 Qdrant에 저장하며, 관련 컨텍스트(context)를 검색합니다. 그 후 Groq에게 해당 컨텍스트 내에서만 답변하도록 요청하고, 출처와 함께 답변하거나 신뢰도가 낮을 경우 주의 사항을 함께 전달합니다.
많은 팀이 이미 어딘가에 정답을 가지고 있습니다: 가격 안내 노트, 온보딩(onboarding) 문서, 서비스 FAQ, 체크리스트 또는 인수인계 프로세스 등입니다. 문제는 업무가 진행되는 동안 적절한 섹션을 찾는 과정이 느리다는 점입니다.
이 워크플로우는 Slack에 검색 가능한 지식 계층(knowledge layer)을 제공합니다. 팀원이 질문을 하면, n8n이 Qdrant를 통해 승인된 Google Drive 폴더를 검색하고, Groq가 검색된 컨텍스트를 바탕으로 출처 파일을 첨부하여 답변을 작성합니다.
유용한 부분은 확신에 찬 답변이 아닙니다.
그것은 추적 가능한 답변입니다: 어떤 문서가 검색되었는지, 어떤 출처가 사용되었는지, 그리고 매칭 결과가 주의가 필요할 정도로 약했는지 여부를 알 수 있습니다.
| 지식 소스 (Knowledge source) | 검색 계층 (Search layer) | 팀 인터페이스 (Team interface) |
|---|---|---|
| 승인된 Google Drive Markdown 파일 | 로컬 임베딩으로부터 생성된 Qdrant 벡터 | 출처가 포함된 Slack 멘션 |
대략적인 운영 비용
이 데모의 경우, 소프트웨어 비용을 매우 낮게 유지할 수 있습니다. Ollama는 임베딩 모델을 로컬에서 실행합니다. n8n은 무료 셀프 호스팅 커뮤니티 에디션(community edition)으로 실행할 수 있습니다. Qdrant는 로컬에서 실행하거나 테스트를 위해 무료 클라우드 티어(free cloud tier)로 시작할 수 있습니다. Groq가 주요 유료 API 부분이며, 질문량이 적은 경우 이와 같은 소규모 내부 봇은 적은 잔액으로도 충분히 테스트할 수 있습니다.
-
Ollama embeddings (Ollama 임베딩): 임베딩 모델이 사용자의 로컬 머신이나 서버에서 실행될 경우 API 비용이 발생하지 않습니다. 비용은 로컬 컴퓨팅 자원(local compute)으로 대체됩니다.
-
n8n: 셀프 호스팅(self-hosted)할 경우 무료이지만, 호스팅과 유지보수는 여전히 누군가의 몫입니다. 관리형 호스팅(managed hosting)을 원하는 경우 n8n Cloud는 유료입니다.
-
Qdrant: 로컬/셀프 호스팅 방식은 소프트웨어로서 무료로 실행할 수 있습니다. Qdrant Cloud 또한 테스트 및 프로토타입을 위한 무료 티어(free tier)를 제공하며, 프로젝트가 성장함에 따라 유료로 전환됩니다.
-
Groq: 답변 생성 단계는 사용량 기반(usage-based)입니다. 사용량이 적은 데모의 경우, 5달러(USD 5) 정도의 소액 잔액으로도 한동안 패턴을 테스트하기에 충분할 수 있지만, 실제 지출은 모델 선택, 프롬프트 크기(prompt size), 그리고 사용량에 따라 달라집니다.
시작 단계에서의 소프트웨어 비용은 낮습니다. 실제 비용은 호스팅, API 호출, 그리고 이를 유지보수하는 주체에 따라 결정됩니다.
Groq: 답변 생성 단계는 사용량 기반입니다. 사용량이 적은 데모의 경우, 5달러(USD 5) 정도의 소액 잔액으로도 한동안 패턴을 테스트하기에 충분할 수 있지만, 실제 지출은 모델 선택, 프롬프트 크기, 그리고 사용량에 따라 달라집니다.
시작 단계에서의 소프트웨어 비용은 낮습니다. 실제 비용은 호스팅, API 호출, 그리고 이를 유지보수하는 주체에 따라 결정됩니다.
전체 워크플로우 맵
캔버스는 두 개의 레인(lane)으로 구성됩니다. 상단 레인은 지식 베이스(knowledge base)를 갱신합니다: 파일 목록 나열, 승인된 텍스트 파일 필터링, 청킹(chunking), 임베딩(embedding), 동일 소스에 대한 오래된 청크 삭제, 그리고 새로운 포인트들을 Qdrant에 업서트(upsert)하는 과정을 거칩니다. 하단 레인은 Slack으로부터 들어오는 질문에 답변합니다.

두 개의 가시적인 경로: 상단의 문서 인제스션(document ingestion), 하단의 Slack 질문 답변.
1. 승인된 문서로 시작하기
워크플로우는 제어된 Google Drive 폴더에서 시작됩니다. 이 데모에서 해당 폴더에는 FloxoLab의 가격 정책, 서비스, FAQ, 워크플로우 예시, 온보딩(onboarding), 그리고 인테이크(intake) 프로세스 노트가 담긴 Markdown 파일들이 포함되어 있습니다.
이는 유용한 지식 봇(knowledge bot)이 정리되지 않은 공유 드라이브를 크롤링하는 것으로 시작해서는 안 되기 때문에 중요합니다. 첫 번째 버전은 내부 답변용으로 안전한, 현재 승인된 문서들을 사용해야 합니다.

워크플로우가 Markdown 파일을 필터링하므로, 첫 번째 지식 베이스(knowledge base)는 단순하고 검토 가능한 상태를 유지합니다.
2. 메타데이터(metadata)와 함께 파일 청킹(Chunk)하기
각 파일은 다운로드된 후 코드 노드(code node)를 통과하며, 여기서 텍스트는 헤딩(headings)을 기준으로 분할됩니다. 또한 청크(chunk)를 실용적인 단어 수 제한 이내로 유지하고 소스(source), 파일 인덱스(file index), 청크 인덱스(chunk index), 단어 수(word count), 마지막 수정 시간(last modified time)과 같은 메타데이터를 추가합니다.
메타데이터는 단순한 장식이 아닙니다. 메타데이터는 답변이 어떤 컨텍스트(context)에서 왔는지 보여줄 수 있게 하며, 다음 인제스션(ingestion) 실행 시 동일한 소스의 오래된 청크를 교체할 수 있는 깔끔한 방법을 워크플로우에 제공합니다.

각 청크는 텍스트뿐만 아니라 소스 및 인덱스 데이터를 포함합니다.
3. Qdrant에 검색 가능한 청크 저장하기
워크플로우는 임베딩(embeddings)을 위해 nomic-embed-text를 사용하는 Ollama를 사용하며, 그 다음 결정론적 ID(deterministic id), 벡터(vector), 페이로드(payload)를 포함하는 Qdrant 포인트(point)를 준비합니다. 새로운 포인트를 업서트(upsert)하기 전에, 오래된 콘텐츠가 신선한 콘텐츠 옆에 머물지 않도록 동일한 소스에 대한 기존 청크를 삭제합니다.

Qdrant는 벡터와 함께 워크플로우가 나중에 필요로 하는 페이로드 필드들, 즉 텍스트, 소스, 청크 인덱스, 타임스탬프(timestamps), 단어 수를 저장합니다.
4. Slack에서 질문하기
질문 흐름은 누군가가 Slack에서 봇을 언급(mention)할 때 시작됩니다. n8n은 언급된 텍스트를 제거하고, 정제된 질문을 임베딩(embedding)하며, Qdrant에서 가장 잘 일치하는 청크(chunks)를 검색한 뒤, Groq를 위한 압축된 컨텍스트(context) 블록을 생성합니다.
답변 프롬프트(prompt)는 의도적으로 엄격하게 설정되었습니다: 제공된 컨텍스트 내에서만 답변할 것, 가격, 서비스, 보증, 일정 또는 정책을 임의로 만들어내지 말 것, 그리고 Slack에 적합하도록 메시지를 간결하게 유지할 것을 요구합니다.

사용자가 Slack 내부에서 질문합니다. 봇은 검색된 컨텍스트를 바탕으로 답변하며 소스 파일(source files)을 덧붙입니다.
5. 불확실성을 가시화하기
워크플로우는 검색 결과가 약한 경우에도 이를 표시합니다. 만약 Qdrant의 최상위 점수가 임계값(threshold) 미만이라면, 답변에 낮은 신뢰도(low-confidence) 노트를 포함합니다. 이는 사용자가 답변을 의사결정에 활용하기 전에 확인이 필요함을 알 수 있게 해주는 실질적인 가드레일(guardrail) 역할을 합니다.

답변을 찾을 수 없는 경우 이를 명시해야 합니다. 여기서는 봇이 모른다고 답변하며 일치 항목을 낮은 신뢰도로 표시합니다.
다음에 개선하고 싶은 점
이 데모는 경로를 증명하지만, 프로덕션(production) 버전에서는 소유권(ownership)을 더 명확히 해야 합니다.
-
더 나은 소스 링크. 파일 이름도 유용하지만, 정확한 Google Drive 문서로 연결되는 링크가 있다면 검토 속도가 더 빨라질 것입니다.
-
Slack 스레드 답변. 답변을 원래의 스레드(thread)에 게시하면 채널을 더 깔끔하게 유지할 수 있습니다.
-
낮은 신뢰도 검토. 검색 결과가 약한 항목들은 시트(sheet)에 기록하거나 별도의 비공개 검토 채널로 전송할 수 있습니다.
-
수집 로그(Ingestion logs). 파일, 청크 수, 실패 기록에 대한 명확한 로그가 있다면 인수인계가 더 쉬워질 것입니다.
결론
Slack 지식 봇은 답변이 이미 존재함에도 불구하고 팀원들이 이를 찾는 데 시간을 낭비할 때 매우 유용합니다. 중요한 선택 사항은 모델과 데이터베이스뿐만이 아닙니다. 승인된 지식 세트(approved knowledge set), 검색 임계값(retrieval threshold), 출처 표시(source display), 그리고 폴백 동작(fallback behavior) 또한 중요한 요소입니다.
이 워크플로우(workflow)는 이러한 부분들을 가시적으로 유지합니다: 선택된 문서 입력, 검색 가능한 청크(chunks) 저장, Slack 질문 발생, 컨텍스트(context) 검색, 해당 컨텍스트를 바탕으로 답변 작성, 출처 표시, 불확실성 표출.
관련 가이드
이 패턴 뒤에 숨겨진 쉬운 영어 설명을 보려면, RAG for Small Businesses: AI That Searches Your Company Knowledge를 읽어보세요.
원문은 FloxoLab에 게시되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기