Vector Store & RAG — AI에 회사 지식을 가르치자
GPT-4는 강력하지만 "우리 회사의 인사규정"은 모른다. RAG를 사용하면 AI가 내 문서를 참조하여 정확하게 답변할 수 있다.
RAG란?
RAG (Retrieval-Augmented Generation) — 검색 증강 생성.
일반 LLM:
질문 → LLM → 답변 (학습 데이터에 기반, 최신 정보 부재)
RAG:
질문 → [벡터 DB 검색] → 관련 문서 발견 → [LLM + 문서 컨텍스트] → 정확한 답변
왜 RAG가 필요한가?
| 문제 | RAG 해결 |
|---|---|
| LLM이 사내 정보를 모름 | 사내 문서를 벡터화하여 검색 가능 |
| 할루시네이션(오답) | 실제 문서를 근거로 답변 |
| 최신 정보 부재 | 문서 업데이트로 즉시 반영 |
| Fine-tuning 비용 | 추가 학습 없이 문서만 추가하면 됨 |
RAG 파이프라인 구조
RAG는 2개의 워크플로우로 구성된다:
워크플로우 1: 문서 인덱싱 (데이터 준비)
[문서 수집] → [Text Splitter: 청크 분할] → [Embedding: 벡터화] → [Vector Store: 저장]
워크플로우 2: AI 질의 (검색 + 답변)
[Chat Trigger] → [AI Agent + Vector Store Tool] → [답변]
워크플로우 1: 문서 인덱싱
Step 1: 문서 로딩
n8n은 다양한 Document Loader를 제공한다:
| Loader | 지원 형식 |
|---|---|
| Default Data Loader | 텍스트, JSON |
| Binary Input Loader | PDF, DOCX, TXT 등 |
| GitHub Document Loader | GitHub 리포의 파일들 |
Step 2: Text Splitter — 문서 청크 분할
긴 문서를 검색에 적합한 크기로 분할한다.
[Recursive Character Text Splitter]
Chunk Size: 1000 (한 청크의 최대 문자 수)
Chunk Overlap: 200 (청크 간 겹치는 문자 수)
왜 Overlap이 필요한가?
원본: "n8n의 AI Agent 노드는 도구를 자율적으로 선택합니다. 이 기능은 2024년에 추가되었습니다."
Overlap 없이:
청크 1: "n8n의 AI Agent 노드는 도구를"
청크 2: "자율적으로 선택합니다. 이 기능은"
→ 문맥이 끊김!
Overlap 200:
청크 1: "n8n의 AI Agent 노드는 도구를 자율적으로 선택합니다."
청크 2: "도구를 자율적으로 선택합니다. 이 기능은 2024년에 추가되었습니다."
→ 문맥 유지!
Step 3: Embedding — 텍스트를 벡터로
텍스트를 숫자 배열(벡터)로 변환한다. 의미가 비슷한 텍스트는 비슷한 벡터를 가진다.
[OpenAI Embeddings]
Model: text-embedding-3-small
| Embedding 모델 | 차원 | 비용 | 적합한 경우 |
|---|---|---|---|
text-embedding-3-small | 1536 | $ | 일반적 용도 (추천) |
text-embedding-3-large | 3072 | $$ | 높은 정확도 필요 시 |
Step 4: Vector Store — 벡터 저장
| Vector Store | 특징 |
|---|---|
| Pinecone | 관리형 SaaS, 무료 티어 제공 |
| Qdrant | 오픈소스, 셀프호스팅 가능 |
| Supabase (pgvector) | PostgreSQL 기반, 기존 DB와 통합 |
| In-Memory | 테스트용, 재시작 시 소멸 |
Pinecone 설정:
[Pinecone Vector Store]
Operation: Insert
Pinecone Index: my-docs
Namespace: company-wiki
완성된 인덱싱 워크플로우
[Manual Trigger]
→ [Google Drive: 문서 폴더 파일 목록]
→ [Google Drive: 파일 다운로드]
→ [Binary Input Loader: PDF 파싱]
→ [Recursive Text Splitter: 1000자/200 overlap]
→ [OpenAI Embeddings: text-embedding-3-small]
→ [Pinecone: Insert]
워크플로우 2: AI 질의
Vector Store Tool 방식 (추천)
AI Agent의 도구로 Vector Store를 연결한다.
[Chat Trigger]
→ [AI Agent]
├── Chat Model: GPT-4o
├── Tools:
│ └── [Vector Store Tool]
│ └── [Pinecone Vector Store: Query]
│ └── [OpenAI Embeddings]
└── Memory: Window Buffer Memory
Vector Store Tool 설정:
Name: company_knowledge_base
Description: 회사의 인사규정, 업무 매뉴얼, 제품 가이드 등 내부 문서를 검색합니다.
사용자가 회사 관련 질문을 하면 이 도구를 사용하세요.
Top K: 5 (가장 관련 높은 5개 청크 반환)
대화 예시
사용자: 연차 신청은 어떻게 하나요?
Agent 추론: "인사규정 관련 질문 → company_knowledge_base 도구 사용"
Vector Store 검색: "연차 신청" → 관련 문서 5개 청크 반환
Agent 응답:
연차 신청은 다음과 같이 진행합니다:
1. HR 포털(hr.company.com)에 접속
2. "휴가 신청" 메뉴 선택
3. 날짜와 사유 입력 후 제출
4. 팀장 승인 대기 (보통 1영업일 내)
※ 3일 이상 연속 휴가 시 1주일 전 신청 필요
(출처: 인사규정 제15조)
문서 업데이트 전략
문서가 변경되면 벡터도 업데이트해야 한다.
전체 재인덱싱
가장 간단한 방법. 기존 벡터를 모두 삭제하고 다시 삽입.
[Schedule: 매주 일요일]
→ [Pinecone: Delete All (namespace)]
→ [문서 인덱싱 워크플로우 실행]
증분 업데이트
변경된 문서만 업데이트. 효율적이지만 구현이 복잡하다.
[Google Drive Trigger: 파일 변경 감지]
→ [Pinecone: Delete (문서 ID 기준)]
→ [문서 파싱 + 임베딩]
→ [Pinecone: Insert]
RAG 품질 향상 팁
| 전략 | 설명 |
|---|---|
| 청크 크기 조정 | 너무 작으면 문맥 부족, 너무 크면 노이즈 증가. 800~1200자 권장 |
| 메타데이터 추가 | 문서명, 카테고리, 날짜를 메타데이터로 저장하여 필터링 |
| Top K 조정 | 관련 문서가 많으면 늘리고, 노이즈가 심하면 줄이기 |
| Reranking | 검색 결과를 추가 모델로 재정렬 |
| 하이브리드 검색 | 벡터 검색 + 키워드 검색 병행 |
📝 정리
- [x] RAG: 문서 검색으로 LLM의 지식을 확장하는 기술
- [x] 인덱싱: Document Loader → Text Splitter → Embedding → Vector Store
- [x] 검색: Vector Store Tool로 AI Agent에 문서 검색 기능 추가
- [x] Vector Store: Pinecone(SaaS), Qdrant(오픈소스), Supabase(PostgreSQL)
- [x] 품질 향상: 청크 크기, 메타데이터, Top K 조정
다음 편 예고
24편: AI 도구 체인 — 다중 모델 오케스트레이션
하나의 워크플로우에서 여러 AI 모델을 조합한다. 작업별 최적 모델 라우팅, 비용 최적화, 품질 관리 전략.