RAG 챗봇 개발 전체 단계별 흐름 + 스택
1. 문서 준비
사내 문서, PDF, 웹페이지, 워드 등 자료 수집
사용하는 스택:
PDF → 텍스트: PyPDF2, pdfplumber
이미지 → 텍스트: Tesseract OCR
크롤링: BeautifulSoup, Selenium
2. 텍스트 전처리 & 청킹
불필요한 기호 제거
긴 문장 → 작은 청크(예: 500단어, 1000자 등)
사용하는 스택:
Python 기본 문법 + re (정규식)
LangChain TextSplitter (많이 씀)
직접 구현 (ex: split_text_into_chunks())
3. 임베딩 생성
청크를 벡터(숫자 배열)로 변환
의미적 유사도를 계산하기 위한 벡터화
사용하는 스택:
OpenAI Embeddings API (ex: text-embedding-3-large)
Hugging Face SentenceTransformer (예: all-MiniLM-L6-v2)
Cohere Embeddings
4. 벡터 DB 저장
변환된 벡터들을 벡터 DB에 넣음
검색용 인덱스 관리
사용하는 스택:
Pinecone
Weaviate
Milvus
Qdrant
5. 쿼리(질문) 처리
사용자의 질문을 받아 벡터화
벡터 DB에서 유사한 청크 검색
사용하는 스택:
동일한 임베딩 API (OpenAI Embeddings, SentenceTransformer)
벡터 DB 쿼리 메서드 (예: index.query())
6. LLM을 통한 답변 생성
검색된 청크를 기반으로 문장 재작성
문맥 맞게 자연스럽게 요약 & 통합
사용하는 스택:
OpenAI GPT-4 (예: gpt-4o, gpt-4-turbo)
Anthropic Claude
Google Gemini
LangChain LLM Wrapper
7. 사용자 응답 출력
답변 보여주기
관련 문서, 출처, 하이라이트 링크 등 표시
사용하는 스택:
Frontend: React, Next.js, Vue 등
Backend API: FastAPI, Flask, Node.js(Express)
배포/호스팅: Vercel, AWS, GCP
전체 요약 흐름
[문서 수집 및 OCR]
↓
[텍스트 전처리 & 청킹]
↓
[임베딩 생성 (SentenceTransformer, OpenAI Embeddings)]
↓
[벡터 DB 저장 (Pinecone 등)]
↓
[사용자 질문 → 임베딩 변환]
↓
[벡터 DB에서 유사 청크 검색]
↓
[LLM (GPT-4 등)으로 최종 답변 생성]
↓
[사용자에게 출력]