[카카오톡 오픈빌더] 챗 봇 만들기 -1



카카오톡 오픈빌더로 바뀌고 챗봇을 어떻게 만드는지 과정을 담아볼까 한다.



애초에 오픈빌더를 어떻게 사용하는지 도움말 자체가 워낙 잘 되어있어서 딱히 도움말 식으로 해나갈 필요는 없을 것 같고, 

이 도움말 순서대로 따라가는 실전 예시를 담아볼까 한다. 



일단 저 도움말조차 보기 싫은 분들을 위한 전단계 짧은 요약은 이렇다. 

1. 카카오톡 계정 만들기 

2. 카카오톡 오픈 빌더 가입 및 신청  ( 플러스 친구를 만들어 두면 심사에 보다 쉽게 통과되는 듯 하다. ) 

3. 심사를 기다리면 어느날 계정이 만들어져있다.  (카카오는 6일이라고 했는데, 나는 3일 걸림) 




오늘의 목표는 챗봇 시나리오 생성

















좌측 상단을 봤다면 알겠지만 내 봇 이름은 판다씨다. 

귀엽지 않나? 

내가 가장 많이 대화할텐데, 예쁘게 지어야 하지 않겠는가? 

이제부터 이 친구가 내 반려봇 1호다. 



간단하게 시나리오란, 흔히 아는 그 대화의 흐름이라고 할 수 있다. 

A: 오늘 날씨가 어때? 

B: 오늘은 개강날이야. /  C: 오늘은 날이 맑고 선선하대

A의 질문의 올바른 답을 한 사람은 누구인가? 

정답은 C 

바로이 A와 C를 연결하여 적절한 문맥을 구성하는 것이 시나리오라고 볼 수 있다. 


그러면 바로 우리 판다씨에게 문맥을 가르쳐보겠다. 




시나리오 설정을 클릭하면 시나리오 공통 설정이 나오는데, 

이것을 설정 해야만 다른 시나리오를 만들 수 있는 모양이다. 

일단 판다씨는 기본적으로 밝고 귀여운 성격이고 싶으니 되물을때도 밝게 해주고....  

봇 제네릭메뉴는 그냥 채팅창 들어왔을때 기본적으로 유저에게 선택지를 주는 것이다.

스토리 게임할때 선택지를 주는 느낌과 같달까나. 

'어떻게 물어보지' 하는 고민을 덜어준다.  





막상 부딪히려고 보니 시나리오는 기본적으로 봇의 목적과 그 대상에 대한 정의가 필요하다. 


판다씨를 어떨때 쓸까 생각해 봤는데, 일단 흔한 음료 주문부터 시켜보기로 한다. 

음료 심부름조차 하지 못하는 봇에겐 미래가 없는거다.





일단 시나리오 공통을 만들어 주고....




1. 웰컴 블록 


(판다씨는 잠시 보류하고, arsen 으로 바꿨다. 성격도 그냥 공손한 로봇느낌으로..)


웰컴블록은 맨 처음 봇과 대화할때 봇이 먼저 선 코멘트 하는 것들이다. 

일단 파라미터 이런 것은 실전에 하면서 이해해 보기로 하고, 딱 봐도 알 수 있는 봇 응답에다가 편하게 몇가지 문구를 써봤다. 



웰컴블록,탈출블록 만들었으면, 그 다음엔 본격적으로 

저 파란색 + 시나리오 버튼을 누른 뒤, 
블록 추가를 통해 
'음료 주문' 에 대한 발화를 만들 어 보겠다. 



기본적으로 

1블록 =  사용자 한마디 + 봇의 대답 

으로 이루어진다. 

욕심 부려서 사용자 대답에 따라 봇이 두가지 반응을 보일 수 있도록 하고자 했으나, 아직 이 환경이 낯설어서 그런지 방법을 못찾은 데다가, 잘못 건들이면 꼬이기 쉬울 것 같았다. 

그래서


'주문'

이라는 하나의 시나리오에 

'실질적인 음료 주문' 
'메뉴판 달라고하기'
주문을 틀려 다시 주문하기'
'주문 완성하기'

등등 잘게 쪼게어 발화를 생각하는게 좋을 것 같다. 










실질적인 음료 주문 블록에서 편하게 

내가 카페에서 음료를 주문한다면 어떻게 말할까 생각되는것을 다 적으면 된다. 

발화가 많으면 많을 수록 머신러닝하기 쉬워진다. 머신러닝은 다다익선인가...


엔티티 등록은 이곳을 참고하는 것으로 하고. (카카오 도움말)


간략히 도움말을 요약해 설명하자면, 

"카페라테 한 잔 주문할게" 

라는 문구를 발화란에 적고 

카페라테 한 잔 주문할게 

이런 식으로 믿줄친 부분을 각각 드레그 한 뒤, 

카페라테는 

coffe_name 이라는 엔티티를 만들어 엔티티를 지정해주고 ,

한 잔 은

cup_count 라는 엔티티를 만들어 지정, 

주문할게는
user_order 를 만들어 엔티티로 지정해준다. 동의어에 비슷하게 쓰이는 단어를 묶어준다. 예를들어 
"주문","원해","살게", "살게요","주문해요","주문하겠습니다." 등등이다. 


