[GCP]Dialogflow 를 이용한 간단 챗봇 만들기 7탄 — Chatbase 를 통한 분석

이정운 (Jungwoon Lee)
11 min readSep 29, 2018

--

안녕하세요 이정운 입니다.

지난번 이야기에서 GAE flex 를 이용하여 Dialogflow 의 proxy server 아키텍처를 구성해봤으며 이번 이야기에서는 어떤 이야기를 드릴까 고민하다가, 이미 proxy server 구성을 한 김에 이를 이용하여 확장할 수 있는 다양한 기능중에 챗봇에 대한 분석에 관련된 이야기를 진행하는 것은 어떨까 생각이 들었습니다.

사실 지금까지 진행된 이야기를 통해서 각자 원하시는 대화 형식으로 Intent 를 구성한다면 기본적으로 어떤 챗봇도 Dialogflow 로 구성 가능하지 않을까 합니다. (대화구성을 어떻게 하실까만 고민하시고 나머지는 Dialogflow 로…) 그러면 이제 이렇게 구성한 챗봇을 어떻게하면 보다 잘 키워나갈 것인가라는 고민이 시작될거고 이를 위해서는 어떻게 챗봇이 대화를 했는지에 대한 정확한 분석이 하나의 숙제일 수 있을텐데요. 그래서 이번에는 Chatbase 라는 도구를 통해서 좀 더 강화된 챗봇 분석을 할 수 있는 방안을 살펴보도록 하겠습니다.

https://chatbase.com

Chatbase 라는 솔루션을 처음 들어보시는 분들도 계실텐데 Chatbase 는 2016년에 서비스를 시작한 챗봇 분석 솔루션으로서 사람들이 대화 경험을 보다 쉽게 분석하고 최적화 할 수 있도록 돕는 것이 목적인 SaaS 서비스 입니다. 이미 BestBuy, Ticketmaster, KLM 등 다양한 대형 고객사례를 보유하고 있으며 가장 결정적으로 세션 분석, 리텐션 코호트 분석, 퍼널 분석 등 다양한 분석 기능이 포함된 Standard edition 을 무료로 제공하고 있어서 가난한 개발자(?) 분들도 편하게 사용할 수 있는 서비스 입니다. (Chatbase는 Google에서 운영하는 인큐베이터인 Area 120 에 의해 제공중입니다.)

설명보다 한번 직접 살펴보면 보다 이해가 쉽게 되실것으로 판단하며, 그럼 지금부터 실제 간단하게 구현을 해보면서 살펴보는 시간을 가져보도록 하겠습니다.

늘 이야기 하지만 본 이야기는 하단의 링크들을 참고하여 작성하였습니다.

Quickstart
https://chatbase.com/documentation/quickstart

Integration with Dialogflow
https://chatbase.com/documentation/dialogflow-integration

Getting Started with Chatbase chatbot analytics
https://codelabs.developers.google.com/codelabs/chatbase/index.html#0

google/chatbase-node
https://github.com/google/chatbase-node

Chatbase Node.JS Client
https://www.npmjs.com/package/@google/chatbase

#1) Chatbase 가입 및 둘러보기

가장먼저 해야 할 일은 당연히 Chatbase 에 가입하고 분석을 위한 에이전트를 만드는 일입니다. 하단의 링크에 있는 Chatbase 사이트에 접속해서 가입하면 됩니다. (Google 계정으로 가입 가능합니다.)

https://chatbase.com

가입하고 메인메뉴에 들어오면 기본적으로 다양한 분석 샘플 그래프들을 확인해볼 수 있습니다. 한번 해당 샘플들을 쭉 살펴보시면 Chatbase 가 제공할 수 있는 분석 기능을 대략 확인이 가능하실 것입니다.

분석 메뉴에서는 하단과 같이 챗봇을 좀 더 최적화 하는데 필요한 제대로 처리되지 않은 메세지의 통계라던가 Session Flow 등을 확인 가능합니다. (이전 Dialogflow 분석 관련 이야기에서 Session Flow 를 이미 설명 드렸었는데 간단하게 이야기 하면 대화의 흐름이 어떻게 흘러가는지 분석할 수 있는 그래프를 제공합니다.)

