개요

Dialogflow의 개념적 이해를 설명하고 프로토타이핑을 통해 좀 더 구체적으로 Dialogflow가 어떤 역할을 하는지 살펴본다.

Dialogflow란?

자연어와 Rich한 UI/UX를 제공하는 플랫폼

AI가 제공하는 매력적인 음성 및 텍스트 기반 대화식 인터페이스를 구축하여 사용자가 제품과 상호 작용할 수있는 새로운 방법을 제공할 수 있다. Google Assistant, Amazon Alexa, Facebook Messenger 및 기타 널리 사용되는 플랫폼 및 장치에서 사용자와 연결하여 사용할 수 있다.

시스템적인 이해

구성도

Dialogflow는 아래와 같이 어떤 device던 상관없이 자연어 처리를 도와주는 플랫폼 역할을 한다. 연동 방식은 크게 아래의 2가지 중 하나를 택한다.

  • 기존 플랫폼 Integration
    기존 플랫폼(예를 들어 slack)과 연동하여 이미 정해진 Rich Response를 이용하여 서비스를 만든다.
  • 자체 제작
    예를 들어 멜론에서 dialogflow를 쓴다면 멜론 앱에 Dialogflow Android SDK를 꽂고 연동 후 직접 비지니스 로직을 다 처리한다. dialogflow는 자연어 처리 플랫폼으로만 이용하기 때문에 사용자 UI는 자유롭게 설계해서 사용하면 된다.

특징

자체 머신러닝

dialogflow를 사용하고자 회사의 봇을 만들때 예제문장을 dialogflow에 제공한다. 수년간의 도메인 지식 및 자연어 이해를 통해 dialogflow는 사용자가 가장 유용한 방식으로 응답하는 데 도움이되는 사용자의 의도를 분석하고 이해한다. 말이 조금 어려운데 기술적으로 설명하자면 예시 문장을 제공하면 예시문장과 비슷한 문장을 자동으로 학습해주는 특징이 있다. 직접 테스트해보았을 때 영어의 경우 매우 잘 되는 편이고 한국어는 아직 기능이 동작하지 않는것과 다름 없었다.

멀티 플랫폼 지원

챗봇앱을 만들 때 Google Assistant, Slack, Cortana, Alexa 및 Facebook Messenger와 같이 기존에 존재하는 플랫폼은 쉽게 연동을 할 수 있다.

실제로 메뉴를 통해 쉽게 연동할 수 있게 제공하고 있다.

멀티 디바이스 지원

사용자는 웨어러블, 휴대 전화, 자동차, 스피커 및 기타 스마트 장치를 통해 dialogflow를 활용 할 수 있다. 아래의 그림에서 보듯이 대부분은 디바이스를 지원하고 있다.

다국어 지원

스페인어, 프랑스어 및 일본어를 포함한 14 개 이상의 언어가 지원되고 있다.

구성도

Dialogflow 개념적인 이해

개념적인 Dialogflow의 Request 흐름은 아래와 같다.

Intent

아래부터 설명할 intent/entity/training/fullfilmment/response의 개념을 현실세계의 날씨 물어보기랑 비교하며 설명하고 있다.

Entity

Training

Fulfillment

실제 비지니스 로직을 태울 서버 URL을 설정하는 부분으로써 기본 지원으로 Firebase, Heroku를 지원한다. 하지만 실제 회사에 적용할 때에는 SSL을 겸비한 REST 서버가 될 것이다.

Response

예제

인텐트는 아래와 같다.

인텐트명
노래재생
노래검색

엔티티는 아래와 같다.

엔티티명 엔티티들
아티스트명 아이유
방탄소년단
EXO
곡명 좋은날
가을아침
불타오르네
ko ko bop

등록할 예문은 아래와 같다.

인텐트명 예문
노래재생 아이유 노래 틀어줘
아이유 노래 들려줘
좋은날 틀어줘
좋은날 들려줘
노래검색 아이유 노래 검색해줘
아이유 노래 찾고싶어
좋은날 검색해줘
좋은날 찾고싶어

여기서 좋은 점은 Dialogflow는 패턴을 인식한다는 것이다. 실제 엔티티명은 아래와 같이 패턴으로 바뀌어 엔티티명을 매번 입력할 필요가 없다.

인텐트명 예문
노래재생 #ARTIST_NAME# 노래 틀어줘
#ARTIST_NAME# 노래 들려줘
#SONG_NAME# 틀어줘
#SONG_NAME# 들려줘
노래검색 #ARTIST_NAME# 노래 검색해줘
#ARTIST_NAME# 노래 찾고싶어
#SONG_NAME# 검색해줘
#SONG_NAME# 찾고싶어

예제를 통한 이해

음악 봇 만들어보기

이제 Dialogflow로 샘플 프로젝트를 하나 만들어 좀 더 구체적으로 이해해보자. 음악을 재생해주는 “음악봇”을 한번 만들어 흐름을 살펴보자.

Dialogflow 콘솔에서 +버튼을 눌러 봇을 생성한다.

