brunch

You can make anything
by writing

C.S.Lewis

by 진격의진진 Jan 03. 2019

클로바에 튜달봇 데뷔한 이야기

튜우터링 시자케죠!

우선 영상 하나 보시고 시작하겠다.


브라운의 탈을 쓴 튜달봇.




튜터링은 약 650여 개의 토픽으로 원어민 튜터와 스피킹 연습을 할 수 있는 서비스를 제공하고 있다. 각 토픽은 15개 ~ 30개의 토픽 카드로 구성되어 있고, 토픽 카드에서 배우는 핵심 표현을 원어민 음성으로 듣고 따라 할 수 있는 기능이 있다. 학생은 원어민 튜터와 수업하기 전에 미리 원어민 음성을 들어보고 수업 준비를 하기도 하고, 그냥 혼자 발음 공부를 하기도 한다.


2019년 1월 기준으로 튜터링에서 제공하는 원어민 음성 표현은 약 3,000개가량 된다.


아래 링크는 그 유명한, 2018년 9월 레오나르도 디카프리오의 UN 연설을 배워 볼 수 있는 토픽이다.

(이 링크로 튜터링 앱을 설치하고 가입까지 마치면, 튜터링에서 필자에게 보너스를 지급할 예정이니 가급적 상단의 체험하기 버튼을 눌러 앱 설치를 하도록 하자!)




2018년 봄부터 네이버는 'Clova Extension Kit β (CEK)'이라는 이름으로 콘텐츠를 가지고 있는 외부 사업자/개인에게 클로바 AI스피커를 활용한 서비스를 개발하도록 SDK를 제공하기 시작했는데, 어디서 들으셨는지 대표님이 서둘러 검토하라고 지시하셨다.

(방금 대표님께서 이부분이 허위사실이라고 적도록 지시 하시었다)


2018년 봄부터 여름 시즌은 그야말로 AI 스피커들의 각축장이었는데, 비슷한 시기에 SK, KT 등에서 SDK를 쏟아내고 있었고, 서둘러 뭐 하나 구현해 놓지 않으면 대표님이 모두 만들라고 할까 봐 제일 쉬워 보이는 CEK를 골랐다.


CEK 문서를 보시면 아시겠지만, 클로바와 사용자의 대화는 아래와 같은 절차로 진행된다.


1. Wake 명령어 발화 (스피커 대기상태)

2. Extension 식별자 발화 (서비스 선택)

3. Intent(의도) 발화 (명령어 접수)

4. Extension에서 응답 (서비스에서 제공하는 콘텐츠 제공)


이를 바탕으로 구현하고자 하는 기능의 시나리오는 아래와 같았다.


1. 스피커를 깨운다. - "클로바! 튜터링 시작해줘!"

2. 영어 표현을 알려달라고 한다 - "오늘의 표현 알려줘!"

3. 영어 표현을 듣는다.

4. 끝. (응??)


자 이제 개발을 위한 스터디(?)와 설계(?)는 끝났으니 바로 구현을 시작해 보자!!





1단계 : 기본정보 설정하기


우선 CEK Console에서 만들고자 하는 Extension의 정보를 설정한다.


꽤 많은 내용을 입력해야 하는데, 나중에 수정할 수 있으니 일단 아는 대로 대충 입력하자.

다만 Extension ID는 나중에 수정할 수 없으니, 신중하게 만들어야 한다.

클로바와 통신할 API주소를 입력해야 하는데, CEK는 기본적으로 SSL 통신을 하므로, 구현하고자 하는 API의 웹서버에 해당 도메인의 SSL 인증서는 미리 구매하여 세팅해야 한다. (SSL 인증서가 비싸다면 Let's Encrypt를 활용해 보자!)


Tip!) 

그리고 Extension 호출 이름은 "클로바! 튜터링 시작해줘" 같이 우리가 만들 앱을 부를 때 사용하는 명령어인데 일반 명사나 소유권 분쟁이 일어날 만한 이름으로 만들면 거절될 수 있으므로, 신중하게 결정해야 한다. 튜터링의 경우에는 소유권 분쟁 보다, "튜터링" 단어 자체가 문제였다. "튜터링!"으로 불렀더니, 스피커가 아래와 같은 반응을 보였다.

- "케이터링"을 찾을 수 없습니다.
- "필터링"으로 웹에서 검색해 드릴게요.


가장 확실한 반응은 이렇게 호출하는 거다.

튜우터링 시자케조~!! (ㅜ.ㅜ)


클로바는 된소리에 특히 잘 반응한다!!


2단계 : Intent 설정하기


사용자가 발화한 음성은 클로바 서버로 전달되어 미리 등록해 둔 Intent(의도)로 분류되고 우리가 만들 API로 전달된다.

결론부터 이야기하자면, 우리의 API에 전달되는 정보는 클로바에서 분석된 Intent(의도)와 Slot(정보)이다. 그렇기 때문에 Intent의 정의가 가장 중요하다.


CEK Console에서 시뮬레이션이 가능하니 목표 시나리오대로 충분히 연습해 보면서 Intent와 Slot이 잘 분리되어 전달되는지 확인해 보자.

Tip!)

사용자의 입장으로 최대한 많은 패턴을 예상해 Interaction 모델을 정의해야 Intent인식률을 높일 수 있다.


3단계 : API 만들기


Interaction 모델이 만들어졌다면 CEK로부터 전달받은 요청에 대한 응답을 하면 완성이다.


우선 튜터링 CEK의 응답 포맷을 살펴보자.


위 Response를 설명하면 아래와 같다.


1. 한국어로 "1번째 오늘의 표현이에요"를 TTS로 읽어줘.

2. "***. mp3"을 재생해줘.

3. 한국어로 "블라블라"를 TTS로 읽어줘.

4. "***. mp3"을 또 재생해줘.

5. 한국어로 "다시 들으려면 오늘의 표현이라고 이야기해주세요"를 TTS로 읽어줘.

6. 한국어로 "종료하시려면 종료해줘 라고 이야기해 주세요"를 TTS로 읽어줘.


"클로바 튜터링"은 위와 같은 형태로, "오늘의 표현", "테마 영어", "종료"와 같은 Intent에 대응하는 API가 구현되어 있다.




마지막 팁!

튜터링을 클로바에서 만나려면, 클로바 스피커 앞에서 튜터링을 불러 주세요~!

튜터링 시작해줘!


하지만, 튜터링이 응답하지 않는다면, 다시 한번 불러 주세요~!

튜우터링 시자케죠~!



끗.



매거진의 이전글 튜달봇 두 형제 이야기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari