Files
sam-kd/chatbot/docs/advanced_rag_guide.md
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

3.5 KiB

Notion API를 이용한 RAG 구축: 현재 방식 vs 고도화(Vector) 방식

현재 구축된 챗봇은 **"검색 기반(Search-Based) RAG"**입니다. Notion의 실시간 검색 기능을 활용해 가볍고 빠르게 구축한 버전입니다. 질문하신 대로, 더 높은 정확도와 의미 기반 검색이 가능한 "임베딩(Vector) 기반 RAG"(=순수 RAG)를 구축하려면 훨씬 더 복잡한 파이프라인이 필요합니다.


Notion이 제공하는 '검색 창' 기능을 API로 대신 누르는 것과 같습니다.

구조

  1. User: "오타 수정 기능 있어?"
  2. AI (Keyword Gen): 질문을 Notion 검색어로 변경 -> "오타 수정"
  3. Notion API: 해당 단어가 포함된 제목/본문을 찾아서 리턴
  4. AI (Answer): 찾은 내용을 읽고 답변 생성

장점:

  • 구축이 매우 빠름 (별도 DB 필요 없음).
  • Notion에서 수정하면 즉시 반영됨 (실시간).

단점:

  • 의미 검색 불가: "급여"를 검색할 때 "월급"이라는 단어만 있는 문서는 못 찾을 수 있음 (단어 일치 기반).
  • 속도/양 제한: Notion API의 검색 속도에 의존하며, 가져올 수 있는 문서 양에 한계가 있음.

2. 고도화 방식: Vector RAG (Standard RAG)

AI가 문장의 '의미'를 숫자로 변환(임베딩)하여 저장해두고 찾는 방식입니다.

필요 단계 (구축 파이프라인)

RAG를 제대로 구현하려면 아래 5단계를 수행하는 별도의 서버와 DB를 구축해야 합니다.

  1. 데이터 추출 (Extract)
    • Notion API를 통해 주기적으로 모든 페이지를 긁어옵니다. (매일 밤 or 변경 시마다)
  2. 청킹 (Chunking)
    • 긴 문서를 문단 단위나 의미 단위로 잘게 쪼갭니다. (예: 500자 단위)
  3. 임베딩 (Embedding)
    • 쪼갠 텍스트를 AI 모델(OpenAI Embeddings, Google Vertex Embeddings 등)에 넣어 **숫자 벡터(Vector)**로 변환합니다.
    • 예: "사과" -> [0.1, 0.5, -0.3, ...]
  4. 벡터 저장소 적재 (Vector Vector)
    • 변환된 숫자를 검색할 수 있는 전용 DB(Pinecone, Milvus, Elasticsearch 등)에 저장합니다.
  5. 검색 및 생성 (Retrieval & Generation)
    • 사용자가 질문하면, 질문도 [0.2, ...] 숫자로 변환합니다.
    • DB에서 숫자가 가장 비슷한(의미가 가까운) 문서를 찾아냅니다. (이때 "급여"로 검색해도 "월급" 문서를 찾습니다)
    • 찾은 문서를 AI에게 주어 답변을 생성합니다.

비교 요약

구분 현재 방식 (Live Search) 고도화 방식 (Vector RAG)
핵심 기술 Notion 키워드 검색 API Vector 임베딩 & Similarity Search
준비물 API 키만 있으면 됨 별도 DB, 임베딩 모델, 동기화 서버
검색 품질 키워드 일치 여부에 의존 의미(문맥) 기반 추론 가능
최신성 실시간 (즉시 반영) 동기화 주기(예: 1시간)에 따라 지연 발생
구축 난이도 하 (반나절 소요) 상 (최소 1~2주 소요)

결론

현재는 **"구축 비용 대비 효율"**이 가장 좋은 방식을 채택했습니다. 만약 사내 문서가 수천 개 이상으로 늘어나고, "단어는 다르지만 의미가 같은" 문서들을 찾아야 하는 니즈가 커진다면, 그때 **벡터 DB 도입(2번 방식)**을 고려하시는 것이 좋습니다.