티스토리 뷰
RAG 기능 아키텍처 설계서
프로젝트명: 업무 관리 시스템 RAG 챗봇
목적: Streamlit 기반의 웹 인터페이스를 통해 사용자 업로드 문서(Excel, PDF) 및 자산 데이터를 기반으로 질문에 답변하는 RAG(Retrieval-Augmented Generation) 시스템 구현
작성일: 2025년 7월 25일, 오전 08:57 (KST)
1. 시스템 개요
이 시스템은 LangChain, FAISS, SentenceTransformers(BAAI/bge-m3), 및 OpenAI GPT를 활용하여 사용자 문서와 자산 데이터를 벡터화하고, 이를 기반으로 질문에 대한 정확한 답변을 생성하는 RAG 챗봇입니다. Streamlit을 통해 직관적인 UI를 제공하며, 자산 관리 및 업무 학습 기능을 지원합니다.
2. 아키텍처 구성 요소
2.1 프론트엔드
- 도구: Streamlit
- 기능:
- 사용자 인터페이스: 다중 페이지 웹 앱
- 홈, 자산추가, 자산등록, 자산현황, 데이터 시각화, 백터DB 조회, 업무학습
- 입력:
- 문서 업로드(PDF, Excel)
- 자산 데이터 입력 폼
- 챗봇 질문 입력
- 출력:
- 챗봇 답변
- 자산 목록
- 데이터 시각화(Plotly)
- QR 코드 생성
- FAISS 데이터 조회
- 특징:
streamlit_chat으로 대화형 UI 구현- 다중 컬럼 레이아웃
- 세션 상태 관리(
st.session_state)
- 사용자 인터페이스: 다중 페이지 웹 앱
2.2 백엔드
- 도구: Python, LangChain, FAISS, SentenceTransformers, OpenAI API
- 구성 요소:
2.2.1 문서 처리 및 임베딩
- 입력 처리:
- PyPDF2: PDF 텍스트 추출
- OpenPyXL: Excel 텍스트 추출, 병합 셀 처리
- 임베딩 모델:
BAAI/bge-m3(SentenceTransformers)- 다국어, 다기능, 다중 세분성 지원
- 최대 입력 토큰: 8192
- 설정:
use_fp16=True로 성능 최적화
- 텍스트 분할: LangChain
RecursiveCharacterTextSplitter- 청크 크기: 10,000
- 오버랩: 1,000
2.2.2 벡터 저장소
- 도구: FAISS (Facebook AI Similarity Search)
- 인덱스:
IndexFlatL2(L2 거리 기반 유사도 검색) - 저장: 로컬 파일(
faiss_index.faiss)로 저장 및 로드 - 기능: 자산 데이터 및 문서 청크를 벡터화하여 저장, 유사도 검색(
similarity_search)
2.2.3 LLM 및 대화 체인
- LLM: OpenAI
gpt-3.5-turbo- 인증: 환경 변수
OPENAI_API_KEY
- 인증: 환경 변수
- LangChain 구성:
- PromptTemplate: 사용자 질문, 대화 기록, 검색된 컨텍스트를 기반으로 답변 생성
- ConversationSummaryMemory: 대화 요약 메모리 관리
- RunnableSequence: 검색(
FAISS)과 생성(LLM)을 연결
- 동작:
- 사용자 질문 입력
- FAISS에서 관련 문서 검색
- LLM으로 문맥 기반 답변 생성
2.2.4 자산 관리
- 기능:
- 자산 추가/수정/삭제
- QR 코드 생성(
qrcode라이브러리) - FAISS에 자산 정보 벡터화 및 저장
- 데이터 구조: 자산번호(필수), 위치, 장비상태, 시리얼, 구분, 모델명, 시스템명, 제조사(선택)
2.3 데이터 흐름
- 입력:
- Streamlit UI를 통해 Excel/PDF 문서 업로드 또는 자산 데이터 입력
- 문서: PyPDF2/OpenPyXL로 텍스트 추출 →
RecursiveCharacterTextSplitter로 청크 분할 - 자산: 텍스트 포맷팅(
ID:{id} | 자산번호:{asset_no} | ...)
- 임베딩:
BAAI/bge-m3로 텍스트 벡터화(encode,convert_to_tensor=True)- FAISS에 벡터 저장(
IndexFlatL2)
- 검색:
- 사용자 질문 →
BAAI/bge-m3로 질문 임베딩 → FAISS에서 유사도 검색(similarity_search, k=5)
- 사용자 질문 →
- 답변 생성:
- 검색된 문서와 대화 기록을
PromptTemplate에 입력 ChatOpenAI로 답변 생성 → Streamlit UI에 표시
- 검색된 문서와 대화 기록을
- 저장:
- FAISS 인덱스:
faiss_index.faiss파일 - 세션 상태:
st.session_state로 자산/문서 목록 및 대화 기록 관리
- FAISS 인덱스:
2.4 최적화
- FAISS:
IndexFlatL2로 빠른 검색, 로컬 저장으로 오프라인 지원 - BAAI/bge-m3:
use_fp16=True로 계산 속도 향상, 최대 8192 토큰 지원 - LangChain: 캐싱 및 모듈화된 체인 설계로 중복 연산 최소화
- Streamlit: 세션 상태 관리, 비동기 처리(
st.rerun)로 반응성 향상
3. 시스템 다이어그램
```plaintext
[사용자]
↓ (Streamlit UI: 문서 업로드, 질문 입력, 자산 입력)
[프론트엔드: Streamlit]
↓ (PyPDF2/OpenPyXL: 텍스트 추출)
[문서 처리: RecursiveCharacterTextSplitter]
↓ (BAAI/bge-m3: 임베딩 생성)
[벡터 저장소: FAISS]
↓ (유사도 검색: similarity_search)
[LangChain: PromptTemplate + ChatOpenAI]
↓ (답변 생성)
[프론트엔드: Streamlit UI 표시]
'LLM' 카테고리의 다른 글
| [N8N] supabase 삽입, 업서트 및 검색 워크플로우 매뉴얼 (3) | 2025.07.30 |
|---|---|
| RAG 기반 업무관리시스템 구축계획서 (2) | 2025.07.27 |
| streamlit 애플리케이션 쿠버네티스 배포 (0) | 2025.07.24 |