Vector Store & RAG — AI에 회사 지식을 가르치자

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 모델을 조합한다. 작업별 최적 모델 라우팅, 비용 최적화, 품질 관리 전략.