본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 10. 03:50

다양한 파일 유형을 처리하는 Retrieval-Augmented Generation (RAG) 시스템 구현

요약

본 프로젝트는 FastAPI, Qdrant, Streamlit 등을 활용하여 다양한 파일 유형을 처리하는 RAG 시스템 구현 가이드입니다. 이 시스템은 마이크로서비스 아키텍처로 설계되어 문서 처리, 임베딩, 검색 기능을 효율적으로 분리했습니다. Grafana를 통한 모니터링 기능까지 포함하여 확장성과 유지보수성을 높였습니다.

핵심 포인트

  • FastAPI와 Qdrant를 활용한 백엔드 구축
  • Streamlit으로 사용자 친화적인 프론트엔드 구현
  • 마이크로서비스 아키텍처로 시스템 분리 및 확장성 확보
  • Grafana 대시보드를 통한 시스템 성능 모니터링 기능 제공

본 프로젝트는 다양한 파일 유형을 처리할 수 있는 Retrieval-Augmented Generation (RAG) 시스템을 구현합니다. 이 시스템은 백엔드에 FastAPI를, 벡터 데이터베이스로 Qdrant를, 프론트엔드 인터페이스로 Streamlit을 사용하며, Grafana를 통해 모니터링 기능을 포함하고 있습니다. 이 시스템은 다양한 문서 유형으로부터 정보를 효율적으로 처리, 저장 및 검색하도록 설계되었습니다.

이 시스템은 확장성과 유지보수성을 높이기 위해 여러 구성 요소로 나뉜 마이크로서비스 아키텍처로 설계되었습니다:

  • 백엔드 환경 (FastAPI): 문서 처리 및 임베딩을 담당합니다.

    • Qdrant 벡터 데이터베이스와의 상호 작용을 관리합니다.
    • REST API 엔드포인트를 제공합니다.
    • 장점:
      • 빠르고 효율적인 API 처리
      • 성능 향상을 위한 비동기(Async) 지원
      • 벡터 데이터베이스와의 쉬운 통합
      • 확장 가능한 문서 처리
  • 프론트엔드 환경 (Streamlit): 문서 업로드 및 쿼리를 위한 사용자 인터페이스를 제공합니다.

    • 검색 결과와 문서 정보를 표시합니다.
    • 장점:
      • 사용자 친화적인 인터페이스
      • 실시간 업데이트
      • 커스터마이징 및 확장이 용이함
      • 반응형 디자인
  • 저장 환경: 벡터 저장을 위해 Qdrant를, 메타데이터 저장을 위해 PostgreSQL을 사용합니다. 파일 관리를 위한 문서 저장 서비스가 포함됩니다.

    • 장점:
      • 효율적인 벡터 유사성 검색
      • 신뢰할 수 있는 메타데이터 관리
      • 유연한 문서 저장 옵션
      • 확장 가능한 아키텍처
├── backend/ # FastAPI 백엔드
│ ├── app/ # 애플리케이션 코드
│ ├── backend.Dockerfile # 컨테이너 설정
...
  • 백엔드 API: URL: http://localhost:8000

  • API 문서: http://localhost:8000/docs

  • 프론트엔드 인터페이스 -
    Grafana 대시보드: URL: http://localhost:3000

  • 기본 자격 증명:

  • 사용자 이름(Username): admin

  • 비밀번호(Password): admin

  • Docker

  • Docker Compose

  • Python 3.9+

  • 저장소 클론: git clone <repository-url>
    cd <repository-name>

  • 환경 변수 설정: docker-compose 파일로 이동하여 nvidia api 키를 추가합니다. NVIDIA_KEY=<your_api_key>


서비스 시작하기
docker-compose up -d


모든 서비스가 시작될 때까지 대기하기
시스템은 다음 서비스를 포함합니다:

  • 백엔드 (FastAPI)
  • 프론트엔드 (Streamlit)
  • Qdrant
  • PostgreSQL
  • 문서 저장소 (Document Storage)
  • Grafana


벡터 데이터베이스 채우기
백엔드 컨테이너 터미널로 이동하여 다음을 실행합니다:
python rag.py

이 스크립트는 document_storage 컨테이너에서 데이터를 가져와 임베딩(embedding)을 적용하고 벡터 데이터베이스 컨테이너 (Qdrant)로 데이터를 전송합니다.


웹 앱 접속하기

  • http://localhost:8501 에서 프론트엔드 인터페이스를 엽니다.
  • 검색 기능을 사용하여 문서를 조회합니다.
  • 예시:


Grafana 대시보드 접속하기

  • Grafana 대시보드를 통해 시스템 성능을 모니터링할 수 있습니다.
  • http://localhost:3000 에서 grafana 인터페이스를 엽니다.
  • 사용자 이름 (Username):
    admin


비밀번호 (Password):
admin

(브라우저에서 비밀번호 변경 메시지가 표시되지만, 무시하고 동일한 비밀번호를 다시 입력합니다) - Connections로 이동하여 PostgreSQL을 검색합니다.

  • 연결(connection)을 클릭한 다음 Add new data source를 클릭합니다.
  • 아래와 같이 구성을 합니다:
  • 호스트 URL (Host URL):<your_postgre_container_hostname>:5432

(터미널에서 다음 명령어를 실행하여 postgres 호스트 이름을 확인할 수 있습니다)
docker exec rag_postgres hostname

  • 데이터베이스 이름 (Database name):
    admin

  • 사용자 이름 (Username):
    admin

  • 비밀번호 (Password):
    admin

  • TLS/SSL 모드 (Mode):<br>disable<br>

  • 호스트 URL (Host URL):

  • Save & test를 클릭합니다.

  • Dashboard > New > Import를 클릭합니다.

  • 폴더 observability에 저장된 대시보드를 업로드합니다.

  • 대시보드가 로드된 후, 시각화(visualization)가 실행되는 첫 번째 시간에 각 패널을 업데이트해야 합니다.

  • 각 시각화별로:

  • 오른쪽 상단 모서리의 세 점을 클릭합니다.

Edit<br>Run query<br>

  • 클릭합니다.

  • 첫 번째 업데이트 후에는 설정된 새로고침 간격에 따라 시각화가 자동으로 업데이트됩니다.

  • 다양한 파일 유형에 대한 문서 처리

  • 시맨틱 검색 기능(Semantic search)

  • 실시간 문서 업로드 및 처리

  • 벡터 유사성 검색(Vector similarity search)

  • 시스템 모니터링 및 메트릭(Metrics)

  • 확장 가능한 아키텍처(Scalable architecture)

  • 사용자 친화적인 인터페이스(User-friendly interface)

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0