Skip to content

hwbae42/local_RAG_chatbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 나만의 대화형 문서 Q&A 챗봇

이 프로젝트는 Streamlit과 LangChain을 기반으로 한 RAG(Retrieval-Augmented Generation) 챗봇의 MVP(최소 기능 제품)입니다. 사용자가 직접 PDF, DOCX, TXT와 같은 여러 개의 문서를 동시에 업로드하면, 챗봇이 해당 문서들의 내용을 학습하여 사용자의 질문에 답변합니다.

✨ 주요 기능

  • 다중 파일 처리: 여러 개의 문서를 동시에 업로드하여 하나의 통합된 지식 베이스를 구축할 수 있습니다.
  • 대화 맥락 기억: 이전 대화 내용을 기억하고, 이를 바탕으로 사용자의 새로운 질문 의도를 정확하게 파악합니다.
  • 실시간 답변 스트리밍: 챗봇의 답변이 타이핑되듯이 실시간으로 표시되어 사용자 경험을 향상시킵니다.
  • 답변별 출처 표시: 각각의 답변에 대해, 어떤 문서의 어느 부분을 참고했는지 출처를 명확히 보여주어 답변의 신뢰도를 높입니다.
  • 간편한 웹 UI: Streamlit을 사용하여 사용자가 쉽게 문서를 업로드하고 챗봇과 상호작용할 수 있습니다.
  • Ollama 연동 및 모델 선택: 로컬 환경에서 Ollama를 통해 qwen3:14b(기본) 같은 강력한 오픈소스 LLM을 손쉽게 구동하고, UI에서 직접 모델을 선택하여 사용할 수 있습니다.
  • 컨테이너 기반 실행: Dockerfile과 실행 스크립트(run.sh)를 제공하여, 의존성 문제 없이 일관된 환경에서 애플리케이션을 손쉽게 실행할 수 있습니다.

🛠️ 기술 스택

  • 언어: Python 3.10
  • 웹 프레임워크: Streamlit
  • LLM/AI:
    • LangChain: RAG 파이프라인 및 체인 구성
    • Ollama: 로컬 LLM 구동
    • Sentence-Transformers: 텍스트 임베딩
    • FAISS: 벡터 스토어
  • 컨테이너: Docker
  • GPU 지원: AMD ROCm

🚀 시작하기

사전 준비 (Host Machine)

이 프로젝트는 Docker 컨테이너 환경에서 실행됩니다. 호스트 머신은 Ubuntu 24.04 LTS 환경을 기준으로 개발 및 테스트되었지만, 컨테이너는 ubuntu:22.04를 기반으로 빌드되며 ROCm 드라이버 또한 Ubuntu 22.04(Jammy) 버전을 사용해야 할 수 있습니다. 컨테이너가 호스트 머신의 GPU 자원과 Ollama 서버를 원활하게 사용하기 위해 다음의 사전 준비가 필요합니다.

  1. AMD GPU 및 ROCm 드라이버 설치:

    • 이 프로젝트는 AMD GPU 가속을 활용하는 ROCm 환경에 최적화되어 있으므로, 호스트 머신에 ROCm 6.4.1 버전 드라이버가 반드시 설치되어 있어야 합니다.
    • 참고: Ubuntu 24.04에서는 작성 시점 기준 ROCm 6.4.1의 공식 패키지가 제공되지 않을 수 있습니다. 이 경우, Ubuntu 22.04(Jammy)용 패키지를 사용하여 설치를 진행해야 합니다.
    • 자세한 설치 방법은 AMD ROCm 공식 설치 문서를 참고하여 진행해주세요. 다음은 ROCm 6.4.1 설치 예시입니다.
    # 1. AMD GPU 저장소 설정
    sudo mkdir --parents --mode=0755 /etc/apt/keyrings
    sudo wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | sudo gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null
    
    # 2. ROCm 6.4.1 패키지 저장소 추가
    # Ubuntu 24.04에서도 jammy(22.04) 패키지를 사용해야 할 수 있습니다.
    sudo tee /etc/apt/sources.list.d/rocm.list <<'EOF'
    deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/6.4.1/ jammy main
    EOF
    
    # 3. 패키지 목록 업데이트 및 드라이버 설치
    sudo apt-get update
    sudo apt-get install rocm-dkms
    • 설치 후, 시스템을 재부팅하고 rocminfo 명령어가 정상적으로 실행되는지 확인하여 설치를 검증합니다.
  2. Docker 설치: 이 프로젝트는 Docker 컨테이너 환경에서 실행됩니다. Docker 공식 홈페이지를 참고하여 설치를 진행해주세요.

  3. Ollama 설치 및 모델 다운로드:

    • Ollama 웹사이트의 안내에 따라 호스트 머신에 Ollama를 설치합니다.
    • 터미널에서 ollama pull qwen:14b와 같이 명령어를 실행하여 사용할 모델을 미리 다운로드합니다.
    • Ollama가 외부 애플리케이션(Docker 컨테이너)의 요청을 받을 수 있도록 설정해야 할 수 있습니다.

설치 및 실행 (In Project)

사전 준비가 완료되면, 프로젝트를 실행할 수 있습니다.

  1. 프로젝트 클론

    git clone https://github.com/your-username/rag-chat.git
    cd rag-chat
  2. 도커 이미지 빌드 프로젝트 루트 디렉토리에서 다음 명령어를 실행하여 도커 이미지를 빌드합니다.

    docker build -t rag-chat-app .
  3. 애플리케이션 실행 프로젝트에 포함된 run.sh 스크립트를 사용하여 애플리케이션을 실행합니다. 이 스크립트는 컨테이너가 호스트의 네트워크(--network="host")를 사용하도록 설정하여, 컨테이너 내부에서 호스트 머신에 설치된 Ollama 서버와 원활하게 통신할 수 있도록 합니다.

    ./run.sh
  4. 웹 브라우저에서 접속 웹 브라우저를 열고 http://localhost:8501 주소로 접속하면 챗봇 애플리케이션을 사용할 수 있습니다.

📝 향후 계획

이 MVP를 기반으로 다음과 같은 개선을 통해 더욱 완성도 높은 프로젝트로 발전시킬 수 있습니다.

  • 프로젝트 구조 개선 (리팩토링)
    • 현재 app.py에 모든 코드가 집중되어 있습니다. 이를 ui.py, rag_logic.py, utils.py 등 기능별 모듈로 분리하여 코드의 가독성과 유지보수성을 높입니다.
  • 지속성(Persistence) 추가
    • 현재는 앱 세션이 종료되면 채팅 기록과 문서 정보가 사라집니다. 채팅 기록과 벡터 데이터를 파일이나 DB에 저장하여, 나중에 세션을 다시 시작해도 이전 상태를 불러올 수 있도록 개선합니다.
  • 임베딩 모델 선택 기능: 사용자가 UI에서 직접 임베딩 모델을 선택할 수 있는 기능을 추가합니다.
  • 프롬프트 고도화: RAG 성능을 높이기 위해 프롬프트 엔지니어링을 추가적으로 진행합니다.

이 프로젝트에 기여하고 싶으시거나 질문이 있으시면 언제든지 이슈를 등록해주세요!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published