오늘은 간단하게 챗봇을 만들 수 있는 도구를 소개하려고 합니다.
DialogFlow
바로 Google에서 제공하는 Dialogflow라는 도구인데요,
이 도구를 이용하면 제목 처럼 간단하게 채팅봇을 만들어 보실 수 있습니다.
구글 어시스턴트
구글이 이러한 도구를 제공해주는 이유는 바로 이 구글 어시스턴트 때문입니다.
구글 어시스턴트는 아이폰의 시리, 삼성의 빅스비의 대항마로써 구글이 제공하는 음성 어시스턴트인데요, 앞의 두 서비스와의 차별점으로 서드파티 앱들을 제공합니다. 구글 어시스턴트는 서드파티 앱을 늘림으로써 어시스턴트의 사용성을 높일 생각인 것 같습니다.
LG G7에는 구글 어시스턴트키가 따로 있다! (걸리적…)
그리고 이 서드파티 앱을 누구나(?) 만들 수 있도록 도와주는 도구가 바로 Dialogflow가 되겠습니다. 지금 부터 간단한 앱을 만드는 과정을 설명과 함께 보여드리겠습니다.
일단 Dialogflow 홈페이지로 들어갑시다. 그리고 오른쪽 상단을 확인하시면,
오른쪽에 ‘콘솔로 이동’이라는 버튼이 있습니다. 눌러봅시다.
이렇게 맨땅에서 시작하는건 필자도 처음
기본 설정을 완료하시면 이렇게 콘솔의 시작화면이 나옵니다. 오른쪽 상단의 ‘CREATE AGENT’ 버튼을 눌러 앱을 생성합니다.
가위바위보를 만들 겁니다.
agent의 이름과 언어설정을 마친 뒤 CREATE합시다.
여기서 부터 시작입니다. 왼쪽 메뉴 항목들 중 위에서 부터 네 개만 알고 계시면 앱의 기능을 만드실 수가 있습니다. 하나씩 해볼까요?
1. Intents
인텐트는 conversation에 있어서의 각각의 단계라고 생각하시면 됩니다. 앱 생성 시 기본으로 생성되어 있는 저 두개의 인텐트를 예로 들자면,
Default Welcome Intent: 앱을 처음 실행했을 때의 행동을 정의합니다. 눌러서 들어가면, 인텐트의 여러 가지 속성들을 지정하실 수 있습니다. 아래로 스크롤을 내려 봅시다.
자기소개하는 “가위바위봇”
Responses에서 인텐트가 발동했을 때 어떤 대답을 돌려줄 것인지 설정할 수 있습니다. 간단한 텍스트를 작성해 줍시다. 그리고 DEFAULT 옆에 +를 눌러서 Google assistant를 추가합니다.
스위치를 켜주시고 ADD RESPONSE를 누르시면 저렇게 선택 가능한 Response 종류들의 리스트가 나옵니다. 저는 Suggestion chips를 추가하겠습니다.
전부 다 가져다 쓸 수는 없나봅니다.
Suggestion chips와 List는 사용자에게 선택권을 줄 수 있습니다. 저는 사용자가 가위, 바위, 보 중에 하나를 고르도록 유도하겠습니다. 리스트는 삭제해 주시면, 이제 welcome인텐트 생성은 끝났습니다. SAVE를 눌러 저장하시고 오른쪽 메뉴의 Intents를 다시 누릅시다.
대화를 이어가기 위해 인텐트를 하나 새로 만들겠습니다. 오른쪽 상단의 CREATE INTENT를 눌러 인텐트를 생성해 줍시다.
불필요한 친절함(불친절X)
인텐트의 이름을 지정해 준 다음, 각각 항목들에 대한 설명과 함께 추가할 수 있는 버튼들이 있습니다. 웬만한 인텐트라면 다 필요한 항목들이니 다 추가해 줍시다.
보자기는 덤.
Trainig phrases는 입력된 phrase가 Input으로 들어왔을 경우 해당 인텐트를 발동시킬 수 있도록 훈련시킵니다. 우리의 가위바위봇은 인사와 함께 게임을 바로 시작하니 사용자가 가위, 바위, 보 중 하나를 입력할 것이라고 예상하고 인텐트가 그에 대응하도록 만들었습니다.
아래 보이는 Action에 무언가를 써주었습니다. 저것은 인텐트를 webhook과 연동시킬 때 webhook 서버에게 알려줄 액션 이름입니다. 서버는 액션 이름에 따라 다른 Response를 줄 수 있도록 잠시 후에 다뤄줄 예정입니다. 아래쪽으로 내려갑시다.
Fulfillment에서 첫번째 스위치를 켜주시면 해당 인텐트가 Webhook과 연동됩니다. Responses도 webhook에서 정의해 줄 예정이므로 여기서는 생략합니다.
이제 다시 밖으로 나와서 Default Fallback Intent도 조금 손봐줍시다.
바보는 아닐껍니다.
Default Fallback Intent는 사용자가 가위바위봇의 의도와는 다른 말을 했을 경우 발동하게 됩니다. 가위바위봇은 현재 가위, 바위, 보, 보자기(?)의 네 가지 말에만 인텐트를 발동시킬 수 있습니다. 그 밖의 말들을 어떠한 인텐트도 발동시키지 못하므로 바로 이 인텐트를 발동시키게 됩니다. 한 개의 response에 저렇게 여러가지 말이 있으면 저들 중 랜덤으로 하나의 문장을 response로 줍니다. 원하는 대로 조금 수정해 주겠습니다.
2. Entity
엔티티는 대화에서 사용할 하나의 사물, 또는 개체라고 보시면 됩니다. 시간, 날씨, 숫자 등등이 시스템에서 기본적으로 정의 되어 있고, 별도로 생성할 수도 있습니다.
엔티티를 하나 생성해보겠습니다.
보자기는 덤.
줄 하나당 엔티티 항목 하나입니다. 왼쪽은 엔티티의 값, 오른쪽은 인풋으로 받을 텍스트입니다. 쉽게 말하자면, ‘보자기’라는 말이 인식 되었을 경우 dialogflow에서는 ‘보’라는 값이 들어오게 됩니다. 엔티티를 만들었으니 인텐트에 적용해 보겠습니다.
각각의 Training phrase에 엔티티를 인식시킬 수 있게 됩니다. 그리고 phrase를 새로 입력할 때 맨 앞에 큰따옴표를 클릭하면 @로 바뀌면서 엔티티 자체를 입력할 수 있게 됩니다. SAVE로 저장하시고 fulfillment로 이동합시다.
3. fulfillment
fulfillment에서는 webhook과 연동하여 별도로 생성한 웹 서버와 통신을 하거나, inline editor로 다른 기능을 추가할 수 있습니다. 저는 inline editor에서 가위바위보의 기능을 구현할 예정입니다.
Inline Editor
아까 game인텐트를 생성하면서 action에 input.game을 써주었던 것을 기억하시나요? welcome인텐트에는 자동으로 input.welcome이라는 action이 명시되어 있습니다. 위 에디터에 welcome이라는 함수가 있는데 이 함수는 welcome인텐트가 webhook기능을 허용하면 인텐트 발동 시에 수행되는 함수입니다. agent.add로 response를 주는 것이라고 예상할 수 있습니다. 일단 game인텐트에 대한 response를 만들고 테스트 해보겠습니다. 테스트는 하단의 DEPLOY를 누르시면 inline editor가 firebase를 통해 배포됩니다. 첫 DEPLOY는 어느 정도 시간이 소요되니 잠시 쉬면서 기다려줍시다.
액션에 대응하는 함수를 만들어준 후에 intentMap.set으로 어떤 인텐트에 대한 응답인지 지정해 주어야 합니다. 다음과 같이 콘솔의 오른쪽 Try it now에 텍스트를 입력함으로써 response가 제대로 오는지 테스트해 볼 수 있습니다. 잘 반영됐네요!
아래쪽에 보이는 DIAGNOSTIC INFO를 누르면 사용자가 보낸 Request 정보를 볼 수 있습니다.
JSON 덩어리
우리가 가위바위보를 제대로 구현할 수 있으려면, request에서 사용자가 입력한 정보를 뽑아낼 수 있어야 하겠죠? 그래야 승패를 결정할 수 있으니까요! request에서 ‘가위’라고 써 있는 곳이 두 군데가 있네요. queryText는 사용자의 입력 전체를 가리킵니다. 밑에 있는 “RSP”가, 사용자의 입력중 Dialogflow가 인식한 RSP 엔티티의 값입니다. 이것을 뽑아내야 다른 텍스트가 입력으로 같이 들어와도 엔티티 값만을 뽑아낼 수 있습니다. 이 JSON 객체는 request.body입니다. 따라서 request.body.queryResult.parameters.RSP와 같이 접근할 수 있습니다.
필자는 바위’을’ 냈다.
네, 잘 뽑아서 다시 돌려받았네요. 이제 가위바위보 게임의 로직을 짜서 진짜 게임을 만들겠습니다.
로직X 노가다O
네, 아무튼 잘 됩니다.
이제 이걸 구글 어시스턴트에서 실행되도록 해주면 끝입니다. 왼쪽 메뉴에서 Integration으로 들어갑시다.
사실 Google Assistant만 지원하는 건 아닙니다.
Google Assistant 배너를 클릭하시면 어떤 인텐트로 시작할지를 지정해 달라고 합니다. Default welcome intent가 알아서 지정되어 있으니 아래쪽의 MANAGE ASSISTANT APP 을 눌러줍시다. 이 곳에서 Google Assistant 앱의 기본 정보들을 설정 해 주어야만 합니다.
설정을 마치셨으면 왼쪽 메뉴에서 SIMULATOR를 클릭하여 어떻게 생겼는지 한 번 봅시다. 처음에 입력되어 있는 문구를 그대로 입력하시면 앱이 실행됩니다.
읽씹당했다
일단은 실행이 되지 않을 수 있습니다. 오른쪽 탭에서 DEBUG를 보시면 url을 힌트로 주었다는 것을 보실 수 있습니다. 저 곳으로 접속해 보면
권한이 문제였던 것 같습니다. 모두 체크 한 후에 다시 실행해 봅시다.
문장은 두개가 맥시멈이라고 합니다;)
네, 문장 개수 제한만 제외하면 잘 작동합니다.
이상 간단하게(?) 챗봇 만들기에 대해서 살펴 보았습니다.
매스프레소는 현재 중, 고등학교의 급식메뉴를 알려주는 써드파티 앱인 ‘급식고양이’를 출시하여 서비스하고 있습니다.
Google Assistant에게‘급식고양이에게 말하기’라고 말씀하시면 이용하실 수 있습니다!
혹은 Facebook에서 ‘급식냥’ 페이지와의 메신저를 통해 이용하실수 있습니다.
LG G7 사진 출처: https://post.naver.com/viewer/postView.nhn?volumeNo=15493879&memberNo=15460786