3 / 10 flowchart v0.0.1 상세

3. 데이터 흐름 — RAG Pipeline

RAG Pipeline의 end-to-end 데이터 흐름

RAG Pipeline의 end-to-end 데이터 흐름. 인덱싱이 벡터 DB를 채우고, 검색·생성이 그걸 읽어 LLM으로 보냄.

💡 핵심 개념: RAG는 한 번에 끝나는 게 아니라 두 개의 시점(오프라인/온라인)으로 나뉨. 인덱싱은 배치로 천천히 돌고, 검색·생성은 사용자 요청마다 실시간. 둘을 잇는 게 벡터 DB.
flowchart LR subgraph OFF["📥 인덱싱 (오프라인·배치)"] D[문서]:::off C[청크]:::off E[임베딩]:::off D --> C --> E end VDB[("🗄️ 벡터 DB")]:::store subgraph ON["🔍 검색·생성 (온라인·추론)"] Q[질의]:::on R[검색·리랭킹]:::on G[컨텍스트 주입]:::on Q --> R --> G end LLM{{"🧠 LLM"}}:::llm A["📨 응답"]:::resp E ==>|"bulk upsert"| VDB VDB ==>|"top-k retrieve"| R G --> LLM --> A classDef off fill:#fef3c7,stroke:#f59e0b,color:#000 classDef on fill:#dbeafe,stroke:#3b82f6,color:#000 classDef store fill:#e5e7eb,stroke:#6b7280,color:#000 classDef llm fill:#f3e8ff,stroke:#a855f7,color:#000 classDef resp fill:#dcfce7,stroke:#10b981,color:#000

🔧 단계별 책임

📋 구체적 예시 (한국어 사내 문서 QA):
  1. Notion 페이지 1000개를 Loader로 추출 (PDF, HTML)
  2. Splitter로 페이지당 평균 800 토큰 청크
  3. 임베딩 모델은 text-embedding-3-small (저렴) 또는 text-embedding-3-large (정밀)
  4. Pinecone 서버리스에 upsert
  5. 사용자 "연차 정책" 검색 → top-10 chunk → rerank → top-3
  6. Prompt: "다음 문서 기반으로 답해. 문서: {chunk}. 질문: {query}"
⚠️ 흔한 함정:
🛠️ 관련 프레임워크: LlamaIndex(전체 파이프라인), Haystack(production DAG), LangChain(범용), Unstructured.io(Loader 전담).