봇 이름과 인식할 언어를 선택하고 Google Project는 만든적이 없다면 신규로 만들어주자.(Actions on Google관련 배포를 할 때 필요하다.) API VERSION은 V2가 나온지 아직 얼마되지 않았기 때문에 우선 V1으로 진행한다.

봇을 생성하고 나면 인텐트를 만들어야 한다. CREATE INTENT를 클릭한다.

노래 재생에 대한 Intent를 만들어 볼 예정이다. User says에 “아이유 노래 틀어줘”를 입력 후 엔터를 친다. 그러면 아래와 같이 “이”기 기본 숫자 엔티티로 인식되는 것을 확인 할 수 있다. 또한 기본 엔티티명으로 파라미터가 설정된 것을 확인 할 수 있다. 파라미터는 Fulfillment 시 서버로 전달되는 파라미터명이다.

숫자 엔티티는 우리가 현재 원하는 엔티티는 아니기 때문에 제거해준다.

숫자 엔티티를 제거후 “아이유”를 드래그 하면 기존에 만들어진 엔티티를 맵핑하거나 새로운 엔티티로 생성 할 수 있다. 현재 만들어진 엔티티가 전혀 없으므로 Create new를 클릭한다.

“ARTIST_NAME” 엔티티로 원하는 아티스트명을 넣어준다. 여담이지만 csv형태로 bulk로 넣을 수도 있고 Rest API로 Insert할 수 도 있다.

마찬가지로 “SONG_NAME”도 엔티티를 만들어준다.

다시 인텐트 메뉴로 가서 똑같은 예문을 쳐보면 이번에는 엔티티가 원하는대로 인식된 것을 확인 할 수 있다.

기존에 가지고 있던 예문을 추가로 넣어주고 Intent를 Save해준다.

Intent save가 끝나고 예문을 테스트 메뉴를 통해 확인해 보면 정상 인식 된 것을 확인 할 수 있다.

앞서 언급한 것 처럼 모든 엔티티명을 예문으로 넣을 필요 없이 (예문 패턴을 인식하기 때문에) 같은 문장 패턴을 다른 엔티티명으로 입력해도 인식이 되는 것을 확인 할 수 있다. 영어버전에서는 이 부분에서 머신러닝이 수행되어 파생 문장은 추가적으로 학습이 된다.

위의 과정으로 봇을 만들고 인텐트를 만들고 엔티티를 만들어 인텐트를 인식하는 것을 확인하였다. 그러나 실제로는 static한 응답만 내려가는 봇은 상용환경에서 거의 없을 것이다. 따라서 필요한 것은 본인의 회사 서버랑 연결하여 response를 처리하는 것이다. 이부분에 대해 한번 알아보자.

Dialogflow는 외부 서버로 Request를 포워딩하는 기능을 가지고 있는데 이를 Fulfillment라고 부른다. 이 Fulfillment는 SSL규격만 갖추면 어떤 서버든 연동 할 수 있는데 편의상 Firebase와 Heroku는 적극 지원하고 있다. 이중에서 Firebase의 경우 Inline Editor를 통해 node.js형태의 코드를 편집/배포 할 수 있어 편리하다. 이부분을 이용해서 Fulfillment를 테스트 해보자.

Inline Editor를 활성화 하고 Deploy버튼을 누르면 저절로 Firebase로 코드가 배포된다. 최초 1회 이후의 배포에서는 최종 배포시간과 로그를 볼 수 있는 콘솔 사이트 정보가 출력된다.

Intent별로 Fulfillment를 적용 여부를 선택 할 수 있다. 이제 Fulfillment를 연동하고 싶은 “노래재생” 인텐트로 이동하여 맨 하단의 Use Webhook을 선택하고 Save해준다.

이제 봇을 테스트를 해보면 Inline Editor에 정의된 기본 response로 바뀐 것을 확인 할 수 있다.

Firebase 콘솔로 이동해보면 Request/Response가 정상적으로 찍히는 것을 확인 할 수 있을 뿐만 아니라 내용을 확인 할 수 있어 디버깅이 편리하다.

Integration 적용

Integration 개념을 간단히 설명하기 위해 다른 프토토타입한 결과로 잠시 이야기 하겠다. 예를 들어 Slack이랑 연동하고 싶으면 관련 메뉴에서 Slack 설정을 셋팅한 후 슬랙을 통해 테스트 해 볼 수있다. 아래의 예제는 Yahoo 날씨랑 연동한 날씨 챗봇 예제로써 자세한 How-To에 대해서는 여기서 다루지 않을 예정이다.

자바 SDK 테스트

자바 SDK는 github 샘플코드로 테스트 시 정상 동작함을 확인 할 수 있었다.

더 알아봐야 할 부분

지금까지 시스템관점, 개념적인, 예제를 통한 dialogflow 이해하기를 진행해 보았다. 조금이나마 플랫폼 이해에 도움이 되었으면 하는 바람이고 아래와 같은 내용은 실제로 더 테스트하여 검증이 필요하다.

메세지 포맷

Fulfillment에서 사용하는 Integration 및 Action On Google에 대한 메세지 규격 테스트

SDK

안드로이드, iOS, 자바를 포함한 다양한 플랫폼 SDK