다양한 파일 유형을 처리하는 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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기