선택을 도와주는 샘플챗봇을 살펴보고, 살짝 수정해보는 실습을 해봅시다. 챗봇 페르소나에 대해서도 한번 생각해보아요.
깃허브 수정요청

샘플챗봇 살펴보기

지금부터는 이미 만들어져있는 챗봇들을 살펴보면서 챗봇을 만드는 요령을 익힐 수 있습니다. 단비에이아이에 로그인한 후, 챗봇목록화면에서 “Sample Chatbot 가져오기”를 클릭하면 이미 만들어진 챗봇을 자신의 계정으로 복사해올 수 있습니다. 자신이 만들고자 하는 챗봇과 유사한 모델을 가져와서 조금씩 수정해보시기 바랍니다.

가장 먼저 소개하려고 하는 챗봇은 선택결단봇, “캡틴초이” 입니다.

선택결단봇, 캡틴초이 살펴보기

우리의 인생은 우리의 선택들이 이어져 만들어진다고 해도 과언이 아닙니다.
가볍게는 점심메뉴, 오늘 입고갈 의상에 대해서 결단이 필요하고
무거운 주제는 대학전공을 무엇으로 할 것인가, 배우자로 누구를 선택할 것인가와 같은 큰 선택도 있겠습니다.
쉽게 선택을 하지 못하는 이유는 ‘그럴만해서’ 그런 것입니다.
선택지들이 다 비슷하거나 딱히 취향이 없거나 단순히 고민할 힘이 없거나.
이렇게 애메한 상황에 캡틴초이에게 물어봅시다.

캡틴초이는 결단력있는 우주전함 선장입니다.
캡틴초이는 선택장애로 고민되는 문제를 시원하게 선택해줍니다.

Sample Chatbot 가져오기 를 통해 선택결단봇, 캡틴초이 을 가져오면 챗봇을 확인할 수 있습니다.

선택결단봇, 캡틴초이를 카카오톡에서 만나보기

선택결단봇, 캡틴초이를 프로그(Frogue)에서 만나보기

Sample Chatbot 가져오는 방법 확인하기

카카오톡에서 미소 짓는 캡틴초이

선택에 대한 고민이 될때마다 꺼내어 써보시길!

캡틴초이를 만들게된 배경

캡틴초이를 만든 배경을 소개할까 합니다.

단비 개발팀이 점심시간에 중국집에 가게 되었습니다.
어떤 중국집은 짬뽕을 잘하고, 어떤 중국집은 짜장을 잘합니다.
그런데 단비 개발팀이 가는 중국집은 둘다 잘하는 집입니다.

개발자들 중에 짜장이나 짬뽕 하나만을 고집하는 분도 있지만
둘다 잘 드시는 분도 있습니다. 그 분은 고민에 빠집니다.

에라이 짬짜면(?) 할 수도 있겠지만 안타깝게도 짬짜면은 없는 집입니다.
사실 아무거나 먹으면 되는데... 주문받는 아주머니는 초조한 시선을 보냅니다.

이때 그 개발자는 옆 개발자에게 물어보는 선택을 합니다.
"짬뽕 먹을까? 짜장면 먹을까?"

옆에 있던 개발자는 짜장면 먹으라고 했습니다.
선택장애가 왔던 개발자는 그 이야기를 듣고 추천과 반대로 짬뽕을 선택했습니다. 하하하.

짜장면과 짬뽕을 다 먹어갈때즈음.
단비 개발팀은 이런 사소하지만 고민되는 상황에서 즐겁고 가볍게 도움줄 수 있는
캐주얼 일상 챗봇을 만들어보기로 했습니다.

챗봇의 목적

우선 챗봇이 할 일을 명확히 합니다. 목적! 선택에 대한 고통을 덜어주기 위해 확실히 정해주는 것입니다.

챗봇의 업무 분석

선택은 어렵고 결과는 무섭(?)지만, 결단하는 과정은 생각보다 간단합니다.

  1. 선택을 해야할 때라고 생각한다.
  2. 선택지로 만든다. (이때 영 아닌 애들이 정리됩니다.)
  3. 선택지별로 장단점을 확인한다.
  4. 우리의 목표, 취향, 가지고 있는 리소스에 맞추어 선택한다.

짜장면과 짬뽕사건처럼, 결국 최종 선택은 본인이 하고, 챗봇은 그것을 도와주는 역할을 할 수 있겠네요. 결국 선택도우미 = 추천서비스 라는 것을 알 수 있습니다.

챗봇 수준 정의

중국음식을 선택해달라고 한다거나 점심메뉴를 선택해달라고 구체적으로 이야기 할 수도 있지만, 좀더 범용적으로 쓸 수 있게 해보자는 의견이 컸습니다. 더 만들기도 쉽고 자주 쓸 수 있을 것 같다는 것이죠. 만장일치로 린(Lean)하게 간단하게 시작하자고 합의하였습니다.

추천도 제대로 하려면 무척 일이 많습니다.

