이 프로젝트는 Gradio를 사용한 RAG(Retrieval-Augmented Generation) 챗봇입니다.
- 📄 문서 처리 (PDF, DOCX, TXT)
- 🔍 OCR을 통한 이미지 텍스트 추출
- 🖼️ 이미지 캡셔닝
- 💬 대화형 챗봇 인터페이스
- 🔍 벡터 데이터베이스를 통한 효율적인 검색
- 🧠 대화 히스토리 저장 및 맥락 유지
- 📝 대화 히스토리 관리 기능
- 🔄 자동 시스템 초기화
- 자동 히스토리 저장: 모든 대화가 자동으로 저장됩니다
- 맥락 유지: 이전 대화를 참고하여 일관성 있는 답변 제공
- 히스토리 관리: 대화 히스토리 조회 및 초기화 기능
- 최근 3개 대화 참조: 메모리 효율성을 위한 최적화
- 질문 의도 분석: 키워드 기반으로 검색 범위 자동 결정
- 문서 전용 검색: "문서 요약" 질문 시 문서만 검색
- 이미지 전용 검색: "이미지 분석" 질문 시 이미지만 검색
- 통합 검색: "모든 자료" 질문 시 문서+이미지 모두 검색
- 자동 모드 선택: 질문 복잡도에 따라 RAG 또는 Agent 모드 자동 선택
- RAG 모드: 빠른 검색 및 응답 (단순한 질문)
- Agent 모드: 복잡한 작업 단계별 처리 (복잡한 질문)
- 사용자 선택: 원하는 모드를 직접 선택 가능
- 자동 초기화: 앱 시작 시 자동으로 시스템 초기화
- 향상된 프롬프트: 히스토리를 포함한 더 정확한 답변 생성
- 에러 처리: 더 안정적인 에러 핸들링
- 가상환경 활성화:
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate- 의존성 설치:
pip install -r requirements.txt-
Tesseract OCR 설치:
- Windows: https://github.com/UB-Mannheim/tesseract/wiki
- Linux:
sudo apt-get install tesseract-ocr - Mac:
brew install tesseract
-
API 키 설정 (선택사항):
.env파일에 다음 중 하나 추가:OPENAI_API_KEY=your_api_key_here(OpenAI 사용 시)HUGGINGFACE_API_KEY=your_api_key_here(HuggingFace 사용 시)
python app.py- 자동 히스토리: 모든 대화가 자동으로 저장됩니다
- 히스토리 조회: "📝 대화 히스토리 보기" 버튼 클릭
- 히스토리 초기화: "🗑️ 대화 히스토리 초기화" 버튼 클릭
- 맥락 활용: "이전 대화에서 언급된 내용에 대해 더 자세히 설명해주세요" 같은 질문 가능
-
문서 전용 질문:
- "업로드된 문서들의 주요 내용을 요약해주세요"
- "PDF 파일에서 정보를 찾아주세요"
- "텍스트 문서를 분석해주세요"
-
이미지 전용 질문:
- "이미지에서 어떤 내용이 보이나요"
- "사진을 분석해주세요"
- "스크린샷의 내용을 설명해주세요"
-
통합 질문:
- "업로드된 모든 자료를 요약해주세요"
- "문서와 이미지를 모두 참고해서 답변해주세요"
-
자동 모드 (권장):
- 질문 복잡도에 따라 자동으로 최적 모드 선택
- "업로드된 문서들의 주요 내용을 요약해주세요" → RAG 모드
- "문서를 분석하고 핵심 포인트를 추출해주세요" → Agent 모드
-
수동 모드 선택:
- RAG 모드: 빠른 응답이 필요한 단순한 질문
- Agent 모드: 복잡한 분석이 필요한 질문
-
모드별 특징:
- RAG 모드: 빠른 검색, 출처 정보 표시
- Agent 모드: 단계별 실행 과정, 상세한 분석
RAGtest/
├── app.py # 메인 Gradio 앱 (히스토리 + Agent 기능)
├── rag_agent.py # ReAct DocStore Agent
├── document_processor.py # 문서 처리 모듈
├── image_processor.py # 이미지 처리 모듈
├── rag_system.py # RAG 시스템 핵심 (히스토리 관리)
├── utils.py # 유틸리티 함수들
├── data/ # 문서 저장소
│ └── chromadb/ # 벡터 데이터베이스
├── uploads/ # 업로드된 파일들
└── requirements.txt # 의존성 목록
- RAG 아키텍처: Retriever + Chain + Memory
- 벡터 데이터베이스: ChromaDB
- 임베딩 모델: SentenceTransformer
- LLM: OpenAI GPT, Ollama, HuggingFace
- 웹 인터페이스: Gradio
- 문서 처리: PyPDF2, python-docx
- 이미지 처리: Tesseract OCR, Transformers
이 프로젝트는 다음 개념들을 학습하고 구현합니다:
- Retriever: 벡터 검색을 통한 관련 문서 검색
- Chain: RAG 파이프라인 구성
- Memory: 대화 히스토리 관리
- Vector Database: ChromaDB를 통한 임베딩 저장
- Prompt Engineering: 맥락을 고려한 프롬프트 설계