API.AI

메신저 서비스의 사용률이 급상승하면서 챗봇이 떠오르고있다. API.AI AMICA.AI WIT.AI 등 챗봇을 쉽게 만들수 있는 서비스들이 생겨나고있다. 이런 서비스들을 챗봇빌더라고하는데, 그 중 최근에 구글에 인수된 API.AI를 살펴보자

기능

API.AI와 같은 챗봇빌더들이 제공하는 기능으로는 크게 의도분석(Intent), 성분분석(Entity)가 있다.

의도분석이란 어떤 문장이 어떤 의도를 가지고 있는지를 분류해내는데, 예를들면 "불고기피자 라지사이즈로 주문할게요"와 같은 문장은 ‘주문’이라는 의도이고, "오늘 3시에 회의실 예약해줘"라는 문장은 ‘회의실 예약’이라는 의도이다.

성문분석이란 문장 내에 있는 성분들이 어떤것들이 있는지 추출해내는 작업이다. 예를들어 "불고기피자 라지사이즈로 주문할게요" 에서는

"불고기피자" = @pizza_type

"라지사이즈" = @pizza_size 

처럼 피자의 종류와 사이즈를 추출해내고

"오늘 3시에 회의실 예약해줘" 라는 문장에서는

"오늘" = @date
"3시" = @time

처럼 시간과 날짜를 추출해내는 작업이다.

API.AI에서는 의도분석과 성분분석외에도 다양한 기능들을 제공하고있다. terminal

회의실 예약봇

API.AI의 기능들을 이용해 직접 회의실을 예약하는 Intent를 만들어보자!

우리가 의도하는 챗봇은 아래처럼 동작할것이다.

>> 오늘 3회의실 3시부터 4시까지 예약해~
@date : today
@roomnum : 3
@time-period : 15:00~16:00
>> 챗봇 : 오늘 3회의실을 15시부터 16시까지 예약했습니다.

여기서 api.ai에서 해야할 것은 회의실예약 intent를 처리하는것이다.

terminal

Intent탭에서 CREATE INTENT를 눌러 회의실 예약 Intent를 새로 생성하자.

terminal

Intent name : Intent를 식별하는 이름이다. 나중에 api를 호출할때 이 이름으로 구분한다. User says : 유저가 입력할 문장을 적는다. 비슷한 형태로 여러 문장을 적어놓으면, api.ai에서 자동으로 비슷한 문장일 경우 이 intent로 인식한다. Parameter : 문장 안에 들어가는 요소들이다. Entity를 직접 만들어서 넣을수도 있고, 시스템에서 제공하는 @sys.date와 같은 값들도 사용할 수 있다. Response : 이 Intent로 문장이 분류됬을때, 성문분석 외에도 직접 답변을 정해놓을 수 있다. 이미지나 여러 리소스도 활용할 수 있고, 여러개를 입력해놓으면 그 중 랜덤으로 출력된다.

회의실 예약봇을 위한 intent를 만들어보면 아래와 같이 될것이다.

terminal

이렇게 만들어진 intent를 오른쪽 ‘Try it now’창에서 직접 해볼 수 있다.

terminal

만들어진 결과는 개발자에게 json형태로 리턴된다. 여기서 설정해놨던 entity들을 알 수 있고, response를 지정해놨다면 그 중 하나가 랜덤으로 출력되게된다.

{
  "id": "304c0d7f-db9c-4a99-b29c-83917a584c3f",
  "timestamp": "2017-04-12T15:36:32.402Z",
  "lang": "ko",
  "result": {
    "source": "agent",
    "resolvedQuery": "오늘 3회의실 3시부터 4시까지 예약해줘",
    "action": "",
    "actionIncomplete": false,
    "parameters": {
      "date": "2017-04-13",
      "date-period": "",
      "roomnum": "3회의실",
      "time-period": "03:00:00/04:00:00"
    },
    "contexts": [],
    "metadata": {
      "intentId": "3a9bff00-2f6a-40e0-8e2c-3f0e1b66a622",
      "webhookUsed": "false",
      "webhookForSlotFillingUsed": "false",
      "intentName": "book"
    },
    "fulfillment": {
      "speech": "",
      "messages": [
        {
          "type": 0,
          "speech": ""
        },
        {
          "type": 0,
          "speech": ""
        }
      ]
    },
    "score": 1
  },
  "status": {
    "code": 200,
    "errorType": "success"
  },
  "sessionId": "0ef49b10-5061-4211-91bd-f47aefb22004"
}

이제 이렇게 만든 챗봇빌더를 facebook이나 slack 등에 연결하기만 하면 된다.