수준 수준설명 사례
1 사용자의 취향이나 상황은 관심없고 몇 가지 선택지를 주면, 그 중에서 선택해줌 옆에 있던 개발자의 짜장면 추천 수준
2 사용자의 취향이나 상황은 관심없고 뭔가 새로운거에 관심있는지 확인하고 싶음 레스토랑의 New 메뉴 수준
3 사용자의 취향이나 상황은 모르지만 뭐가 요즘 뜨는지 잘 앎 레스토랑 Hot 메뉴 수준
4 사용자의 취향이나 상황은 모르지만 뭐가 인기있는지는 잘 앎 레스토랑 Best 메뉴 수준
5 사용자의 취향이나 상황은 모르지만 대화가 가능함 질문을 통한 추천, 스무고개 수준
6 사용자의 취향에 대해서 미리 알고 있고 상황도 알고 있고 추천해줄 데이터가 매우 풍부함 빅데이터 클러스터링, 넷플릭스 수준

1단계로 가기로 했습니다. 저희는 챗봇을 만들 수 있는 클라우드 서비스를 제공하지만, 아쉽게도 고객에 대한 데이터나 제공할 수 있는 서비스나 콘텐츠는 없기 때문입니다.

챗봇 페르소나 정의

챗봇의 캐릭터를 잘 잡아주면, 사용자를 보다 즐겁게 해줄 수 있습니다. 우리는 막무가내 무대뽀로 적은 정보로 빠르고 확실하게 결단내리는 존재가 누군지 3분간 브레인스토밍을 했습니다. 그 결과, 두둥, 해적선 선장이 그런 성격이라는 것을 알게 되었습니다.

그리고 선택을 도와주는 선장이므로 초이스에서 “초이”를 따와서 캡틴초이 라는 이름을 짓게 되었습니다. 이에 어울리는 얼굴도 과감하게 10분만에! 그리고 말투도 샘플로 몇개 적어보았습니다. (반갑네. 선택하시게나.)

캡틴초이는 카카오톡에 연결해서 공개하기로 하였습니다. 카카오톡에서는 처음에 “시작하기”를 탭하여 대화를 시작하게 되어있습니다. 시작하기를 선택하면 인사를 하고, 시작을 유도하는 것이지요.

챗봇 대화흐름 메인시나리오 설계

캡틴초이의 대화흐름을 설계할 차례입니다. 대화흐름을 설계하는 것은 서비스를 설계하는 것과 유사합니다. GUI중심의 모바일이나 웹애플리케이션 등의 서비스 디자인은 주로 “UI를 그리면서” 한다면, 대화중심인 챗봇 서비스는 “대화스크립트를 쓰면서” 가닥을 잡아나갑니다. 다른 서비스 디자인과 마찬가지로 “메인시나리오”를 가장 먼저 만듭니다. 메인시나리오가 고객을 만족시키면, 나머지 시나리오를 만드는 것이지요.

그냥 자기가 영화/드라마 시나리오 작가가 되었다고 생각하고 자신이 만든 챗봇의 페르소나와 고객의 페르소나를 떠올리며 타자기를 쳐내려가면 되겠습니다.

 캡틴초이 : 만나서 반갑네, 난 선택장애를 없애줄 캡틴초이라고 하네! 뭘 고를지 모르겠다고? 내가 골라주지!
 사용자   : 다음주에 소개팅 가는데 원피스가 나을까? 아니면 블라우스에 짧은 바지 입고갈까?
 캡틴초이 : 원피스가 좋겠네! 난 이상하게 해적이라서 그런지 원피스가 좋아!

아주 이상적인 시나리오가 나왔습니다. 하지만 안타깝게도 이런 고차원적인 표현은 알아듣고 사용자가 이야기한 단어를 기반으로 위트있는 대답을 하려면 상당히 학습을 많이 시켜야 합니다.

우리의 리소스는 한정되어 있고 범용적이고 쉽게 만들 수 있는 챗봇으로 수준을 정한 만큼 시나리오를 수정해봅니다.

 캡틴초이 : 반갑네! 뭘 선택할지 고민이 된다고? 날 불러주게!
 사용자   : 초이!
 캡틴초이 : 오! 뭘선택할지 고민이 있나보구만? 몇 가지 중에 고민인가?
 사용자   : 두 가지
 캡틴초이 : 1번째 옵션이 뭔가?
 사용자   : 원피스
 캡틴초이 : 2번째 옵션이 뭔가?
 사용자   : 블라우스에 짧은 바지
 캡틴초이 : 좋아 선택했어! 투피스로 정해!
 사용자   : 고마워
 캡틴초이 : 뭐 그런거 가지고 그래! 해적은 사랑이니깐!

이 정도면 대화도 제법 자연스럽고 퀵하게 만들 수 있을 것 같네요!

챗봇 구현

이제 부턴 구현 과정을 살펴보겠습니다. 처음부터 완벽하게 만들려고 하기 보다는, 챗봇빌더가 제공하는 학습기능, 대화흐름 웍플로우 기능, 테스트 기능을 이용해서 차근 차근 구현하면 됩니다. 우리가 작성한 시나리오를 보면, 가장 먼저 인사를 합니다. 인사의 한자를 보면 사람인(人), 일사(事). 즉, 사람의 일이라는 것이죠. 사람을 봤으면 인사를 해야지! 인간 세상에서 같이 살려면 우리의 챗봇이 가장 먼저 할 것도 인사입니다.

