9.0 KiB
9.0 KiB
연구QA Chatbot
AI 기반 연구 문서 분석 도우미 챗봇입니다. PDF 문서를 업로드하고 AI와 대화하여 문서 내용에 대해 질문할 수 있습니다.
🚀 설치 및 실행
1. postgreSQL 설치
- localhost에 설치를 한다.
- 사용자 설정은 다음과 같다.
- 사용자명: woonglab
- 비밀번호: !@#woonglab
- 데이터베이스: researchqa
- 호스트: localhost
- 포트: 5432
- 필요한 테이블
- database.sql을 찹고한다. (create 구문으로 실행하면 필요 테이블 생성시킬 수 있음)
2. 백엔드 설정 및 실행
# 먼저 ollama를 설치하고 qwen3:8b (5.2GB)를 다운받는다
cd backend
pip install -r requirements.txt
# 기존 프로세스 제거
#pkill -f "python main.py" && sleep 2
python main.py
백엔드 서버가 http://localhost:8000에서 실행됩니다.
3. 프론트 실행 과정
cd frontend
rm -rf node_modules package-lock.json
npm install
# 기존 프로스세 제거
#pkill -f "react-scripts"
npm start
프론트엔드가 http://localhost:3000에서 실행됩니다.
📖 사용법
-
로그인: 파일 업로드 버튼(📁)을 클릭하여 로그인
- 아이디:
admin - 비밀번호:
researchqa
- 아이디:
-
PDF 업로드: 로그인 후 "PDF 업로드" 메뉴에서 파일 업로드
- 최대 5개 파일까지 업로드 가능
- PDF 파일만 업로드 가능
-
챗봇 대화: 메인 화면에서 업로드된 문서에 대해 질문
- 참조 문서 클릭 시 PDF 뷰어에서 해당 페이지 표시
- 키보드 네비게이션 지원 (화살표키, Home, End)
-
PDF 뷰어: Adobe Reader 스타일의 고급 뷰어
- 연속 페이지 모드 지원
- 줌 인/아웃, 회전 기능
- 키보드 네비게이션
🚀 주요 기능
- 📄 PDF 문서 업로드: PDF 파일을 드래그 앤 드롭 또는 클릭으로 업로드
- 🤖 AI 챗봇: 업로드된 문서를 기반으로 한 질문 답변
- 📚 문서 관리: 업로드된 문서 목록 조회, 검색, 삭제
- 🔒 보안 로그인: 관리자 인증 시스템
- 👁️ PDF 뷰어: Adobe Reader 스타일의 고급 PDF 뷰어
- 🔍 벡터 검색: ChromaDB 기반 정확한 문서 검색
🛠️ 기술 스택
백엔드
- FastAPI: 고성능 Python 웹 프레임워크
- LangChain v0.3: AI 프레임워크 (RAG, 체인, 에이전트)
- KoE5: 한국어 임베딩 모델 (jhgan/ko-sroberta-multitask)
- ChromaDB: 벡터 데이터베이스 (LangChain 통합)
- Ollama: LLM 모델 서빙 (LangChain 통합)
- Docling: 최신 PDF 파싱 라이브러리
- PostgreSQL: 메타데이터 저장소
프론트엔드
- React 18: 최신 React 버전
- TypeScript: 타입 안전성
- Tailwind CSS: 유틸리티 기반 CSS 프레임워크
- Framer Motion: 애니메이션 라이브러리
- Lucide React: 아이콘 라이브러리
- React PDF: PDF 뷰어 컴포넌트
📦 패키지 구조
백엔드 패키지 (backend/requirements.txt)
# Core Web Framework
fastapi>=0.104.1
uvicorn>=0.24.0
python-multipart>=0.0.6
pydantic>=2.7.4
# LangChain v0.3 AI Framework
langchain>=0.3.0
langchain-community>=0.3.0
langchain-core>=0.3.0
langchain-experimental>=0.3.0
# LLM Integration
ollama>=0.6.0
# Vector Database & Embeddings
chromadb>=0.4.22
sentence-transformers>=2.2.2
# PDF Processing
docling>=2.55.0
docling-core>=2.48.0
# Database
psycopg2-binary>=2.9.9
# Utilities
python-dotenv>=1.0.0
numpy>=1.26.4
프론트엔드 패키지 (frontend/package.json)
# Core React
react: ^18.2.0
react-dom: ^18.2.0
react-scripts: 5.0.1
typescript: ^4.9.5
# UI & Styling
framer-motion: ^10.16.0
lucide-react: ^0.294.0
tailwindcss: ^3.3.0
autoprefixer: ^10.4.0
postcss: ^8.4.0
# PDF Viewer
react-pdf: ^10.1.0
pdfjs-dist: ^5.3.93
# TypeScript Types
@types/react: ^18.2.0
@types/react-dom: ^18.2.0
@types/node: ^20.0.0
🔌 API 엔드포인트 (LangChain 기반)
GET /: 루트 엔드포인트GET /health: 헬스 체크 (LangChain 서비스 상태 포함)POST /chat: LangChain RAG 기반 챗봇 대화POST /upload: PDF 파일 업로드 및 LangChain 처리GET /files: 파일 목록 조회DELETE /files/{file_id}: 파일 삭제 (LangChain 벡터스토어 포함)GET /pdf/{file_id}/view: PDF 파일 조회GET /search: LangChain 유사 문서 검색GET /stats: 시스템 통계 (LangChain 컬렉션 정보 포함)
📁 프로젝트 구조
researchqa/
├── backend/ # 백엔드 서버 (LangChain 기반)
│ ├── main.py # FastAPI 메인 애플리케이션 (LangChain)
│ ├── main_legacy.py # 기존 직접 구현 버전 (백업)
│ ├── requirements.txt # Python 의존성 (LangChain 포함)
│ ├── services/ # LangChain 서비스 모듈
│ │ ├── __init__.py # 서비스 패키지 초기화
│ │ └── langchain_service.py # LangChain RAG 서비스
│ ├── uploads/ # 업로드된 파일 저장소
│ ├── vectordb/ # ChromaDB 벡터 데이터베이스
│ └── parser/ # 문서 파서 모듈
│ ├── pdf/ # PDF 파서
│ │ ├── MainParser.py # 메인 PDF 파서
│ │ └── Parser1.py # 확장 PDF 파서
│ └── ocr/ # OCR 파서
│ ├── MainParser.py # 메인 OCR 파서
│ └── Parser1.py # 확장 OCR 파서
├── frontend/ # 프론트엔드 애플리케이션
│ ├── src/
│ │ ├── components/ # React 컴포넌트
│ │ │ ├── ChatInterface.tsx # 채팅 인터페이스
│ │ │ ├── FileUploadModal.tsx # 파일 업로드 모달
│ │ │ ├── LoginModal.tsx # 로그인 모달
│ │ │ ├── MessageBubble.tsx # 메시지 버블
│ │ │ ├── PDFViewer.tsx # PDF 뷰어
│ │ │ └── TypingIndicator.tsx # 타이핑 인디케이터
│ │ ├── contexts/ # React 컨텍스트
│ │ │ ├── AuthContext.tsx # 인증 컨텍스트
│ │ │ ├── ChatContext.tsx # 채팅 컨텍스트
│ │ │ └── FileContext.tsx # 파일 컨텍스트
│ │ ├── App.tsx # 메인 앱 컴포넌트
│ │ ├── index.tsx # 엔트리 포인트
│ │ └── index.css # 글로벌 스타일
│ ├── public/ # 정적 파일
│ │ ├── images/ # 이미지 파일
│ │ ├── pdf.worker.min.js # PDF.js 워커
│ │ ├── AnnotationLayer.css # PDF 주석 레이어
│ │ └── TextLayer.css # PDF 텍스트 레이어
│ ├── package.json # Node.js 의존성
│ ├── tailwind.config.js # Tailwind 설정
│ ├── postcss.config.js # PostCSS 설정
│ └── tsconfig.json # TypeScript 설정
├── start_backend.sh # 백엔드 시작 스크립트
├── start_frontend.sh # 프론트엔드 시작 스크립트
├── package.json # 루트 패키지 설정
└── README.md # 프로젝트 문서
✨ 주요 특징
- 🔍 최신 PDF 파싱: Docling을 사용한 고성능 PDF 텍스트 추출
- 🇰🇷 한국어 최적화: KoE5 임베딩 모델로 한국어 문서 처리
- 📱 반응형 UI: 모바일과 데스크톱 모두 지원
- 💬 실시간 채팅: REST API 기반 실시간 대화
- 🎯 정확한 검색: LangChain RAG로 정확한 답변
- 👁️ 고급 PDF 뷰어: Adobe Reader 스타일의 뷰어
- 🔒 보안: JWT 기반 인증 시스템
- ⚡ 고성능: FastAPI와 LangChain으로 최적화된 성능
- 🚀 확장성: LangChain v0.3 기반 향후 고도화 가능
- 🔗 체인 기반: RAG, 에이전트, 메모리 등 다양한 AI 패턴 지원
🗄️ 데이터베이스
- ChromaDB: 벡터 임베딩 저장 및 유사도 검색 (LangChain 통합)
- PostgreSQL: 파일 메타데이터 및 사용자 정보 저장
- LangChain VectorStore: 확장 가능한 벡터 검색 인터페이스
🔧 개발 환경
- Python: 3.8+
- Node.js: 16+
- PostgreSQL: 12+
- Ollama: 최신 버전
📝 라이선스
MIT License
🤝 기여하기
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
📞 지원
프로젝트에 대한 질문이나 지원이 필요하시면 이슈를 생성해 주세요.