ChatBot 만들기 1탄

Seungwon Go
ReturnValues
Published in
5 min readFeb 2, 2018

우리회사는 매주 금요일마다 업무외에 것(?)들을 진행하고 있는데 그중 첫번째주 금요일은 Tech Day를 실시하고 있고, 지금 우리가 Tech Day에 진행하고 있는 small project는 ChatBot를 만들어 보는 것이다.

ChatBot을 만들어 보기 위해서 몇가지 오픈소스를 검토 중 Dialogflow라는 ChatBot 프레임워크를 알게 되었고, Dialogflow를 만든 회사는 이미 구글에 인수가 되었다는 사실을 알게 되었습니다. UI가 직관적이고, 쉽게 ChatBot을 구성할 수 있다는것이 큰 매력이였고, 그리고 무엇보다 소규모 업체에서 사용할때는 무료로 사용할 수 있다는 점이 좋았다.

Dialogflow는 크게 Standard EditionEnterprise Edition(링크참조)으로 라이센스가 구분이 되었고, 거의 모든 기능이 똑같은데, 초당 처리할수 있는 쿼리 수와 보이스를 통한 처리개수 제한이 달랐다.

어자피 우리의 목표는 한달에 하루 있는 Tech Day에서 빠르게 챗봇을 만들어 보고, 경험을 해보는것을 목적으로 하고 있기 때문에, 현 시점에서 가장 빠르게 할수 있는 방안이라고 결정한 Dialogflow를 사용하기로 결정하였다.

Dialogflow의 Intents 생성화면

Dialogflow에서 챗봇을 만들기 위해서는 아래의 과정으로 진행하게 된다.

  1. Agent 생성 : Agent는 쉽게 생각하면, 이것이 곧 챗봇이라고 생각하면 된다. Agent를 생성한 후 중요한 내용은 개발을 위한 API Key와 언어 설정 정보이다.
개발을 위해 발급된 KEYS

언어는 Default로 무조건 영어가 잡히고, 사용할 언어를 추가할 수가 있다. 한국어를 추가하였다.

사용할 언어 설정

2. Entity 생성 : Entity는 사용자가 작성한 채팅 문장에서 우리가 원하는 특정 단어(Entity)를 생성하는 일이다. 예를 들어 사용자가 고객 정보를 보기 위해서 “홍길동 정보를 보여줘" 라고 입력했다고 가정해보자.

여기서 홍길동은 고객이름이고, 정보는 사용자가 얻고자 하는 정보이다. 우리는 이때 Entity로 customerName 과 information 을 각각 Entity로 만들 수 있다.

그래서 customer이라는 Entity에는 들어올수 있는 모든 고객이름을 등록해 놓으면 된다. 그래서 사용자가 채팅 문장에 고객이름이 언급되면, 우리에게 해당 Entity인 customer에 등록되어져 있는 정보를 확인하고 동일한 고객명의 value 값을 전달해 준다. (여기서는 고객코드)

Entity 등록 화면

3. Intent 생성 : Intent는 쉽게 생각하면 사용자로 부터 받게 될 채팅 문장이라고 생각하면 된다. Intent를 생성하고 동일한 문장에 대해서 사용자 별로 조금씩 다르게 입력 할수 있으므로, 각종 경우의 수를 생각해서 모두 작성을 해 놓으면 된다.

Intent 생성 화면

위 그림에서 우리는 고객정보를 보기 위해서 사용자가 입력할 문장의 케이스를 6가지로 등록하였다.

  • 고객정보
  • 고객 정보
  • 고객 정보를 보여줘
  • 고객정보 보여줘
  • 고객 정보 보여줘
  • 고객정보를 보여줘

위의 6가지 문장에서 “고객"이라는 단어는 우리가 앞서 생성한 customer 라는 Entity와 연결해주고, “정보"라는 단어는 information 이라는 Entity와 연결을 해준다.

이렇게 되면 사용자가 아래와 같이 입력하는 모든 경우에 대해서 우리가 원하는 고객의 이름(customer)과 사용자가 알고 싶어하는 정보(information)를 사용자가 채팅창에 입력하는 동시에 결과로 받을 수 있게 된다.

  • 홍길동정보
  • 홍길동 정보
  • 홍길동 정보를 보여줘
  • 홍길동정보 보여줘
  • 홍길동 정보 보여줘
  • 홍길동정보를 보여줘

Dialogflow에서 return해주는 형태는 json으로 해주고 json 안에는 아래와 같은 정보가 담겨 있다.

사용자가 입력한 채팅 문장에 대한 Return 데이터

4. Response 설정 : Intent 내에서 Intent 문장이 들어왔을때 챗봇에서 대답해야 할 문장을 아래처럼 등록할 수 있다.

이렇게 기본적인 설정을 할 수 있고, Dialogflow에서 제공하는 service api를 통해서 우리가 구축하고 시스템/서비스 안에 위의 Agent로 생성한 챗봇을 붙일 수 있고, 사용자가 입력한 문장에 대한 답변을 여러가지 형태(텍스트, 버튼 등)로 줄 수 있다.

우리는 우리가 구축중인 시스템에서 신규 고객이 등록될때 마다, 해당 고객코드와 고객이름을 Dialogflow에서 제공하는 REST API를 통해서 우리가 이미 생성한 Entity인 customer에 계속 등록이 되도록 하고 있고, 그래서 사용자가 채팅창에 어떤 고객이름을 이용해서든 “고객이름 정보를 보여줘" 라는 문장을 입력하면, 바로 DB에 있는 고객정보를 보여주도록 하고 있다.

실제 서비스에 적용된 모습까지 총 3탄으로 나누어서 글을 써보도록 하겠다.

--

--