Skip to content

K-Choseon/choseon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

조선·해양 매뉴얼 기반 RAG 챗봇

선박 매뉴얼 PDF를 업로드하여 질문-답변 및 퀴즈 생성 기능을 제공하는 RAG(Retrieval-Augmented Generation) 기반 챗봇 시스템입니다.

📋 주요 기능

1. 매뉴얼 챗봇

  • RAG 기반 답변: 업로드된 매뉴얼에서 관련 정보를 검색하여 정확한 답변 제공
  • 대화 히스토리: 이전 대화 맥락을 고려한 연속적인 대화 지원
  • 출처 표시: 답변에 참고한 매뉴얼 페이지 및 제목 표시
  • 이미지 추출: 관련 페이지의 이미지 자동 추출 및 표시
  • 다국어 지원: 한국어, 영어, 중국어, 일본어 지원
  • 직급별 맞춤 답변: 사용자 직급에 맞는 수준과 표현으로 답변 조정

2. 퀴즈 생성

  • 객관식 퀴즈: 4지선다 형식의 객관식 문제 생성 (정답 설명 포함)
  • 순서 맞추기 퀴즈: 절차/프로세스의 올바른 순서를 묻는 문제 생성
  • 문제 생성 방식:
    • 무작위: 전체 매뉴얼에서 무작위로 청크 선택
    • 주제 기반: 특정 주제에 대한 관련 청크를 검색하여 문제 생성
  • 드래그 앤 드롭: 순서 맞추기 퀴즈는 드래그로 순서 변경 가능
  • 결과 및 설명: 각 문제에 대한 정답 여부와 상세 설명 제공

3. 매뉴얼 관리

  • PDF 업로드: 매뉴얼 PDF 파일 업로드 및 자동 인덱싱
  • 매뉴얼 삭제: 업로드된 매뉴얼 선택적 삭제
  • 다중 매뉴얼 지원: 여러 매뉴얼을 동시에 관리하고 검색

🛠️ 기술 스택

AI/ML

  • OpenAI API: GPT-4o-mini (답변 생성, 퀴즈 생성), text-embedding-3-small (임베딩)
  • FAISS: 벡터 검색 인덱스 (Facebook AI Similarity Search)
  • NumPy: 벡터 연산

문서 처리

  • PyMuPDF (fitz): PDF 파싱 (텍스트, 테이블, 이미지 추출)
  • Pandas: 테이블 데이터 처리
  • python-docx: DOCX 파일 처리 (역할 정보)
  • Pillow (PIL): 이미지 처리

웹 프레임워크

  • Streamlit: 웹 UI 프레임워크
  • streamlit-sortables: 드래그 앤 드롭 UI 컴포넌트

기타

  • python-dotenv: 환경변수 관리
  • orjson: 고성능 JSON 처리

🚀 설치 및 실행

1. 가상환경 생성 및 의존성 설치

python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt

2. 환경변수 설정

프로젝트 루트에 .env 파일을 생성하고 OpenAI API 키를 설정합니다:

OPENAI_API_KEY=sk-...

3. 앱 실행

streamlit run app.py

브라우저에서 http://localhost:8501로 접속합니다.

📖 사용 방법

매뉴얼 업로드

  1. 상단 우측의 "소스 업로드" 버튼 클릭
  2. PDF 파일 선택 및 업로드
  3. 자동으로 파싱, 청킹, 임베딩, 인덱싱이 진행됩니다
  4. 업로드 완료 후 매뉴얼 목록에서 확인 가능

챗봇 사용

  1. 매뉴얼 챗봇 페이지에서 질문 입력
  2. AI가 매뉴얼을 기반으로 답변 생성
  3. 답변 하단에 참고한 출처(페이지 번호) 표시
  4. 관련 이미지가 있으면 자동으로 표시
  5. "새 채팅" 버튼으로 새 대화 시작
  6. 왼쪽 사이드바에서 이전 대화 히스토리 확인 및 관리

퀴즈 생성 및 풀기

  1. 퀴즈 페이지로 이동
  2. 왼쪽 사이드바에서 설정:
    • 매뉴얼 선택
    • 퀴즈 유형 선택 (객관식 / 순서 맞추기)
    • 문항 수 설정
    • 문제 생성 방식 선택 (무작위 / 주제 기반)
    • 주제 기반 선택 시 주제 입력
  3. "퀴즈 생성" 버튼 클릭
  4. 문제 풀기:
    • 객관식: 선택지 클릭
    • 순서 맞추기: 드래그 앤 드롭으로 순서 변경
  5. "제출" 버튼으로 답안 제출
  6. 결과 확인: 각 문제의 정답 여부와 설명 확인

설정

  • 언어 설정: 상단 우측 "설정" 버튼에서 답변 언어 변경
  • 직급 설정: 설정에서 사용자 직급 선택 (답변 수준 조정)

📁 폴더 구조

choseon/
├── app.py                 # 메인 챗봇 페이지
├── pages/
│   └── 01_퀴즈.py        # 퀴즈 페이지
├── rag/
│   ├── __init__.py
│   ├── parser.py          # PDF 파싱 및 청킹
│   ├── embed.py           # 임베딩 생성
│   ├── index.py           # FAISS 인덱스 관리
│   ├── store.py           # 데이터 저장 및 관리
│   ├── chat.py            # RAG 챗봇 로직
│   ├── quiz.py            # 퀴즈 생성 로직
│   ├── image_extractor.py # 이미지 추출
│   └── role_parser.py     # 직급 정보 파싱
├── data/
│   ├── catalog.json       # 매뉴얼 메타데이터
│   ├── engine_department_roles.docx  # 직급 정보
│   └── manuals/           # 업로드된 매뉴얼 저장소
│       └── {manual_id}/
│           ├── manual.pdf
│           ├── chunks.json
│           ├── emb.npy
│           ├── index.faiss
│           └── meta.json
├── requirements.txt       # 의존성 패키지 목록
├── README.md             # 프로젝트 문서
└── .env                  # 환경변수 (생성 필요)

🔧 주요 기능 상세

RAG (Retrieval-Augmented Generation)

  1. 문서 업로드 시:

    • PDF → 파싱 (텍스트, 테이블, 이미지) → 의미 단위 청킹
    • 각 청크를 text-embedding-3-small로 벡터화
    • FAISS 인덱스 구축 및 저장
  2. 질문 처리 시:

    • 사용자 질문을 벡터로 변환
    • FAISS로 유사한 상위 5개 청크 검색
    • 검색된 청크를 컨텍스트로 GPT-4o-mini에 전달
    • 대화 히스토리 포함하여 답변 생성
  3. 장점:

    • LLM의 환각(Hallucination) 문제 완화
    • 실제 매뉴얼 내용 기반 정확한 답변
    • 출처 추적 가능

퀴즈 생성

  • 객관식: GPT-4o-mini가 매뉴얼 내용 기반으로 4지선다 문제 생성, 정답 설명 포함
  • 순서 맞추기: 절차/프로세스의 단계를 추출하여 순서 배열 문제 생성
  • 청크 선택:
    • 무작위: 전체 청크에서 무작위 선택
    • 주제 기반: FAISS 벡터 검색으로 관련 청크 선택

이미지 처리

  • PDF 파싱 시 이미지의 bounding box(좌표) 정보 저장
  • 관련 청크에 이미지가 포함된 경우, 해당 페이지에서 이미지 추출
  • 답변과 함께 이미지 표시

⚠️ 주의사항

  • 업로드 가능한 파일 형식: PDF만 지원
  • API 키 필요: OpenAI API 키가 반드시 필요합니다

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published