썸네일.PNG

요즘 LLM의 매력에 푹 빠져서, 오랜만에 노마드 코더님의 강의를 듣고 있는데요😄

문서 정보를 제공해주는 챗봇 애플리케이션을 제작하는 과정이 재밌으면서, 정말 배울 점이 많아 이 곳에 정리하려고 합니다. 논문 내용을 정리하거나, 막히는 부분이 있을 때 ChatGPT를 활용하는데, 서비스를 클론 코딩을 해볼 수 있어 정말 좋았습니다!

목표는 챗봇 애플리케이션을 만드는 것이며, 챗봇은 주어진 문서에 대한 정보를 제공하는 역할을 수행합니다. 이때, 웹 애플리케이션 제작을 위해 Streamlit 프레임워크를 사용하였습니다. 또한, Langchain을 통해, LLM 기반 챗봇 구현을 수행했습니다.

전체 코드와 데모 영상은 아래 깃허브 링크에 있으니, 참고하시면 좋을 것 같습니다!

https://github.com/jihoahn9303/Langchain

챗봇 애플리케이션을 위해 구현해야 할 요소는 크게 다음과 같습니다.

<aside> 💡 To-do list

  1. 사용자로부터 문서를 제공 받을 위젯 생성
  2. 챗봇을 위한 LLM 모델 생성
  3. RAG(Retrieval Augmented Generation) 구현
  4. 프롬프트 생성
  5. 대화 내용을 출력(display)

</aside>

문서 업로드 위젯 생성

사용자가 문서를 챗봇에 보내는 방법업로드 후에 애플리케이션이 수행할 동작을 정의합니다.

먼저, Streamlit 프레임워크의 file_uploader() 함수를 통해 위젯을 생성하고, 파일을 입력 받을 수 있습니다. 이때, 사이드 바(sidebar)에 위젯을 배치하는 것이 깔끔한 것 같아, 해당 사항을 반영했습니다.

# pages/DocumentGPT.py

import streamlit as st
from streamlit.runtime.uploaded_file_manager import UploadedFile

# embed file uploader inside sidebar
with st.sidebar:
    file: UploadedFile = st.file_uploader(
        label="Upload a .txt .pdf or .docx file",
        type=["pdf", "txt", "docx"]
    )

이때, 챗봇에게 문서를 전달하는 목적을 생각해봅시다!

바로, RAG를 통해 챗봇이 문서를 이해하고, 사용자에게 문서의 정보를 제공하려는 것이죠 :)

따라서, 챗봇은 문서를 제공받은 다음, RAG 기반 응답을 위해 아래의 동작을 수행해야 합니다.