기본설정

danbee.Ai의 좌측메뉴에서 설정(Preference) > 기본답변(General)에 들어가면 최상단에 Welcome Message라는 영역이 있습니다. 여기가 바로 처음 만났을때 하는 인사를 정해주는 곳입니다. 단, 카카오톡 등 채팅플랫폼 별로 Welcome Message를 정하게 하기도 합니다. 샘플챗봇을 가져온 경우라도 기본답변은 별도로 입력하게 되어있습니다. 생각하는 챗봇의 성격에 맞는 말투를 생각해보고 입력해보시기 바랍니다.

기본답변 설정에 대해 더 알아보기

메인시나리오 시작을 인식할 수 있게 학습하기

인사를 할 수 있게 작업이 되었네요. 메인시나리오를 발동시키려는 의도를 파악하게 학습을 시켜야 합니다.

시나리오를 다시 살펴보면,
캡틴초이 : 반갑네! 뭘 선택할지 고민이 된다고? 날 불러주게!

아마도 사용자는 ‘초이’, ‘캡틴’, ‘캡틴초이’라고 입력할 수 있겠네요. “선택장애해결”이라는 Intent(의도)에 초이, 캡틴, 캡틴초이와 같은 시작구호가 입력되어 있으면 됩니다.

메인시나리오를 호출하는 의도 학습

메인시나리오를 Chatflow에 담기

메인시나리오를 Chatflow에 담아보면, 아래 그림과 같이 됩니다.

메인시나리오 플로우

최초 시작멘트를 보내고, 몇 가지 선택지가 있냐고 물어본후, 선택지의 수에 따라 반복해서 옵션을 물어봅니다. 숫자가 아닌 값을 입력하면, 다시 몇 가지냐고 물어보게 되어있습니다. 모든 옵션을 확인한 다음에는 “랜덤선택”이라는 단계에서 촥 하나 뽑아서 “답변”단계에서 대답하게 됩니다.

테스트 해보기

우측 테스트 패널에서 바로 테스트 해볼 수 있습니다.

메인시나리오를 테스트 패널에서 테스트해보자

우리가 정한 시나리오데로 잘 동작하는 군요!

보완하기

마지막에 “고마워”라고 했는데 대답을 못했네요. 이 부분을 보완해 보겠습니다. 앞서도 언급했든 인간사회에서 같이 살려면 인사는 기본이기 때문입니다. danbee.ai의 왼쪽 메뉴에서 자연어이해(NLU) > 의도추론(Intent)를 클릭합니다.

감사하다는 표현에 응답하는 간편 Intent 설정

우측 상단에 [+간편 Intent 생성]을 클릭하고, Intent이름은 ‘감사’라고 정하죠. 사용자 등록예문에 고마워라고 입력하고 엔터를 칩니다. 고마워 말고도 고마움을 표현하는 다양한 표현이 있습니다. 학습시키겠습니다. ‘고마워’, ‘감사해요’, ‘땡큐’, ‘쌩유’, ‘메시’,’아리가또’,’씨에씨에’뭐든 좋습니다. 오른쪽에는 고마움에 대한 답변을 다양하게 넣어보죠. 뭔가 해적스럽게 :)

우측 상단에 [저장]을 클릭한후 오른쪽 테스트 패널에서 바로 고마워라고 입력해보겠습니다.

메인시나리오를 테스트 패널에서 테스트해보자

보다 자연스러워 졌네요!

계속 키우기

실제 사용자들이 어떻게 쓰고 있는지 Dashboard, 자연어이해>의도추론이력, 대화흐름>대화흐름이력 에서 확인할 수 있습니다. 사용자들이 우리가 만든 챗봇에게 어떤 것을 추가로 원하는지, 어떤 대화흐름이 부자연스러운지, 어떤 표현을 인식하지 못했는지 보이게 됩니다.

다른 페르소나?

여러분들은 캡틴초이보다 더 매력적인 캐릭터를 생각하실지도 모르겠네요. 그렇다면 캡틴초이가 아니라 다른 이름을 학습시켜야 겠죠? 거의 동일한 시나리오로 만든 수달이를 참고해보시기 바랍니다.

수달이의 선택장애해결을 카카오톡에서 만나보기

수달이는 캡틴초이보다 친근하고 부드럽다.

마무리

지금까지 캡틴초이를 만나보았습니다. 캡틴초이는 단순 질문에 답하는 챗봇은 아닙니다. Javascript 개발경험이 있다면 Function노드를 이용해 만들 수 있는 것들이 무궁무진합니다. 캡틴초이는 랜덤으로 선택했지만, 빅데이터 추천을 해줄 수 있는 알고리즘과 데이터가 있다면 API노드를 이용해 사용자에게 더 훌륭한 추천을 해줄 수 있을 것입니다.

다음편에는 더 재미있는 챗봇을 만나보기로 해요!