티스토리 뷰
RAG 기반 AI 챗봇 시스템 기획서
1. 개요
본 문서는 Streamlit과 LangChain을 기반으로 구축된 RAG(Retrieval-Augmented Generation) 챗봇 시스템의 소스 코드 분석 결과를 담고 있습니다. 이 시스템은 사용자가 업로드한 PDF 문서의 내용을 기반으로 질문에 답변하는 AI 챗봇 기능을 제공합니다.
2. 시스템 구성도
다음은 시스템의 전체적인 데이터 흐름과 아키텍처를 나타낸 구성도입니다.
+----------------------+ +-------------------------+ +---------------------+ +--------------------+
| User (Web UI) |----->| Streamlit Web App |----->| LangChain Pipeline |----->| OpenAI LLM |
+----------------------+ +-------------------------+ +---------------------+ +--------------------+
^ | ^ | |
| | | | (Generated Answer) |
| (Bot Response) | (Upload) | (Query) | |
| v | v |
| +---------------+ | +---------------------+ +--------------------+
+----------------------| FAISS Vector |<------------| OpenAI Embeddings |<-----| Document Processor |
| Store | +---------------------+ +--------------------+
+---------------+ ^
| (PDF Docs)
|
+--------------------+
| User's Documents |
+--------------------+
+----------------------+ +-------------------------+ +---------------------+ +--------------------+
| User (Web UI) |----->| Streamlit Web App |----->| LangChain Pipeline |----->| OpenAI LLM |
+----------------------+ +-------------------------+ +---------------------+ +--------------------+
^ | ^ | |
| | | | (Generated Answer) |
| (Bot Response) | (Upload) | (Query) | |
| v | v |
| +---------------+ | +---------------------+ +--------------------+
+----------------------| FAISS Vector |<------------| OpenAI Embeddings |<-----| Document Processor |
| Store | +---------------------+ +--------------------+
+---------------+ ^
| (PDF Docs)
|
+--------------------+
| User's Documents |
+--------------------+
3. 핵심 기능
3.1. 문서 로딩 및 전처리
- 기능: 사용자가 업로드한 PDF 문서를 텍스트 데이터로 변환하고, LLM이 처리하기 용이하도록 작은 텍스트 조각(Chunk)으로 분할합니다.
- 사용 기술:
PyPDFLoader: PDF 파일을 로드하여 페이지별 텍스트로 분리합니다.RecursiveCharacterTextSplitter: 텍스트를 의미적으로 연관된 단위로 나누기 위해 재귀적으로 분할합니다. (Chunk size: 1000, Overlap: 200)
3.2. 임베딩 및 벡터 저장소 (Vector Store)
- 기능: 전처리된 텍스트 조각들을 고차원 벡터로 변환(임베딩)하고, 이를 검색 가능한 데이터베이스에 저장합니다.
- 사용 기술:
OpenAIEmbeddings: OpenAI의 임베딩 모델을 사용하여 텍스트를 벡터로 변환합니다.FAISS (Facebook AI Similarity Search): 변환된 벡터를 인메모리(in-memory)에 저장하여 빠르고 효율적인 유사도 검색을 지원합니다.
3.3. 검색 (Retrieval)
- 기능: 사용자의 질문을 벡터로 변환한 뒤, 벡터 저장소(FAISS) 내에서 가장 유사도가 높은 문서 조각들을 검색합니다.
- 사용 기술:
FAISS.similarity_search: 사용자 질문 벡터와 가장 가까운 K개의 문서 벡터를 찾는 역할을 합니다.
3.4. 답변 생성 (Generation)
- 기능: 검색된 문서 조각(Context)과 사용자의 원본 질문을 함께 LLM에 전달하여, 주어진 문맥에 가장 적합한 답변을 생성합니다.
- 사용 기술:
OpenAI LLM: OpenAI의 대규모 언어 모델을 사용하여 최종 답변을 생성합니다.load_qa_chain(stuff type): 검색된 모든 문서 조각을 하나의 컨텍스트로 묶어 LLM에 전달하는 LangChain의 기본 체인입니다.
3.5. 사용자 인터페이스 (UI)
- 기능: 사용자가 PDF 문서를 업로드하고, 질문을 실시간으로 입력하며 답변을 확인할 수 있는 웹 인터페이스를 제공합니다.
- 사용 기술:
Streamlit: 파이썬 코드만으로 손쉽게 대화형 웹 애플리케이션을 구축할 수 있도록 지원합니다. 채팅 기록, 파일 업로더, 상태 관리(st.session_state) 등의 기능을 활용합니다.
4. 기술 스택
- 웹 프레임워크: Streamlit
- LLM 오케스트레이션: LangChain
- LLM 및 임베딩: OpenAI
- 벡터 저장소: FAISS (CPU)
- 문서 로더: PyPDF
- 환경 변수 관리: python-dotenv
5. 실행 및 배포 가이드
5.1. 사전 요구사항
- Python 3.8 이상
- OpenAI API 키
5.2. 로컬 실행 방법
- 저장소 복제 및 이동:
# git clone <repository_url> # cd <repository_directory> - 필요 라이브러리 설치:
pip install -r requirements.txt - 환경 변수 설정:
.env파일을 생성하고 내부에 OpenAI API 키를 추가합니다.OPENAI_API_KEY="sk-..."
- Streamlit 앱 실행:
streamlit run app.py
5.3. (참고) Docker를 이용한 배포
- 함께 제공된
Dockerfile을 사용하면 애플리케이션을 컨테이너화하여 어떤 환경에서든 쉽게 배포할 수 있습니다. - 이미지 빌드:
docker build -t rag-chatbot . - 컨테이너 실행:
docker run -p 8501:8501 -e OPENAI_API_KEY="sk-..." rag-chatbot
'LLM' 카테고리의 다른 글
| [N8N] supabase 삽입, 업서트 및 검색 워크플로우 매뉴얼 (3) | 2025.07.30 |
|---|---|
| 업무 관리 시스템 RAG 챗봇 (1) | 2025.07.25 |
| streamlit 애플리케이션 쿠버네티스 배포 (0) | 2025.07.24 |