관련 컨텍스트 검색

관련 컨텍스트 검색 (Retrieve relevant context)

Retrieval-Augmented Generation(RAG)을 쓰면 모델에게 컨텍스트에 특화된 리소스에 대한 접근을 줘서 더 관련성 높은 답변을 생성하게 할 수 있어요. RAG가 어떻게 작동하는지, 그리고 n8n에서 어떻게 쓰는지 살펴볼게요.

RAG란 무엇인가

Retrieval-Augmented Generation(RAG)[^1]은 언어 모델과 외부 데이터 소스를 결합해 AI 응답을 개선하는 기법이에요. RAG 시스템은 모델의 내부 학습 데이터에만 의존하는 대신, 관련 문서를 검색해 응답을 최신·도메인 특화·독점 지식으로 근거[^2]를 제공해요. RAG 워크플로는 보통 벡터 스토어에 의존해 이 외부 데이터를 효율적으로 관리하고 검색하죠.

벡터 스토어란 무엇인가

벡터 스토어[^3]는 고차원 벡터, 즉 텍스트·이미지·다른 데이터의 수치 표현을 저장하고 검색하도록 설계된 특별한 데이터베이스예요. 문서를 업로드하면 벡터 스토어가 문서를 chunk로 나누고, 임베딩 모델[^4]을 사용해 각 chunk를 벡터로 변환해요.

이 벡터들은 유사성 검색(similarity search)으로 질의할 수 있는데, 키워드 매칭이 아니라 의미적 의미에 기반해 결과를 구성해요. 덕분에 벡터 스토어는 RAG나, 큰 지식 집합을 검색하고 추론해야 하는 다른 AI 시스템의 강력한 기반이 돼요.

n8n에서 RAG 사용하기

{% hint style="info" %} RAG 템플릿으로 시작하세요

👉 RAG Starter Template로 n8n에서 RAG를 시도해 보세요. 이 템플릿에는 파일 업로드용과 파일 질의용 워크플로 두 가지가 준비돼 있어요. {% endhint %}

벡터 스토어에 데이터 넣기

에이전트가 사용자 정의 지식에 접근하려면 먼저 그 데이터를 벡터 스토어에 업로드해야 해요.

  1. 원본 데이터를 가져올 노드를 추가하세요.
  2. Vector Store 노드(예: Simple Vector Store)를 넣고 Insert Documents 작업을 선택하세요.
  3. 텍스트를 벡터 임베딩으로 변환하는 임베딩 모델을 선택하세요. 올바른 임베딩 모델을 고르는 방법은 FAQ의 임베딩 모델 고르기를 참고하세요.
  4. 콘텐츠를 chunk로 나누는 Default Data Loader 노드를 추가하세요. 기본 설정을 쓰거나 chunking 전략을 직접 정의할 수 있어요.
    • Character Text Splitter: 문자 길이로 나눠요.
    • Recursive Character Text Splitter: Markdown, HTML, 코드 블록 또는 단순 문자를 기준으로 재귀적으로 나눠요(대부분의 사용 사례에 권장).
    • Token Text Splitter: 토큰 수로 나눠요.
  5. (선택) 각 chunk에 메타데이터를 추가해 컨텍스트를 풍부하게 하고 나중에 더 잘 필터링할 수 있게 하세요.

데이터 질의하기

데이터는 크게 두 가지 방법, 즉 에이전트를 통하거나 노드를 직접 통해서 질의할 수 있어요.

에이전트 사용하기

  1. 워크플로에 에이전트를 추가하세요.
  2. 벡터 스토어를 도구(tool) 로 추가하고, 에이전트가 언제 써야 하는지 이해하도록 설명(description) 을 주세요.
    • limit을 설정해 반환할 chunk 수를 정하세요.
    • 각 chunk에 추가 컨텍스트를 주려면 Include Metadata를 켜세요.
  3. 데이터를 넣을 때 쓴 것과 같은 임베딩 모델을 추가하세요.

{% hint style="info" %} 프로 팁

비싼 모델에서 토큰을 아끼려면 먼저 Vector Store Question Answer 도구로 관련 데이터를 검색한 다음에만 결과를 에이전트에 넘길 수 있어요. 실제 동작을 보려면 이 템플릿을 확인해 보세요. {% endhint %}

노드 직접 사용하기

  1. 캔버스에 벡터 스토어 노드를 추가하고 Get Many 작업을 선택하세요.
  2. 질의나 프롬프트를 입력하세요.
    • 반환할 chunk 수를 limit으로 설정하세요.
    • 필요하면 Include Metadata를 켜세요.

FAQ

올바른 임베딩 모델은 어떻게 고르나요?

올바른 임베딩 모델은 경우마다 달라요.

일반적으로 더 작은 모델(예: text-embedding-ada-002)은 더 빠르고 저렴해서, 짧고 일반적인 문서나 가벼운 RAG 워크플로에 이상적이에요. 더 큰 모델(예: text-embedding-3-large)은 더 나은 의미적 이해를 제공해서, 긴 문서·복잡한 주제·정확도가 중요한 경우에 가장 좋아요.

제 사용 사례에 맞는 최적의 텍스트 분할은 무엇인가요?

이것도 데이터에 많이 달려 있어요.

  • 작은 chunk(예: 200~500 토큰)는 정밀한 검색에 좋아요.
  • 큰 chunk는 더 많은 컨텍스트를 담을 수 있지만 희석되거나 노이즈가 생길 수 있어요.

올바른 overlap 크기를 쓰는 것도 AI가 chunk의 컨텍스트를 이해하는 데 중요해요. 그래서 Markdown이나 Code Block 분할을 쓰면 chunk를 더 좋게 만들 수 있는 경우가 많아요.

또 다른 좋은 접근은 컨텍스트를 더 추가하는 거예요(예: chunk가 어느 문서에서 왔는지). 더 알고 싶다면 Anthropic의 이 훌륭한 글을 확인해 보세요.

출처: 공식문서

더 알아보기 (Learn more)

[^1]: 검색 증강 생성(Retrieval-augmented generation, RAG)은 LLM이 외부 소스의 새 정보에 접근해 AI 응답을 개선하는 기법이에요. RAG 시스템은 관련 문서를 검색해 원래 학습 데이터를 보완하는 최신·도메인 특화·독점 지식으로 응답을 근거 지어요. RAG 시스템은 흔히 벡터 스토어에 의존해 이 외부 데이터를 효율적으로 관리하고 검색하죠.

[^2]: AI, 특히 검색 증강 생성(RAG) 맥락에서 근거성(groundedness)과 비근거성(ungroundedness)은 모델의 응답이 소스 정보를 얼마나 정확히 반영하는지를 나타내는 척도예요. 모델은 소스 문서를 사용해 근거 있는 응답을 생성하고, 비근거 응답은 그 소스에 의해 뒷받침되지 않는 추측이나 환각을 포함해요.

[^3]: 벡터 스토어 또는 벡터 데이터베이스는 정보의 수학적 표현을 저장해요. 임베딩과 리트리버와 함께 사용해, AI가 질문에 답할 때 접근할 수 있는 데이터베이스를 만들 수 있어요.

[^4]: 임베딩은 벡터를 사용한 데이터의 수치 표현이에요. AI가 많은 차원에 걸쳐 값을 매핑해 복잡한 데이터와 관계를 해석하는 데 쓰여요. 벡터 데이터베이스 또는 벡터 스토어는 임베딩을 저장하고 접근하도록 설계된 데이터베이스예요.