# Notion API를 이용한 RAG 구축: 현재 방식 vs 고도화(Vector) 방식 현재 구축된 챗봇은 **"검색 기반(Search-Based) RAG"**입니다. Notion의 실시간 검색 기능을 활용해 가볍고 빠르게 구축한 버전입니다. 질문하신 대로, 더 높은 정확도와 의미 기반 검색이 가능한 **"임베딩(Vector) 기반 RAG"**(=순수 RAG)를 구축하려면 훨씬 더 복잡한 파이프라인이 필요합니다. --- ## 1. 현재 방식: Search-Based RAG (Live Search) 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번 방식)**을 고려하시는 것이 좋습니다.