[넘블 챌린지] Kotlin과 GPT3 API를 활용한 개인 맞춤형 모바일 Chatbot 만들어보기

slee2·2023년 4월 13일
0

main

목록 보기
3/12
post-thumbnail

개요

넘블 챌린지는 Kotlin을 활용하여 ChatBot을 만드는 외부 프로젝트입니다. 개발기간은 총 2주로, Android Studio와 Kotlin 자체에 익숙하지 않은 상태에서 개발을 진행하였습니다.

고민한 내용들

대화형 ChatBot을 어떻게 구현할 것인가?

Open AI API의 매개변수에는 메세지를 하나만 넣을 수 있습니다. 과거 대화했던 내용을 넣을 수 있는 history 매개변수가 있는 API도 확인되었으나, 넘블에서 주어진 API에는 오직 하나의 대화만을 넣을 수 있었습니다.

테스트 결과 이전 대화를 넣으면 해당 맥락을 확인하고 그에 맞는 답변을 찾아주는 것을 확인하였습니다.

이와 같이 간단한 질문으로도 이전 대화의 맥락을 파악하여 그에 맞는 답변을 해주는 것을 확인할 수 있습니다.

오류 처리를 어떻게 표현할 것인가?

다양한 오류가 발생할 것이고, 이를 어떻게 처리할지 고민을 하였습니다. 메세지로 표현하기로 결정하였으며, 각 메세지마다 타입을 지정하여 API를 성공적으로 받아 완성된 메세지만 대화형 프롬포트에서 이용하도록 진행하였습니다.

또한, 메세지마다 타입을 지정하여 API를 성공적으로 받아 완성된 메세지만 대화형 프롬포트에서 이용하도록 진행하였습니다.

API 토큰 최댓값에 대한 처리

토큰은 최대 3900으로 지정된 토큰 최댓값이 들어있지만, 토큰이므로 실제로 확인할 수 있는 글자수는 더 적습니다. 게다가 대화형으로 개발을 했기 때문에 이전 메세지를 쌓아서 글자수는 점점 쌓이게 되기 때문에 처리를 해줄 필요가 있었습니다.

그래서 전송할 메세지 + 이전 메세지를 차곡차곡쌓으며 500글자가 되기 전까지 모아서 500글자 이내의 메세지를 API로 전송하였습니다.

Setting 화면에 대한 처리

넘블에서 제공하는 화면에서는 TextEdit을 이용하여 숫자를 입력하는 부분이었습니다. 그러나 이와 같은 방식으로 처리하게 되면 숫자와 Double 형식에 대한 검증을 별도로 수행해야 했습니다. 따라서, SeekBar를 이용하여 값을 제한하게 함으로써 매개변수의 최솟값과 최댓값을 설정할 수 있었습니다. 이를 통해 API를 안전하게 전송할 수 있었으며, 더욱 효율적인 처리가 가능해졌습니다.

비동기 API 호출에 대한 고민

메세지 전송 이후에 답변을 얻어올때, 비동기로 처리가 되어
쉽게 말해 혼자 따로 작업을 하게 되는데, 연속으로 메세지를 전송하면 어떻게 처리를 해야할지 고민을 했습니다.
API 호출이 될때까지 메세지 전송을 막는다던지 여러 고민을 해봤고

생각해낸 해결책은 아래 사진과 같이
메세지 전송 버튼을 누르면, API 호출 이전에 임시 메세지를 만들었고
이후에 API 호출이 성공하면 해당 임시 메세지 내용을 변경하는 로직으로 진행하였습니다.
임시 메세지는 LOADING 상태를 가지고 있어 이전 대화 대상으로 지정되지 않습니다.

아쉬웠던 점

미숙한 처리

앱 개발 과정에서 Activity에 대한 처리 방법을 제대로 모르지 못해 코드가 복잡해졌습니다. 코드를 줄이려고 했지만, 적절한 방법을 찾지 못해 이 문제를 해결하지 못한 부분이 많았습니다. 또한, ViewModel, Repository 등의 사용 방법도 제대로 익히지 못한 점이 아쉽습니다. 마지막으로 버전 관리나 CI/CD 구현 등에서도 문제를 겪었지만, 해결책을 찾지 못해 이 부분을 해결하지 못한 것이 아쉽습니다.

역량 부족으로 인한 미구현 기능들

공유 기능을 추가하고 싶었지만, 역량 부족으로 인해 모든 기능을 구현하지 못한 점이 아쉽습니다. 또한, 깃허브 액션을 이용한 Android CI/CD 구현까지는 성공하였으나, 플레이 스토어에 등록하는 과정에서 문제가 발생하여 해결하지 못한 점이 아쉬웠습니다.

새롭게 배운 내용

앱 개발 과정에서 Kotlin을 배우면서 기본적인 사용 방법을 익힐 수 있었습니다. 또한, 앱을 만들면서 개발 과정에서 필요한 다양한 지식을 습득할 수 있었습니다. 같이 공부하는 분들과 함께하여 서로의 입장에 대해 공유하고 의견을 나누며 동기부여를 얻을 수 있었습니다.

0개의 댓글