LLM을 활용한 고급 RAG 시스템 구축: FastAPI와 Streamlit 기반 프로젝트
최근 머신 러닝 기술의 발전으로 LLM (Large Language Models) 기반 애플리케이션이 많은 주목을 받고 있습니다. 특히, Retrieval-Augmented Generation (RAG)은 제한된 정보로부터 정확하고 유의미한 답변을 생성할 수 있는 강력한 기술입니다. 이번 포스트에서는 FastAPI와 Streamlit을 활용하여 RAG 기반의 고급 시스템을 구축한 프로젝트의 기술적 스펙과 구현 사항을 공유하겠습니다.
🔸 시스템 아키텍처
백엔드 시스템 (FastAPI)
-
모듈화된 구조
app/
디렉토리 기반으로 설계하여 코드의 유지보수성과 확장성을 확보하였습니다.- 각 기능을 독립적으로 관리할 수 있는 모듈화된 구조.
-
서비스 레이어:
- LLM, Memory, RAG 서비스를 분리하여 각각의 역할을 명확히 정의.
- 서비스 간 의존도를 줄여 독립적인 테스트와 디버깅이 가능.
-
API 레이어:
- 채팅 엔드포인트와 라우터 설계.
- FastAPI로 구현된 RESTful API를 통해 백엔드 기능 제공.
-
유틸리티:
- 로깅: 디버깅 및 시스템 상태 파악을 위한 중앙화된 로깅.
- 성능 측정: 검색 시간 및 응답 생성 시간 등 주요 메트릭을 추적.
벡터 데이터베이스
FAISS (Facebook AI Similarity Search)
- 고성능 벡터 검색 라이브러리인 FAISS를 활용.
- 임베딩된 문서를 저장하고, 의미적 검색을 지원.
- 약 10,000개 문서 청크를 저장 가능하며, Top-K 문서 검색 최적화.
LLM 통합
-
내부 LLM 구성
- Bllossom/llama-3.2-Korean-Bllossom-3B
-
DeepSeek-R1 API 연동:
- 외부 LLM API와의 통합을 통해 효율적인 생성형 AI 응답 제공.
- 최대 16K 토큰 컨텍스트 창을 지원하여 대규모 질의 처리 가능.
-
시스템 프롬프트 최적화:
- Retrieval-Augmented Generation(RAG) 응답 품질을 높이기 위한 프롬프트 최적화.
프론트엔드 (Streamlit)
-
Streamlit 기반 UI:
- 사용자 친화적인 채팅 인터페이스 설계.
- 실시간 RAG 기반 생성 결과와 성능 데이터 시각화 제공.
-
추가 UI 기능:
- Tree of Thoughts (ToT) 모드 전환:
- ToT 패턴을 활성화/비활성화할 수 있는 옵션 제공.
- 성능 메트릭 시각화:
- 검색 시간, 응답 생성 시간 등 주요 메트릭을 차트 형태로 표시.
- Tree of Thoughts (ToT) 모드 전환:
🔸 특별 구현 기능
1. Tree of Thoughts (ToT) 추론 패턴
ToT는 보다 체계적이고 깊이 있는 답변을 제공하기 위해 설계된 추론 패턴입니다.
-
단계별 프로세스:
- 아이디어 생성: 여러 접근법(3~5개)을 동시에 생성.
- 평가 단계: 각 접근법에 점수를 부여하여 평가.
- 최적화 단계: 가장 최적 접근법을 선택하여 최종 응답 생성.
-
결과:
일반 RAG보다 구조적이고 명확한 응답을 생성합니다. 특히, 복잡한 문제 해결 및 심층적인 답변 생성에서 우수한 성능을 발휘.
2. 고급 RAG 시스템
-
컨텍스트 검색 최적화:
- Top-K 문서 검색을 통해 가장 연관성 높은 정보를 선택.
-
관련성 점수 가중치 적용:
- 검색 과정에서 문서의 중요도와 관련성 점수를 부여해 품질을 향상.
-
결과 재순위화 로직:
- 검색 결과를 재조정하고 최적 응답을 보장하기 위한 커스텀 로직 구현.
3. 메모리 시스템
-
ConversationBufferMemory:
- 대화 이력을 관리하여 맥락을 유지.
- 사용자가 이전 대화에 언급한 내용을 자연스럽게 참조하는 기능.
-
토큰 한계 관리:
- 입력 크기가 컨텍스트 창을 초과하지 않도록 설계.
- 토큰 제한 관리 시스템으로 대규모 컨텍스트 처리 가능.
🔸 배포 환경
서버 환경:
- 서버는 DigitalOcean Droplet을 활용하여 직접 배포.
- 스펙:
- 4 CPU, 8GB RAM
- 소규모 프로젝트나 MVP를 위한 최적의 환경.
운영체제:
- Ubuntu 22.04 LTS:
- 안정성과 보안성이 뛰어난 장기 지원 버전(OS).
서비스 관리:
systemd
를 사용하여 서비스 자동 실행 및 재시작 처리.
포트 구성:
- 8000번 포트: FastAPI 백엔드 RESTful API.
- 8501번 포트: Streamlit 프론트엔드 대화형 UI.
모니터링:
- 로깅 및 성능 메트릭 수집으로 시스템 상태를 지속적으로 추적.
🔸 성과와 주요 특징
- 고급 RAG와 ToT 알고리즘 활용으로 일반 RAG 시스템보다 신뢰성과 응답 품질 향상.
- 모듈화된 구조로 유지보수와 확장성 제공.
- FAISS 벡터 데이터베이스로 고성능 의미적 검색 지원.
- Streamlit 프론트엔드를 통해 사용자 친화적인 UI 제공.
🔸 마무리
이 프로젝트는 최신 기술 스택과 고급 알고리즘을 활용하여 LLM 기반의 고급 RAG 시스템을 구축한 사례입니다. FastAPI와 Streamlit을 기반으로 백엔드와 프론트엔드가 조화를 이루며, 사용자가 보다 체계적이고 정확한 정보를 얻을 수 있도록 설계되었습니다. 앞으로도 이 같은 기술을 바탕으로 한 확장성과 품질을 높이는 프로젝트가 기대됩니다.
이 글이 프로젝트를 이해하거나 유사한 시스템을 설계하는 데 도움이 되셨길 바랍니다. 더 많은 정보와 구현 세부사항이 궁금하다면 댓글로 남겨주세요! 😊
고등학교의 진로교사입니다. 학생들의 진로상담응 하는 rag챗봇을 만들기 위해 문외한임에도 노력중입니다. 올려주신 글에 맞춰 시스템을 구축해보려고 합니다. 혹시 기본적인 코드를 부탁드리는건 무리겠지요? 조언을 해주실 부분이 있으시다면 조금이나마 추가적인 정보를 주시면 감사하겠습니다. 혹시몰라 메일주소 남깁니다. 감사합니디! prinz1@naver.com
https://www.skyer9.pe.kr/wordpress/?p=10493
여기를 참조 바랍니다.