데이터 분석 기록용
ChatGPT assistant API + Streamlit 사용후기 본문
유튜브를 떠돌다가 본 동영상
의미 없이 유튜브를 떠돌던 어느 날 조코딩님이 올린 아래 강의가 눈에 들어왔다.
랭체인으로 수익형 AI 웹서비스 만들기 with ChatGPT, LLaMA 2, RAG
해당 강의를 보고 느낀점은 두 가지였다.
- ChatGPT API사용이 생각보다 어렵지 않게 구성되어 있구나.
- streamlit를 이용한다면 단순히 파이썬으로 프런트를 개발할 수 있는 점을 넘어 굉장히 손쉽게 데이터를 웹으로 표현, 배포할 수 있겠구나.
하지만 필자는 단순히 간단한 사이드 프로젝트를 개발하 것보다는 현재 일하고 있는 에듀테크와 연관된 프로젝트를 진행할 방법이 없을까 고민해 봤고 수업시간 20분~30분 기준 학교를 다니는 학생을 대상으로 한 영어 작문 챗봇을 만들면 재밌겠다고 생각하여 프로젝트를 진행하기로 결정했다.
하지만 생각한 것을 구현하기 위해서는 강의 안에 내용만으로는 부족했다.
조코딩님이 올린 영상에는 내가 A라는 단어를 입력하면 "A라는 것과 관련된 시를 써줘"라고 백엔드에서 자동으로 처리하도록 ChatGPT API로 넘겨서 답변을 받아오는 방식이었다.
문제는 필자가 구현하고자 하는 방식은 이미 기존에 존재하는 거대한 가이드라인에서 정한 절차에 따라 동작하는 방식의 챗봇 구현을 원했다.
다른 방법이 없나 확인하던 중 작년부터 베타 테스트에 들어간 ChatGPT assistant API의 존재에 대해서 알게 되었다.
해당 API의 구동 방식은 아래와 같다.
간단히 위의 도식도를 정리하면 아래와 같다.
- 사용자의 목적이나 이용에 필요한 기반 지식을 미리 학습한 특수목적 AI인 Assistant를 생성한다.
- Assistant를 사용할 대화공간인 Thread를 생성한다. 이때 1개의 Assistant는 n개의 Thread를 가질 수 있다.
- 해당 Thread에 message를 이용하여 사용자와 Assistant 간 대화를 진행한다.
- 사용자가 message를 Assistant에게 보낼 경우 미리 세팅된 모델과 도구를 호출하여 응답에 필요한 작업을 수행하는데 이것을 Run이라고 한다.
- Run에는 여러 단계의 Run Step을 가지는데 queued, in_progress, completed 단계를 가진다. completed 단계를 완료하기 전까지는 실행시킨 Run에 대해서 응답을 response 하지 않는다.
여기서 가장 눈여겨봐야 할 점은 4번과 5번으로 이번 사이드 프로젝트에 있어서 가장 큰 골치 거리를 안겨줬고 아래 과정을 매끄럽게 처리해야 한다는 데 가장 큰 시간을 사용했다.
- 메시지를 입력한다.
- 서버에서 관련 메세지 응답 작업이 바로 완료되지 않으며 작업단계가 완료될 때까지 주기적으로 확인해야 한다.
- 작업이 진행되는 동안 다른 작업이 생성되지 않도록 처리를 해야한다.
사실 백엔드 단에서는 어려운 작업은 아니었지만 처음으로 프런트엔드 작업을 병행하다 보니 해당 처리를 효율적으로 처리할 수 있는데 다소 시간이 걸렸었다.
Streamlit에 대해서
ChatGPT Assistant API에 대한 백엔드 작업은 사실 여러 가지 자료도 많고 공식 Doc에도 내용들이 잘 정리되어 있어 큰 어려움은 없었다. 다만 구현에 있어서 가장 큰 문제점은 streamlit을 이용한 프런트 구현 부분이었다.
물론 streamlit 또한 굉장히 잘 정리된 공식 튜토리얼과 문서가 있기 때문에 입문 자체는 어렵지 않았다.
이런 걸 해본 적이 없는 필자가 문제였지.
streamlit의 첫인상은 굉장히 데이터 분석가가 직접 대시보드를 구성하는데 있어 필요한 많은 것들이 들어가 있다는 것이다.
무엇보다 pandas의 DataFrame과 궁합이 잘 맞는다는 점이나 문법이 간결하다는 점 등 접근허들이 낮다는 점이 가장 마음에 들었다.
그리고 단순히 대시보드를 위한 데이터 시각화 기능 외에도 생성형 AI 모델들이 쏟아지고 있는 상황에 발맞춰 챗봇과 관련된 컴포넌트 및 튜토리얼 또한 완벽하게 제공하고 있다.
필자와 비슷한 프로젝트에 관심이 있다면 해당 튜토리얼을 한번 확인해 본다면 비교적 쉽게 접근할 수 있을 것 같다.
그리고 Streamlit cloud를 이용한다면 Github repo에 있는 app을 손쉽게 배포할 수 있고 main branch에 소스만 변경한다면 자동 배포 또한 원활히 가능하다는 점이 놀랐다. 필자도 이번 프로젝트의 배포는 Github+Streamlit cloud를 통해 손쉽게 배포할 수 있었다.
다만 Streamlit cloud 활용 시 클라우드 환경에 포함되지 않는 외부 패키지를 이용해야 된다면 requirements.txt 파일을 따로 빼서 정리를 해야 하는데 이게 조금 문제가 될 때가 많은 듯하다.
실제로 Streamlit을 활용한 채팅 컴포넌트 패키지인 streamlit_chat을 사용한 부분이 있었는데 당연히 클라우드 환경에 포함된 줄 알고 requirements.txt에 포함하지 않고 배포를 진행했었다.
하지만 클라우드 배포 시 갑자기 오류가 발생했고 원인을 찾은 결과 requirements.txt에 streamlit_chat을 포함하지 않아 생긴 문제로 확인되었다.
Streamlit cloud 사용하고자 한다면 배포 전 requirements.txt 꼭 신경 써서 확인해 보자.
결론.
이래저래 영어 작문 챗봇을 만들어 봤지만 사실 제대로 돌아가는 느낌은 아니었다.
개인적으로 생각해 본 원인은 아래와 같다.
들어가기 앞서 필자는 가벼운 마음, 가벼운 주머니로 개발하기 위해서 유료결제를 진행해야 쓸 수 있는 GPT-4를 이번 프로젝트에 사용하지 않고 무료 크레디트로 이용할 수 있는 GPT-3.5 모델을 이용해서 개발한 점 참고 바란다.
- Assistant 기능 자체가 현재 베타 버전인 관계로 불안정하다는 느낌이 든다. Assistant를 구성하는 데 사용한 가이드라인을 우리가 흔히 쓰는 ChatGPT 홈페이지에서 3.5 버전으로 프롬포팅을 하면 필자가 개발한 챗봇보다 훨씬 원활하게 수업이 진행되는 느낌을 받을 수 있었다. GPT-4 모델을 사용한다면 필자가 만든 프로젝트 보다 훨씬 나은 챗봇을 만들 수 있지만 GPT-3.5와는 10배 정도의 비용차이는 반드시 염두해야 할 것이다. 물론 진짜 영어 작문 제품을 만든다면 GPT-4 모델은 선택사항이 아니라 필수사항이 아닐까 생각한다.
- 기능의 안정 유무 외에도 무엇보다 견고한 Assistant를 구성하는데 신경 써야 할 것 같다. 여러 가지 중의적인 표현이나 명확하지 않은 지침은 매번 Thread를 생성할 때마다 다른 행동 패턴이 나올 수 있을 것 같다는 생각이 든다. 그렇다고 답변의 일관성과 관련된 파라미터를 보수적으로 잡을 경우 너무 로봇과 대화하는 느낌이 나는 것도 이상할 것 같다. LLM모델은 한글보다는 영어를 사용했을 때 성능이나 비용측면에서나 훨씬 유리한데 영어로 Assistant를 구성하고 출력만 한글로 하는 것이 좋은 방법이 아닐까 생각이 든다.
'데이터 분석' 카테고리의 다른 글
첫 데이터 로그 설계 실무와 그에 대한 퇴고 (1) | 2024.03.23 |
---|---|
연애 시뮬레이션 코딩하고 결과 확인하기 (0) | 2023.07.23 |
A/B Test와 P-value, 그리고 가설검정 (1) | 2023.05.10 |
모바일 앱 제품 내 지표분석 예시 (0) | 2023.05.04 |
A/B Test 기초 (0) | 2023.04.28 |