PDF 기반 RAG 학습 보조 서비스
사용자가 PDF 교재를 업로드하면,
RAG(Retrieval-Augmented Generation) 기반으로 문서 내용을 검색하고,
GPT를 활용하여 질문에 답변하는 학습 보조 AI 서비스.
또한 이미지/표/도식 질문 시에는
필요한 페이지에만 Vision API를 호출하는 Lazy Vision 구조를 적용하여
비용을 절감하면서도 시각 자료 기반 답변을 제공한다.
-
PDF 업로드
-
PDF 텍스트 추출
-
페이지 이미지 추출
-
Chunking
-
Embedding 생성
-
ChromaDB 벡터 검색
-
GPT 기반 질의응답
-
PDF 페이지 출처 제공
-
PDF 원문 페이지 바로 이동
-
Lazy Vision 기반 이미지 분석
-
문서 삭제 기능
PDF 업로드
→ PDF 저장
→ PDF 전처리
→ 텍스트 / 표 / 이미지 메타데이터 추출
→ Chunking
→ Embedding 생성
→ Vector DB 저장
사용자 질문
→ 질문이 이미지/표/도식 질문인지 판단
→ RAG로 관련 텍스트 chunk 검색
→ 관련 chunk의 page 추출
→ 이미지 질문이면 해당 page_visual 확인
→ vision_summary 없으면 Vision API 호출 후 저장
→ vision_summary 있으면 재사용
→ 텍스트 context + vision context 같이 GPT에게 전달
→ 최종 답변 + 출처 페이지 제공
단순 챗봇이 아닌 PDF 문서를 기반으로 답변.
GPT hallucination 감소.
출처 페이지 링크 제공.
페이지 단위 정보 유지.
비용 절감 구조.
이미지 질문 시에만 Vision 사용.
sentence-transformers 사용.
-
Next.js
-
Tailwind CSS
-
FastAPI
-
LangChain
-
OpenAI GPT-4o-mini
-
sentence-transformers
-
MySQL
-
ChromaDB
-
Local Storage
-
Cloudflare R2 (예정)
사용자, 문서 정보, 채팅 기록, PDF 메타데이터 저장
chunk embedding 저장 및 유사 문서 검색
PDF 원본 저장소
최종 답변 생성
문서 및 질문 embedding 생성
로컬 저장소와 R2 저장소를 교체 가능하게 만드는 계층
-
PDF 업로드
-
PDF 텍스트 추출
-
Chunking
-
Embedding 저장
-
ChromaDB 검색
-
GPT 기반 답변 생성
-
페이지 출처 제공
-
페이지 이미지 추출
-
Lazy Vision 구조
-
문서 삭제 기능
-
Frontend UI
실행 방법
- Backend 가상환경 생성 python3 -m venv venv 가상환경 실행 source venv/bin/activate 패키지 설치 pip install fastapi uvicorn python-multipart sqlalchemy pymysql python-dotenv pip install pymupdf pip install chromadb sentence-transformers pip install langchain langchain-community pip install openai 서버 실행 uvicorn main:app --reload
⸻
- Frontend 패키지 설치 npm install 실행 npm run dev
⸻
- MySQL Docker 실행 docker compose up -d 종료 docker compose down DB 완전 초기화 docker compose down -v
⸻
- ChromaDB 초기화 rm -rf chroma_db mkdir chroma_db
⸻
환경 변수 backend/.env OPENAI_API_KEY=YOUR_API_KEY DATABASE_URL=mysql+pymysql://smart_user:smart_password@localhost:3307/smart_study
⸻