이 프로젝트는 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
이 프로젝트는 Docker 컨테이너 환경에서 실행됩니다. 호스트 머신은 Ubuntu 24.04 LTS 환경을 기준으로 개발 및 테스트되었지만, 컨테이너는 ubuntu:22.04를 기반으로 빌드되며 ROCm 드라이버 또한 Ubuntu 22.04(Jammy) 버전을 사용해야 할 수 있습니다. 컨테이너가 호스트 머신의 GPU 자원과 Ollama 서버를 원활하게 사용하기 위해 다음의 사전 준비가 필요합니다.
-
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명령어가 정상적으로 실행되는지 확인하여 설치를 검증합니다.
- 이 프로젝트는 AMD GPU 가속을 활용하는 ROCm 환경에 최적화되어 있으므로, 호스트 머신에
-
Docker 설치: 이 프로젝트는 Docker 컨테이너 환경에서 실행됩니다. Docker 공식 홈페이지를 참고하여 설치를 진행해주세요.
-
Ollama 설치 및 모델 다운로드:
- Ollama 웹사이트의 안내에 따라 호스트 머신에 Ollama를 설치합니다.
- 터미널에서
ollama pull qwen:14b와 같이 명령어를 실행하여 사용할 모델을 미리 다운로드합니다. Ollama가 외부 애플리케이션(Docker 컨테이너)의 요청을 받을 수 있도록 설정해야 할 수 있습니다.
사전 준비가 완료되면, 프로젝트를 실행할 수 있습니다.
-
프로젝트 클론
git clone https://github.com/your-username/rag-chat.git cd rag-chat -
도커 이미지 빌드 프로젝트 루트 디렉토리에서 다음 명령어를 실행하여 도커 이미지를 빌드합니다.
docker build -t rag-chat-app . -
애플리케이션 실행 프로젝트에 포함된
run.sh스크립트를 사용하여 애플리케이션을 실행합니다. 이 스크립트는 컨테이너가 호스트의 네트워크(--network="host")를 사용하도록 설정하여, 컨테이너 내부에서 호스트 머신에 설치된 Ollama 서버와 원활하게 통신할 수 있도록 합니다../run.sh
-
웹 브라우저에서 접속 웹 브라우저를 열고
http://localhost:8501주소로 접속하면 챗봇 애플리케이션을 사용할 수 있습니다.
이 MVP를 기반으로 다음과 같은 개선을 통해 더욱 완성도 높은 프로젝트로 발전시킬 수 있습니다.
- 프로젝트 구조 개선 (리팩토링)
- 현재
app.py에 모든 코드가 집중되어 있습니다. 이를ui.py,rag_logic.py,utils.py등 기능별 모듈로 분리하여 코드의 가독성과 유지보수성을 높입니다.
- 현재
- 지속성(Persistence) 추가
- 현재는 앱 세션이 종료되면 채팅 기록과 문서 정보가 사라집니다. 채팅 기록과 벡터 데이터를 파일이나 DB에 저장하여, 나중에 세션을 다시 시작해도 이전 상태를 불러올 수 있도록 개선합니다.
- 임베딩 모델 선택 기능: 사용자가 UI에서 직접 임베딩 모델을 선택할 수 있는 기능을 추가합니다.
- 프롬프트 고도화: RAG 성능을 높이기 위해 프롬프트 엔지니어링을 추가적으로 진행합니다.
이 프로젝트에 기여하고 싶으시거나 질문이 있으시면 언제든지 이슈를 등록해주세요!