LLM을 활용한 고급 RAG 시스템 구축: FastAPI와 Streamlit 기반 프로젝트

By | 2025년 3월 16일
Table of Contents

LLM을 활용한 고급 RAG 시스템 구축: FastAPI와 Streamlit 기반 프로젝트

최근 머신 러닝 기술의 발전으로 LLM (Large Language Models) 기반 애플리케이션이 많은 주목을 받고 있습니다. 특히, Retrieval-Augmented Generation (RAG)은 제한된 정보로부터 정확하고 유의미한 답변을 생성할 수 있는 강력한 기술입니다. 이번 포스트에서는 FastAPIStreamlit을 활용하여 RAG 기반의 고급 시스템을 구축한 프로젝트의 기술적 스펙과 구현 사항을 공유하겠습니다.


🔸 시스템 아키텍처

백엔드 시스템 (FastAPI)

  1. 모듈화된 구조

    • app/ 디렉토리 기반으로 설계하여 코드의 유지보수성과 확장성을 확보하였습니다.
    • 각 기능을 독립적으로 관리할 수 있는 모듈화된 구조.
  2. 서비스 레이어:

    • LLM, Memory, RAG 서비스를 분리하여 각각의 역할을 명확히 정의.
    • 서비스 간 의존도를 줄여 독립적인 테스트와 디버깅이 가능.
  3. API 레이어:

    • 채팅 엔드포인트와 라우터 설계.
    • FastAPI로 구현된 RESTful API를 통해 백엔드 기능 제공.
  4. 유틸리티:

    • 로깅: 디버깅 및 시스템 상태 파악을 위한 중앙화된 로깅.
    • 성능 측정: 검색 시간 및 응답 생성 시간 등 주요 메트릭을 추적.

벡터 데이터베이스

FAISS (Facebook AI Similarity Search)

  • 고성능 벡터 검색 라이브러리인 FAISS를 활용.
  • 임베딩된 문서를 저장하고, 의미적 검색을 지원.
  • 약 10,000개 문서 청크를 저장 가능하며, Top-K 문서 검색 최적화.

LLM 통합

  1. DeepSeek-R1 API 연동:

    • 외부 LLM API와의 통합을 통해 효율적인 생성형 AI 응답 제공.
    • 최대 16K 토큰 컨텍스트 창을 지원하여 대규모 질의 처리 가능.
  2. 시스템 프롬프트 최적화:

    • Retrieval-Augmented Generation(RAG) 응답 품질을 높이기 위한 프롬프트 최적화.

프론트엔드 (Streamlit)

  1. Streamlit 기반 UI:

    • 사용자 친화적인 채팅 인터페이스 설계.
    • 실시간 RAG 기반 생성 결과와 성능 데이터 시각화 제공.
  2. 추가 UI 기능:

    • Tree of Thoughts (ToT) 모드 전환:
      • ToT 패턴을 활성화/비활성화할 수 있는 옵션 제공.
    • 성능 메트릭 시각화:
      • 검색 시간, 응답 생성 시간 등 주요 메트릭을 차트 형태로 표시.

🔸 특별 구현 기능

1. Tree of Thoughts (ToT) 추론 패턴

ToT는 보다 체계적이고 깊이 있는 답변을 제공하기 위해 설계된 추론 패턴입니다.

  • 단계별 프로세스:

    1. 아이디어 생성: 여러 접근법(3~5개)을 동시에 생성.
    2. 평가 단계: 각 접근법에 점수를 부여하여 평가.
    3. 최적화 단계: 가장 최적 접근법을 선택하여 최종 응답 생성.
  • 결과:
    일반 RAG보다 구조적이고 명확한 응답을 생성합니다. 특히, 복잡한 문제 해결 및 심층적인 답변 생성에서 우수한 성능을 발휘.


2. 고급 RAG 시스템

  1. 컨텍스트 검색 최적화:

    • Top-K 문서 검색을 통해 가장 연관성 높은 정보를 선택.
  2. 관련성 점수 가중치 적용:

    • 검색 과정에서 문서의 중요도와 관련성 점수를 부여해 품질을 향상.
  3. 결과 재순위화 로직:

    • 검색 결과를 재조정하고 최적 응답을 보장하기 위한 커스텀 로직 구현.

3. 메모리 시스템

  1. ConversationBufferMemory:

    • 대화 이력을 관리하여 맥락을 유지.
    • 사용자가 이전 대화에 언급한 내용을 자연스럽게 참조하는 기능.
  2. 토큰 한계 관리:

    • 입력 크기가 컨텍스트 창을 초과하지 않도록 설계.
    • 토큰 제한 관리 시스템으로 대규모 컨텍스트 처리 가능.

🔸 배포 환경

서버 환경:

  • 서버는 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 시스템을 구축한 사례입니다. FastAPIStreamlit을 기반으로 백엔드와 프론트엔드가 조화를 이루며, 사용자가 보다 체계적이고 정확한 정보를 얻을 수 있도록 설계되었습니다. 앞으로도 이 같은 기술을 바탕으로 한 확장성과 품질을 높이는 프로젝트가 기대됩니다.


이 글이 프로젝트를 이해하거나 유사한 시스템을 설계하는 데 도움이 되셨길 바랍니다. 더 많은 정보와 구현 세부사항이 궁금하다면 댓글로 남겨주세요! 😊

답글 남기기