관련 컨텍스트 검색
관련 컨텍스트 검색 (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 %}
벡터 스토어에 데이터 넣기
에이전트가 사용자 정의 지식에 접근하려면 먼저 그 데이터를 벡터 스토어에 업로드해야 해요.
- 원본 데이터를 가져올 노드를 추가하세요.
- Vector Store 노드(예: Simple Vector Store)를 넣고 Insert Documents 작업을 선택하세요.
- 텍스트를 벡터 임베딩으로 변환하는 임베딩 모델을 선택하세요. 올바른 임베딩 모델을 고르는 방법은 FAQ의 임베딩 모델 고르기를 참고하세요.
- 콘텐츠를 chunk로 나누는 Default Data Loader 노드를 추가하세요. 기본 설정을 쓰거나 chunking 전략을 직접 정의할 수 있어요.
- Character Text Splitter: 문자 길이로 나눠요.
- Recursive Character Text Splitter: Markdown, HTML, 코드 블록 또는 단순 문자를 기준으로 재귀적으로 나눠요(대부분의 사용 사례에 권장).
- Token Text Splitter: 토큰 수로 나눠요.
- (선택) 각 chunk에 메타데이터를 추가해 컨텍스트를 풍부하게 하고 나중에 더 잘 필터링할 수 있게 하세요.
데이터 질의하기
데이터는 크게 두 가지 방법, 즉 에이전트를 통하거나 노드를 직접 통해서 질의할 수 있어요.
에이전트 사용하기
- 워크플로에 에이전트를 추가하세요.
- 벡터 스토어를 도구(tool) 로 추가하고, 에이전트가 언제 써야 하는지 이해하도록 설명(description) 을 주세요.
- limit을 설정해 반환할 chunk 수를 정하세요.
- 각 chunk에 추가 컨텍스트를 주려면 Include Metadata를 켜세요.
- 데이터를 넣을 때 쓴 것과 같은 임베딩 모델을 추가하세요.
{% hint style="info" %} 프로 팁
비싼 모델에서 토큰을 아끼려면 먼저 Vector Store Question Answer 도구로 관련 데이터를 검색한 다음에만 결과를 에이전트에 넘길 수 있어요. 실제 동작을 보려면 이 템플릿을 확인해 보세요. {% endhint %}
노드 직접 사용하기
- 캔버스에 벡터 스토어 노드를 추가하고 Get Many 작업을 선택하세요.
- 질의나 프롬프트를 입력하세요.
- 반환할 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)
- 벡터로 데이터 저장·검색하기 — 임베딩·리트리버·문서 로더
- AI에서 에이전트가 하는 일 — RAG 데이터를 질의하는 에이전트
[^1]: 검색 증강 생성(Retrieval-augmented generation, RAG)은 LLM이 외부 소스의 새 정보에 접근해 AI 응답을 개선하는 기법이에요. RAG 시스템은 관련 문서를 검색해 원래 학습 데이터를 보완하는 최신·도메인 특화·독점 지식으로 응답을 근거 지어요. RAG 시스템은 흔히 벡터 스토어에 의존해 이 외부 데이터를 효율적으로 관리하고 검색하죠.
[^2]: AI, 특히 검색 증강 생성(RAG) 맥락에서 근거성(groundedness)과 비근거성(ungroundedness)은 모델의 응답이 소스 정보를 얼마나 정확히 반영하는지를 나타내는 척도예요. 모델은 소스 문서를 사용해 근거 있는 응답을 생성하고, 비근거 응답은 그 소스에 의해 뒷받침되지 않는 추측이나 환각을 포함해요.
[^3]: 벡터 스토어 또는 벡터 데이터베이스는 정보의 수학적 표현을 저장해요. 임베딩과 리트리버와 함께 사용해, AI가 질문에 답할 때 접근할 수 있는 데이터베이스를 만들 수 있어요.
[^4]: 임베딩은 벡터를 사용한 데이터의 수치 표현이에요. AI가 많은 차원에 걸쳐 값을 매핑해 복잡한 데이터와 관계를 해석하는 데 쓰여요. 벡터 데이터베이스 또는 벡터 스토어는 임베딩을 저장하고 접근하도록 설계된 데이터베이스예요.