요즘 LLM의 매력에 푹 빠져서, 오랜만에 노마드 코더님의 강의를 듣고 있는데요😄
문서 정보를 제공해주는 챗봇 애플리케이션을 제작하는 과정이 재밌으면서, 정말 배울 점이 많아 이 곳에 정리하려고 합니다. 논문 내용을 정리하거나, 막히는 부분이 있을 때 ChatGPT를 활용하는데, 서비스를 클론 코딩을 해볼 수 있어 정말 좋았습니다!
목표는 챗봇 애플리케이션을 만드는 것이며, 챗봇은 주어진 문서에 대한 정보를 제공하는 역할을 수행합니다. 이때, 웹 애플리케이션 제작을 위해 Streamlit 프레임워크를 사용하였습니다. 또한, Langchain을 통해, LLM 기반 챗봇 구현을 수행했습니다.
전체 코드와 데모 영상은 아래 깃허브 링크에 있으니, 참고하시면 좋을 것 같습니다!
https://github.com/jihoahn9303/Langchain
챗봇 애플리케이션을 위해 구현해야 할 요소는 크게 다음과 같습니다.
<aside> 💡 To-do list
</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 기반 응답을 위해 아래의 동작을 수행해야 합니다.