특히 Dialogflow 에서는 제공하지 않는 퍼널 분석이나 리텐션 코호트 분석도 확인 가능하므로 좀 더 전문적으로 챗봇에 대한 분석을 수행할 수 있습니다.

다시 한번 강조하지만 이런 멋진 기능을 무료로 제공한다는것 자체가 굉장히 매력적으로 보여집니다. ^^;

추신 #1 : Dialogflow 에서 제공되는 기능은 사실 Chatbase 를 기반으로 하고 있으며 그 둘 간의 제공 가능한 분석 기능의 차이는 하단의 표를 참고하시기 바라겠습니다.

https://chatbase.com/documentation/dialogflow-integration

#2) Chatbase 분석 연동을 위한 bot 등록하기

이전 파트에서 간단하게 Chatbase 에 가입을 하고 어떤 기능이 있는지 살펴봤으니 이제 실제로 Chatbase 와 연동을하고 사용해 보는 단계를 진행해 보도록 하겠습니다. 이를 위해서는 Chatbase 에 연동을 위한 bot 을 등록해야 합니다.(본인의 챗봇 등록) 메뉴 우측 상단에 My bot 아이콘을 클릭하면 하단과 같이 bot 을 등록하기 위한 메뉴로 넘어 갑니다. 여기서 새로운 bot 을 등록하기 위하여 ‘+’ 를 클릭합니다.

Bot 등록을 위한 이름이나 나라와 같은 필요 정보를 하단과 같이 넣어 줍니다.

다음 단계로 Bot 연동을 위한 API Key 가 나오는데 이는 꼭 기억하고 있어야 합니다. 가이드 문서들도 제공되니 시간되실 때 한번씩 읽어보시기 바라겠습니다.

다음으로 협업을 위해서 초대할 사람에 대한 메세지를 작성하면 생성을 완료할 수 있습니다. (그냥 Skip 을 해도 상관없습니다.)

그러면 하단과 같이 새롭게 bot 이 하나 추가된 것을 확인 할 수 있습니다.

이렇게 되면 이전에 봤던 샘플 분석 그래프와 같이 지금 만든 bot 에 대한 그래프들을 확인할 수 있습니다.

당연히 지금은 아무런 데이터도 연동된 적이 없기 때문에 다 비어있는 그래프를 확인하실 수 있습니다.

#3) Dialogflow 에서 Chatbase 연동하기

이제 좀 더 실제적인 단계에 들어가서 Dialogflow 에서 Chatbase 로 연동을 해보도록 하겠습니다. 이 부분은 생각보다 가이드가 잘 되어 있으며 코드랩도 제공되므로 하단의 두개의 링크를 참고하시면 어렵지 않게 구성 가능하지 않을까 합니다. (아마도 같은 Google 가족이라…)

Integration with Dialogflow
https://chatbase.com/documentation/dialogflow-integration

위의 가이드를 자세히 살펴보시면 아시겠지만 연동을 위해서 특별한 무언가를 복잡하게 하는 것은 아니고 이전에 받았던 API key 를 기반으로 인증하고 제공되는 Client library 를 활용하여 대화 내역을 API call 로 호출만 하면 나머지는 알아서 Chatbase 가 이를 분석에 용이한 각종 그래프 형태로 보여주는 형태입니다.

따라서, 지난 강좌에서 사용한 server.js 소스를 그대로 사용하면서detectTextIntent() 메소드에 Chatbase 를 API 로 호출하는 부분만 실제 대화 결과를 반환하기전 메소드에서 추가해 주면 됩니다.

