Intent란 사용자의 의도를 말하며, 이 의도를 처리하는 기능은 Action이 한다. 예를 들어 날씨를 묻고자 할때 '아리야, 날씨 알려줘'는 Intent고, '오늘은 맑습니다'같은 답변이 Action이다. NUGU 오일에서 정의한 Intent는 다음과 같다
ask.lowprice : 이 intent는 사용자가 발화한 Utterance Parameter인 오일 종류(경유/휘발유) entity를 받아 Backend Proxy 서버에 전송하고, 그 결과로 얻은 주유소 정보와 가격 Backend Proxy를 받아 온다.
ask.price : 이 intent는 경유, 휘발유 예측 가격을 Backend Proxy 서버에서 받아 온다
ask.select : 사용자가 물어보는 게 경유인지 휘발유인지 알아보기 위해 다시 물어볼 때 쓰는 Intent
Action은 Intent들이 실제로 NLU 엔진을 통해 분석 되었을 때 이를 처리하는 것을 의미한다. '날씨 알려줘' 에서 살펴보았듯이 Intent를 처리하기 위해 하나의 Action을 만들고, 우리는 이 Action에 응답을 작성할 수 있다.
Action 정의에서는 Output 유형 4가지를 우리의 의도에 맞게 배치 해야했다. NUGU Play Builder에서는 구분을 Response
, Branch Action
, Response + Branch Action
, Common Action
으로 하고 있는데, 우리가 자주 사용했던 것은 Branch Action
으로 "경유 최저가 주유소 알려줘"라고 물으면 Backend Proxy에서 값을 받아왔을 때는 해당 정보를, Backend Proxy에서 값이 없을 때는 없다는 메세지를 내보내는 것이었다. 또한 경유인지, 휘발유인지 사용자의 의도를 한 번 더 물어볼 때는 Response + Branch Action
을 사용했는데, 아래 사진처럼 Trigger을 명확하게 지정해줘야 했다.
우리가 작성한 NUGU Play Builder의 발화문 처리는 다음과 같다. 사용자가 경유인지 휘발유인지를 언급하면, 바로 Backend Proxy에서 가져온 주유소 명칭과 가격을 불러올 수 있게 연결했고, 사용자가 경유인지 휘발유인지를 미리 언급하지 않았다면, 한 번 더 물어보는 구조로 작성했다.
Intent와 Action을 모두 설정했다면, 이제 Back단의 데이터와 연동시킬 차례이다. 연결은 NUGU Play Builder의 General 메뉴에서 Global 설정으로 진행할 수 있다. Backend Parameter를 위에서 기획한대로 기입하고, 서버와의 연결을 확인한다.
연결을 마치면 상단에 테스트 버튼을 통해 테스트런을 진행할 수 있다. 아래 NLU 분석 결과 열기 버튼을 통해NUGU Play Builder가 제대로 intent를 인식 했는 지 확인했고, 결과값이 정확한지 확인했다.