# 연구QA Chatbot AI 기반 연구 문서 분석 도우미 챗봇입니다. PDF 문서를 업로드하고 AI와 대화하여 문서 내용에 대해 질문할 수 있습니다. ## 🚀 설치 및 실행 ### 1. postgreSQL 설치 * localhost에 설치를 한다. * 사용자 설정은 다음과 같다. * 사용자명: woonglab * 비밀번호: !@#woonglab * 데이터베이스: researchqa * 호스트: localhost * 포트: 5432 * 필요한 테이블 * database.sql을 찹고한다. (create 구문으로 실행하면 필요 테이블 생성시킬 수 있음) ### 2. 백엔드 설정 및 실행 ```bash # 먼저 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. 프론트 실행 과정 ```bash cd frontend rm -rf node_modules package-lock.json npm install # 기존 프로스세 제거 #pkill -f "react-scripts" npm start ``` 프론트엔드가 `http://localhost:3000`에서 실행됩니다. ## 📖 사용법 1. **로그인**: 파일 업로드 버튼(📁)을 클릭하여 로그인 - 아이디: `admin` - 비밀번호: `researchqa` 2. **PDF 업로드**: 로그인 후 "PDF 업로드" 메뉴에서 파일 업로드 - 최대 5개 파일까지 업로드 가능 - PDF 파일만 업로드 가능 3. **챗봇 대화**: 메인 화면에서 업로드된 문서에 대해 질문 - 참조 문서 클릭 시 PDF 뷰어에서 해당 페이지 표시 - 키보드 네비게이션 지원 (화살표키, Home, End) 4. **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 ## 🤝 기여하기 1. Fork the Project 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) 4. Push to the Branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request ## 📞 지원 프로젝트에 대한 질문이나 지원이 필요하시면 이슈를 생성해 주세요.