cup_count의 동의어엔 감이 잡히겠지만 

1,2, 한잔, 두잔, 세잔 .... 
이런식으로 적으면 끝. 


이 외에도 커피 종류를 생각하다가 커피 리스트를 만들 수 있는게 한정되어 있어서 토핑  엔티티를 만들었다. 

근데, 크게 리얼리즘 같은건 안느껴지는 듯. 카페 잘 안가는 자의 최후.



그 다음엔 

'메뉴판 달라고 하기'  발화.

이것도 위와 같이 

"메뉴판 좀"
"메뉴판을 주세요"
"메뉴를 보여줘" 

등등을  사용자 발화에 적고 
'메뉴'에 드레그 해서 엔티티 부여. 


엔티티 만들고 나니까, 카페처럼 메뉴판이 있으면 좋겠어서 
봇 응답 부분에 텍스트가 아니라 리스트를 클릭해서 메뉴판도 하나 만들어주고... 




리스트를 5개 까지밖에 못만들어서 안타깝다. 늘리는 방법을 찾고 싶은데, 카카오 측에서 막아두지 않았을가 싶고.... 


봇의 응답은 한 발화에 총 3개를 만들 수 있어서 5(개 리스트) x 3(개 봇 응답) = 15개의 리스트를 만들었다.  



테스트로 한번 창을 띄어보면 이런 모습. 




그 다음엔, 




메뉴 주문을 받다가 못알아 들었을때, 

다시 처음으로 돌아가야 하므로 다시 메뉴로 돌아가기도 만들어 준다. 




'메뉴 결정'블록은 

"응","맞아","맞아요" 등의 사용자 발화랑 
"감사합니다. 가져다 드리겠습니다." 하는 봇의 응답밖에 없어서 생략한다. 

아주 간단하게만 만들어둔 1개 시나리오 4개의 블록.  그 예시는 이렇다. 





이런식으로 부정의 의미 (아니, 틀려, 아냐,  등등) 를 말하면 다시 주문하도록 리셋된다. 

저 버튼을 누르면 다시 주문하는 말이 나오는데, 테스트용에서는 버튼이 작동되지 않는 듯 하다. 





문제는.... 



 일단 한 블록 내에서 봇의 되묻는 질문 순서가 꼬일때.



 이런식으로 휘핑크림을 얹는 순서가 맞지 않는다는 것. 

원래 원하는 순서는 

1 어떤 커피로 드릴까요?
2 몇 잔 필요하세요?
3 휘핑크림 추가

이런 순선데...현실은...

 1. 휘핑크림 추가
2. 몇 잔 필요하세요
3. 어떤 커피로 드릴까요

로 뒤집혔다. 

이 순서를 지키지 않으면,  

그 전에 했던 기록이 리셋되거나 3번 되묻거나 한다. 



그리고 같은 시나리오 안, 다른 블록 사이에선


 한 블록 내에서 봇의 되묻기를 3번을 하도록 설정해놨는데, 이 세번의 되묻기가 끝날때까지 다른 블록으로 화제 전환이 되지 않는다. 


한 잔 이신가요? 를 물었을때, 그 대답은 이미 몇 잔 을 표현하는 엔티티 값에 답정너처럼  정해져 있고.  
따라서 "메뉴 알려줘" 라는 다른 불록에서의 사용자의 질문이 틀린 답처럼 인식되는 듯 하다. 







일단,

블록 내의 봇의 발화 순서는

파라미터의 순서로 조절할 수 있다.

확인한 바로는

일반 파라미터가 필수 파라미터보다 우선순위가 높은 것 같다.

(되묻기 질문인 커피 종류와, 잔의 수량은 필수로 되물어 져져 질문을 했음에도.

일반 파라미터에 놓인 추가 토핑(휘핑크림)에 관해 이용자가 먼저 말할 경우 휘핑을 정한 순간 그 이후의 것이 리셋되었으므로. )

필수 파라미터는 단지 블럭이 놓인 순서에 따르므로 크게 문제가 될 것은 없었다.


그래서 해결 책으로

추가 토핑에 관한 파라미터를 일반에서 필수로 옮기고,

필수 파라미터의 순서를 '종류 -> 컵 수량 -> 추가 토핑' 순서로 배치했다.

*추가 토핑에 관한 엔티티가 애초에 일반 파라미터에 있었던 것은 이용자가 추가 토핑을 선택할 수도, 하지 않을 수도 있기 때문이었다.
그 선택지에 대해  응,아니 라고 대답할 수가 없기 때문에 하는 수 없이 추가 토핑을 필수 파라미터로 넘기고, 그 엔티티 동의어 값에 X,x 를 추가하는 것으로 했다.

-> 한 블록 안에서 응,아니 라고 이용자가 대답하면서 전개할 방법은 없는 걸까? 천천히 공부해 봐야겠다. 




수정


한결 깔금해진 순서를 확인할 수 있다. 




이렇게 오늘은 아주 간단하게 엔티티와 발화패턴만을 이용한 시나리오 하나를 완성해 봤다.


다음은 카카오 도움말의 순서를 따라 , 컨텍스트와 가능하다면 봇 학습에 대해  연습해 보겠다. 


댓글

가장 많이 본 글