본문으로 건너뛰기

n8n에서의 RAG

RAG란 무엇인가요?

검색 기반 증강 생성(Retrieval-Augmented Generation, RAG)은 언어 모델을 외부 데이터 소스와 결합하여 AI 응답의 품질을 향상시키는 기술입니다. RAG 시스템은 모델 내부의 학습 데이터에만 의존하지 않고, 관련 문서를 검색하여 최신 정보나 특정 도메인, 또는 비공개 지식을 기반으로 답변을 생성합니다. 일반적으로 RAG 워크플로는 이러한 외부 데이터를 효율적으로 관리하고 검색하기 위해 벡터 데이터베이스를 활용합니다.

벡터 데이터베이스란 무엇인가요?

벡터 데이터베이스는 텍스트, 이미지 또는 기타 데이터의 수치적 표현인 고차원 벡터를 저장하고 검색하기 위해 특화된 데이터베이스입니다. 문서를 업로드하면 벡터 데이터베이스는 이를 여러 개의 청크(chunk)로 분할하고, 임베딩(embedding) 모델을 사용해 각 청크를 벡터로 변환합니다.

이러한 벡터는 의미적 유사도 기반으로 검색할 수 있습니다. 이는 단순한 키워드 매칭이 아니라 의미 기반으로 결과를 제공하므로, RAG 및 대규모 지식 검색과 추론이 필요한 다양한 AI 시스템에 강력한 기반이 됩니다.

n8n에서 RAG를 어떻게 사용하나요?

RAG 템플릿으로 시작하기

👉 RAG 스타터 템플릿을 사용해 n8n에서 RAG를 빠르게 체험해 보세요. 이 템플릿에는 파일 업로드용과 파일 쿼리용으로 미리 구성된 두 개의 워크플로가 포함되어 있습니다.

데이터를 벡터 데이터베이스에 삽입하기

Agent가 사용자 지정 지식을 참조하려면 먼저 데이터를 벡터 데이터베이스에 업로드해야 합니다:

  1. 원본 데이터를 가져오기 위한 노드를 추가합니다.
  2. 벡터 데이터베이스 노드(예: Simple Vector Store)를 추가하고 문서 삽입 작업을 선택합니다.
  3. 텍스트를 벡터 임베딩으로 변환할 임베딩 모델을 선택합니다. 적절한 임베딩 모델 선택 방법은 FAQ를 참고하세요.
  4. 내용을 청크로 분할하기 위해 Default Data Loader 노드를 추가합니다. 기본 설정을 사용하거나 다음 분할 전략 중 하나를 직접 지정할 수 있습니다:
    • 문자 기반 분할: 지정된 문자 길이로 분할합니다.
    • 재귀적 문자 분할: Markdown, HTML, 코드 블록 또는 일반 텍스트를 재귀적으로 분할합니다(대부분의 시나리오에 적합).
    • 토큰 기반 분할: 지정된 토큰 수에 따라 분할합니다.
  5. (선택 사항) 각 청크에 메타데이터를 추가하여 문맥을 풍부하게 하고, 나중에 필터링하기 쉽게 할 수 있습니다.

데이터 쿼리하기

데이터는 크게 두 가지 방식으로 쿼리할 수 있습니다: Agent를 사용하는 방법노드를 직접 사용하는 방법입니다.

Agent를 사용하여 쿼리하기

  1. 워크플로에 Agent(에이전트) 노드를 추가합니다.
  2. 벡터 데이터베이스를 (Tool)로 추가하고, Agent가 언제 이 툴을 사용해야 하는지 이해할 수 있도록 설명(Description)을 제공합니다:
    • 제한 수량을 설정하여 반환할 청크 수를 지정합니다.
    • 메타데이터 포함을 활성화하여 각 청크에 추가적인 문맥을 제공합니다.
  3. 데이터 삽입 시 사용한 것과 동일한 임베딩 모델을 추가합니다.

💡 비용 절감 팁
고비용 모델의 토큰 사용량을 줄이려면, 먼저 Vector Store Question Answer Tool을 사용해 관련 데이터를 검색한 후 그 결과를 Agent에 전달하는 것이 좋습니다. 실제 워크플로 예시는 이 템플릿에서 확인하세요.

노드를 직접 사용하여 쿼리하기

  1. 캔버스에 벡터 데이터베이스 노드를 추가하고 여러 항목 가져오기 작업을 선택합니다.
  2. 쿼리 또는 질문을 입력합니다:
    • 제한 수량을 설정하여 반환할 청크 수를 제어합니다.
    • 필요에 따라 메타데이터 포함을 활성화합니다.

자주 묻는 질문(FAQ)

적절한 임베딩 모델은 어떻게 선택하나요?

적합한 임베딩 모델은 사용 사례에 따라 달라집니다.

일반적으로, 작은 모델(예: text-embedding-ada-002)은 속도가 빠르고 비용이 낮아 짧은 문서, 일반적인 용도 또는 가벼운 RAG 워크플로에 적합합니다. 반면, 큰 모델(예: text-embedding-3-large)은 더 뛰어난 의미 이해 능력을 제공하므로 긴 문서, 복잡한 주제, 또는 정확도가 중요한 시나리오에 적합합니다.

내 사용 사례에 가장 적합한 텍스트 분할 방식은 무엇인가요?

이는 주로 데이터의 특성에 따라 달라집니다:

  • 작은 청크(예: 200~500토큰)는 세밀한 검색(retrieval)에 유리합니다.
  • 큰 청크는 더 많은 문맥을 포함할 수 있지만, 오히려 모호하거나 잡음이 많아질 수 있습니다.

청크 간 오버랩(overlap)을 적절히 설정하는 것도 AI가 문맥을 이해하는 데 매우 중요합니다. 이 때문에 Markdown이나 코드 블록 기반의 분할 방식이 종종 더 효과적입니다.

또 다른 좋은 방법은 청크에 추가 문맥을 제공하는 것입니다(예: 해당 청크가 어떤 문서에서 나왔는지 명시). 이 주제에 대해 더 알고 싶다면 Anthropic의 이 훌륭한 글을 읽어보세요.