안녕하세요, 생성 AI를 이용한 제품으로 창업을 준비하는 1인 빌더 김형준입니다. 위에 보이는 동글동글하고 귀여운 친구 이름이 펭추리에요. (메추리알을 닮아서 이름이 펭추리입니다 ㅎㅎ)
펭추리는 카카오톡에서 사용할 수 있는 AI 챗봇입니다. 소소한 잡담을 나누거나 맛집을 추천받고, 일러스트를 선물해줄 수 있어요. 아숙업처럼 카톡에서 쓸 수 있으면서 character.ai 처럼 캐릭터와 대화를 나누는 경험을 제공해줍니다.
12월 11일 월요일에 오픈했고, 메이커 로그를 쓰는 지금까지 약 40명의 유저들과 700여건의 대화를 나눴어요! 한두번 말걸어보고 이탈하는 유저들이 대부분일줄 알았는데, 기대 이상의 사용율을 보여주고 있습니다.
(글을 읽고 있는 지금, 펭추리가 궁금하시다면 지금 바로 추가해보세요! https://pf.kakao.com/_SxexjnG)
이 포스팅에서는 제가 왜 챗봇 서비스를 개발하게 되었는지, 챗봇 서비스를 기획하고 개발하며 어떤 난관들이 있는지를 공유해보겠습니다!
시작은 openAI dev day
한달 전 이맘때에 열렸던 opeaAI dev day를 기억하시나요? 저도 아침에 일어나자마자 유투브에 올라온 샘 알트만 형님의 키노트를 봤습니다. 멀티 모달 모델, dalle 3, GPTs 등등 입이 떡벌어질만한 신기술을 쏟아내는 가운데 제 눈길을 끄는게 있었어요.
바로 기존의 GPT-4 API 보다 더 빠르고, 3배 가량 더 저렴한 GPT-4-Turbo API 소식이었습니다. 이전에는 한국어를 그럴듯하게 생성하려면 GPT-4가 필수적이었지만, 너무 느리고 비싸서 언감 생심이었습니다. (몇번 테스트만 해봐도 금세 $10를 넘겨버려서 도저히 손 떨려서 못썼습니다 ㅠㅠ)
직접 테스트 해본 결과, GPT-4-Turbo API는 정말이지 대박이었습니다! 훌륭한 퀄리티로 한국어를 생성해주며 latency나 비용도 잘만 통제하면 감당 가능한 수준이었습니다. 너무 훌륭한 도구가 새로 생겼는데 개발자 된 도리로서 가만히 있을 수 없겠죠? 바로 아이디에이션을 시작했습니다.
챗봇 서비스 기획
기획 과정에서 중요하게 생각한 건 크게 2가지 입니다.
- 무조건 쓰기 편할 것
- 유저가 또 써야할 이유가 있을 것
별도의 웹 사이트, 혹은 앱을 설치해서 유저가 챗봇과 대화하게 만드는 것은 거의 불가능하다고 판단했습니다. 어떻게든 설치하기 쉽고, 쓰기 편하게 만드는게 관건이었습니다.
다음으로는 또 써야할 이유가 있어야하는 점입니다. 대부분의 AI 서비스들이 유저 리텐션을 확보하는데 실패합니다. 유저들은 처음 몇번은 신기해하지만, 금세 이탈해버립니다. 기가 막히게 재미가 있거나, 유용하지 않다면 유저를 붙들어 놓을 수 없을거라 생각했어요.
이런 관점에서 벤치마킹을 할 서비스들을 쭉 찾아봐서 아숙업과 캐릭터AI가 눈에 들어왔어요. 아숙업은 카카오톡에서 chatGPT를 쓸 수 있는 기능 만으로도 사용자를 160만명 확보했어요. 다음으로 캐릭터 AI는 AI 캐릭터와 대화할 수 있는 경험으로 MAU 2억을 달성했습니다.
이미 검증되어 있는 모델을 적절하게 섞어보기로 했습니다. 편의성 측면에서는 아숙업을, 재미의 측면에서는 캐릭터 AI를 본따서 카카오톡에서 쓸 수 있는 챗봇 서비스를 만들어보기로 했습니다.
캐릭터 및 컨셉 설정하기
먼저 캐릭터가 있어야겠죠? 기존에 유명한 캐릭터를 사용하는 것은 저작권 침해 요소가 너무 다분하기 때문에 고유한 캐릭터를 하나 만들어보기로 했습니다. 먼저 dalle 3를 이용해서 이미지를 만들어봤습니다. 노란 목도리를 맨 아기 펭귄 캐릭터를 컨셉으로 마음에 드는 캐릭터가 나올 때까지 돌려봤습니다.
다음으로는 세부 컨셉을 정할 차례입니다. 나이와 직업, 고향, 좋아하는 음식, 가족 관계, 취미, 말투 등등 유저가 캐릭터를 실감나게 느낄 수 있도록 촘촘하게 작성하는 것이 중요합니다. 그리고 "가장 좋아하는 음식은 회사 돈으로 먹는 스시 오마카세", "하루 빨리 퇴사하고 고향인 남극에 스시 오마카세를 차리는게 꿈" 처럼 재미 요소를 넣었습니다.
대화 시나리오 설계하기
다음으로 대화 시나리오를 설계해야 합니다. 단순히 chatGPT API를 사용하면 유저에게 정교한 대화 경험을 전달하지 못할거라 생각했어요. 시나리오를 세분화하고, 각 시나리오 별로 정확한 답변을 생성해주고자 시나리오를 설계했습니다.
실제 시나리오는 이보다 더 복잡합니다. 각 시나리오 별로 적절히 RAG와 system message를 사용할 수 있도록 개발했습니다. 그리고 무수히 많은 테스트를 해보면서 원하는 형태의 대답을 일관되게 생성하도록 프롬프트를 다듬었습니다. (물론 실제 유저들은 상상을 초월하는 질문을 해서 장애가 많이 발생했지만요 ㅎㅎ)
한가지 배운점은 LLM에 입력으로 들어가는 정보가 적을 수록 답변의 퀄리티가 올라간다는 것입니다. 예를들어 일상 대화를 생성할 수도 있고, 맛집 추천을 해줄 수도 있게 chatGPT API를 호출하기 보다는, 앞단에 의도 분류를 넣고 각 의도별로 프롬프트를 따로따로 만들어서 텍스트를 생성하는 것이 훨씬 효과적이었습니다.
혹시나 챗봇 서비스 설계와 관련해서 더 궁금한 것들이 있으시면 편하게 커피챗 요청 주세요! ㅎㅎ
서버 개발 및 배포하기
이 부분부터는 개발 지식 좀 필요합니다. chatGPT API를 이용한 서비스는 극단적인 I/O bound 애플리케이션입니다. 본인이 직접 CPU를 사용해서 연산을 수행하지 않고 openAI 측 서버에 요청을 보내놓고 대기하는데 대부분의 시간을 보냅니다. 따라서 async 방식으로 동작하는 서버를 개발하는 것이 훨씬 효율적입니다.
저는 python에서 async 방식을 지원하는 대표적인 프레임워크인 fastAPI를 사용했습니다. 그리고 외부 API 호출이라던가 DB 세션 유지 등도 모두 비동기 방식으로 구축했습니다.
이를 클라우드에 배포했고, 1 코어 1GB RAM 서버 1대로도 안정적으로 서비스를 운영할 수 있었습니다. 당분간은 스케일 아웃은 커녕 스케일업도 필요가 없는 수준입니다. 비즈니스 모델도 없이 값비싼 GPT-4 API를 사용하는 서비스이기에 그 외적인 인프라 비용은 줄이고 싶더라구요 ㅎㅎ
삽질⛏️ 그리고 또 삽질⛏️
chatGPT API를 이용해서 챗봇 서비스를 개발했다고 하면 얼핏 쉬워보일 수 있습니다. 하지만 막상 개발해보면 생각지도 못한 난관에 부딫힙니다. 이번에 펭추리를 개발하면서 제가 겪었던 예외 상황들이었습니다.
- json_output 옵션을 주었음에도 json 포맷으로 안내려옴
- 스트리밍 방식으로 대화 생성 중 멈춰버림
- tool call 파라미터에 한글을 전달 못함
- tool call 파라미터를 json 포맷으로 전달하지 않음
- 대화 생성 속도가 갑자기 급격하게 느려짐
그 외에도 정말 시행착오가 많았습니다. 비슷한 상황을 맞딱뜨릴 다른 개발자분들을 위해서 몇가지 팁을 준비해봤습니다.
- Azure OpenAI Service를 쓰세요. 확실히 안정적입니다. 특히 한국과 가까운 region을 선택하세요.
- retry는 사랑입니다. 가능한 단계를 많이 쪼개고 착실하게 retry 로직을 넣어주세요.
- LLM은 생각보다 실수를 많이 합니다. 테스트 코드를 촘촘하게 작성하고, 예외 처리 로직을 추가하세요.
- 프롬프트는 단순하고 짧게 작성하세요. 고민이 많아질 수록 이상한 답변이 튀어나옵니다.
- GPT-3.5와 GPT-4를 적절히 섞어서 사용하세요. GPT-3.5를 적절히 사용하면 비용이 많이 줄어듭니다.
이 외에도 수많은 예외들이 발생합니다. LLM을 원하는 대로 제어하는 것이 쉽지 않더라구요. 혹시나 챗봇 서비스 개발과 관련해서 더 궁금한 것들이 있으시면 편하게 커피챗 요청 주세요! ㅎㅎ
앞으로의 과제
일단 카카오톡에서 펭추리는 정말 말을 잘합니다! 미리 입력한 시나리오와 캐릭터 설정에 맞게 유저에게 실감나는 대화를 제공하고 있습니다. 제 친구가 "서른 먹고 내가 심심이를 오래 하고 있을 줄은 몰랐다"고 할 정도였으니까요.
책 추천, 음악 추천 등등 펭추리에 추천하고 싶었지만 꾹 참았던 기능들이 남아있습니다. 유저들의 반응을 계속 살피면서 꾸준히 제품을 업데이트할 생각이에요. 빠르게 이탈하는 유저들을 붙잡기 위해서 선톡하기 등의 기능도 실험 중입니다.
마지막으로 펭추리가 그리고 있는 큰 그림은 멀티 메신저 플랫폼 챗봇입니다. 카카오톡 뿐만 아니라 라인, 슬랙, 텔레그램, 디스코드 등 모든 메신저 플랫폼에서 소통할 수 있는 챗봇으로 키워볼 생각입니다.
마치며
지금까지 카카오톡에서 사용하는 캐릭터 챗봇, 펭추리의 기획과 개발 과정을 정리해보았습니다. 사실 펭추리도 다른 대부분의 AI 서비스와 마찬가지로 높은 확률로 PMF를 찾는데 실패할 것입니다. 그럼에도 새로운 기술을 이용해서 전례없는 서비스를 만들어나가는 과정이 너무 즐거웠고, 많은 것들을 배울 수 있었습니다.
혹시나 더 궁금하신 점들이 있으시면 커피챗 요청해주시고! 펭추리 근황도 꾸준히 업데이트 하겠습니다.
감사합니다!
캐릭터 만드셨던 사이트 주소 공유받을 수 있을까요?