……
var chatbase = require('@google/chatbase')
.setApiKey('e1aedd18-2936-4c56-8a07-79f095c15c63')
.setUserId('user0124')
.setPlatform('chat-proxy01')
.setVersion('1.0');
……
chatbase.newMessage()
.setAsTypeUser()
.setTimestamp(Date.now().toString())
.setMessage(result.queryText)
.setAsHandled()
.setIntent(result.intent.displayName)
.send()
.then(msg => {
// The API accepted our request!
console.log(msg.getCreateResponse());
}).catch(error => {
// Something went wrong!
console.error(error);
})

chatbase.newMessage()
.setAsTypeAgent()
.setTimestamp(Date.now().toString())
.setMessage(result.fulfillmentText)
.send()
.then(msg => {
// The API accepted our request!
console.log(msg.getCreateResponse());
}).catch(error => {
// Something went wrong!
console.error(error);
})
……

해당 소스에서 사용한 API 와 메소드에 대한 설명은 하단에 있는 chatbase 공식 github 를 참고하시기 바라겠습니다.

google/chatbase-node
https://github.com/google/chatbase-node

Chatbase API 를 문제없이 기존 소스에 적용하고 테스트를 해보시면 기존과 동일하게 결과가 나오면서 추가적으로 Chatbase 에 message 를 성공적으로 넣었다는 메시지와 message id 를 확인 가능합니다.

이렇게 테스트를 성공적으로 완료하면 시간이 지난 후에(보통 1시간 이상 걸림) 하단과 같은 분석 결과 그래프를 확인 가능합니다.

이때, 하나의 주의점은 Chatbase 가 제공하는 것은 실시간 그래프가 아니라 챗봇의 분석 목적의 통계 그래프 라는 점 입니다. 따라서, 실시간으로 그 결과를 확인할 수 있는 것은 아니고 분석 통계를 확인하기 위해서는 시간이 오래 걸린다는 점을 인지해야 하며 Chatbase 의 사용 목적도 통계 분석이라는 점을 명확히 해야 합니다. (대략 얼마나 걸리는 지는 하단의 FAQ 를 참고하시기 바라겠습니다.)

https://chatbase.com/documentation/faq

여기까지 잘 따라오셨다면 Dialogflow 로 만든 챗봇 분석을 위한 Chatbase 연동을 무사히 잘 마무리 하신것 입니다. (아직 한글관련 몇몇 버그가 눈에 보이지만 한국 사용자들이 많아지면 나아지겠죠.)

Dialogflow 를 활용한 챗봇을 테스트 해보면서 느끼고 있는 점 중의 하나는 처음에도 강조드렸지만 한번의 개발과 구축으로 끝나는 여정이 아니라 계속적으로 챗봇을 성장시켜야 하고 그러기 위해서 중요한 것은 자동화된 프로세스와 정확한 분석이라는 생각입니다. 계속적으로 챗봇을 성장시키기 위한 명확하고 반복적이면서도 자동화가 가능한 프로세스가 존재해야 하며, 사용자들이 제대로 챗봇을 쓰고 있는지, 대화가 잘 이어지고 있는지, 어떤 말들을 주로 하는지 등의 분석이 제대로 되어야지만 챗봇을 원하는 방향으로 키워나갈 수 있지 않을까 합니다. 따라서, 이를 잘 지원하기 위한 플랫폼 환경을 구축해야 그나마 쓸만한 챗봇으로 성장 시킬 수 있지 않을까 하는 생각입니다.

이런 저런 생각들이 많이 들긴 하지만 오늘 준비한 이야기는 여기까지로 마무리하고 다음에 다른 이야기로 다시 돌아 오도록 하겠습니다. 그럼 이만 휘리릭~~~

추신 #2: 이번에 Dialogflow 의 document 가 깔끔하게 정리되어 업데이트 되었네요. 참고하세요

* Disclaimer: 본 글의 작성자는 Google 직원이지만 Google cloud 를 공부하는 한 개인으로서 작성된 글입니다. 본 글의 내용, 입장은 Google 을 대변하지 않으며 Google 이 해당 콘텐츠를 보장하지 않습니다.

--

--

이정운 (Jungwoon Lee)

Technical engineer who dreams better future. (These thoughts are my own personal opinions, and do not reflect or represent Google’s opinions or plans.)