티스토리 뷰

RAG 기반 AI 챗봇 시스템 기획서

1. 개요

본 문서는 StreamlitLangChain을 기반으로 구축된 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. 로컬 실행 방법

  1. 저장소 복제 및 이동:
    # git clone <repository_url>
    # cd <repository_directory>
  2. 필요 라이브러리 설치:
    pip install -r requirements.txt
  3. 환경 변수 설정:
    • .env 파일을 생성하고 내부에 OpenAI API 키를 추가합니다.
      OPENAI_API_KEY="sk-..."
  4. 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

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함