코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 세션 발표 자료 입니다.
목표 1. 코인 헬퍼 Extension의 개요를 이해한다.
목표 2. Extension의 목표 수립 과정을 살펴본다.
목표 3. Extension의 사용자 시나리오 및 스크립트를 작성 과정을 살펴본다.
목표 4. Extension의 진행 Flow 및 인터렉션 모델을 정의 하는 과정을 살펴본다.
2. Notice
본 세션은 Clova Dev Days (매월 2회 진행) 에서 진행하는
‘CEK를 이용한 Clova Extension 디자인 및 설계’ 및
‘CEK를 이용한 Clova Extension 개발’ 세션을
선행 학습 하셔야 이해하시기 쉽습니다.
오프라인 : 별도 참석 문의 (3/21 예정)
온라인 : /ClovaPlatform
3. 목표
1
2
3
4
코인 헬퍼 Extension의 개요를 이해한다.
Extension의 목표 수립 과정을 살펴본다.
Extension의 사용자 시나리오 및 스크립트를 작성 과정을 살펴본다.
Extension의 진행 Flow 및 인터렉션 모델을 정의 하는 과정을 살펴본다.
7. 1. 코인 헬퍼 Extension 개요
- 암호 화폐 시장이 주목을 받는 상황에서 사용자들이 음성으로 사용할 수 있는 Extension을 서비스하면 어떨까?
- CEK를 이용하여 Extension 개발을 하고자 하는 3rd Party 개발사/개발자를 위한 인터렉션 모델과 구현 코드 샘플을 제
공하면 많은 도움이 되지 않을까?
네이버 클로바
모바일앱 (Android, iOS)
9. 2.1. Extension 목표 수립
- Extension의 목표는 무엇인가?
- Extension 사용자에게 암호 화폐 시세 정보를 제공하고, 거래소에서 구매/판매 할 수 있도록 한다.
- Extension의 사용자 타겟은 누구인가?
- 클로바를 사용하는 암호 화폐 관심이 많은 20~30대 유저
- Extension의 사용 시나리오는 무엇인가?
- 대표 시나리오
- 사용자의 음성으로 암호 화폐 종류별로 시세를 조회한다 -> 콘텐츠형
- 사용자의 음성으로 암호 화폐 거래소별로 시세를 조회한다 -> 콘텐츠형
- 사용자의 음성으로 암호 화폐 시총 상위 10위 정보를 조회한다 -> 콘텐츠형
- 사용자의 음성으로 암호 화폐 지갑의 잔고를 조회한다 -> 기능형
- 사용자의 음성으로 암호 화폐를 거래소에서 구매/판매 한다 -> 기능형
10. 2.1. Extension 목표 수립
- Extension에서 사용할 수 있는 콘텐츠 (API 혹은 DB)가 VUX (Voice User Experience)에 적합한 형태인가?
- 거래소별 Open API 지원 확인 (대표 거래소인 빗썸, 코인원, 코빗)
- 빗썸 : https://api.bithumb.com
- 코인원 : https://api.coinone.co.kr
- 코빗 : https://api.korbit.co.kr
- 거래소별 제공 API 리스트 확인
- 거래소 조회 (Public API) : 시세조회, 최근 체결내역 조회, 현재 호가 조회, 환율 조회
- 사용자 조회 (Private API) : 사용자 정보, 잔고 조회, 일별 자산현황, 비트코인 입금 주소, BTC 입/송금 내역, KRW 입/출금 내역, 가상계
좌 조회
- 거래소 주문 (Private API) : 시장가 주문, 지정가 주문, 취소 주문, 전체 취소 주문, 주문 내역, 나의 체결내역
11. 2.2. Extension 세부 목표 수립
- 세부 목표 1. Extension 호출
- 사용자는 Extension 호출명 (Invocation Name)을 발화하여 Extension을 호출 할 수 있다.
- 호출명은 사용자들이 기억하기 쉽고, 서비스의 특성이 표현되는 것이 좋다. 기존의 서비스의 브랜드가 있는 경우는 고유한 브랜드 명과
기능을 조합한 호출명을 사용하는 것이 좋다.
- 호출명 : 코인 헬퍼
- 명령형 호출 : 하나의 동작을 수행하고 인터렉션이 바로 종료되는 경우 주로 사용할 수 있다. (혹은 대화 상태를 이어가도록 할 수 있음)
- 발화 예시) “코인 헬퍼 + 에게/에서/한테/로 + 비트코인 시세 물어봐줘”
- 대화형 호출 : 대화 상태를 유지하며 여러번의 대화를 주고 받으며 인터렉션을 하는 경우 사용할 수 있다.
- 발화 예시) “코인 헬퍼 + 시작해줘/열어줘/ 동작해줘”
12. 2.2. Extension 세부 목표 수립
- 세부 목표 2. 인사말 및 안내
- Extension 실행 시 사용자에게 안내 및 사용 제안을 할 수 있다.
- 디바이스 환경에 따라 GUI (Graphic User Interface)가 없는 경우도 있기 때문에 적절한 안내 및 사용 제안이 매우 중요하다.
- 인사말 및 안내
- 응답 예시) “안녕하세요? 코인 헬퍼 입니다. 코인 헬퍼로 암호 화폐 시세 조회, 잔고 조회, 시장가 주문 등을 할 수 있어요. 빗썸, 코인원,
코빗를 지원합니다.”
- 세부 목표 3. 도움말 및 사용 제안
- 사용자는 발화를 통해 도움말 및 사용 제안을 확인할 수 있다.
- 발화 예시) “도움말 알려줘”, “도움말”, “너 뭐 할 줄 아니?”, “할 줄 아는 거 말해봐”
- 응답 예시) “이 익스텐션은 가상화폐 거래소에서 현재 가상화폐 시세를 조회할 수 있습니다. '빗썸에서 비트코인 시세 알려줘’ 와 같이 말
해보세요”
13. 2.2. Extension 세부 목표 수립
- 세부 목표 4. 암호 화폐별 시세 조회
- 사용자는 발화를 통해 암호 화폐별 시세 조회를 할 수 있다.
- 발화 예시) “비트 코인 시세 알려줘”, “이더리움 얼마야?”
- 세부 목표 5. 거래소별 시세 조회
- 사용자는 발화를 통해 거래소별 시세 조회를 할 수 있다.
- 발화 예시) “빗썸 지금 시세 알려줘”, “코인원 거래소 암호 화폐 시세 어때?”
- 세부 목표 6. 거래소별 잔고 조회 (계정 연동 필요)
- 사용자는 발화를 통해 거래소별 잔고 조회를 할 수 있다.
- 발화 예시) “코빗 현금 지갑에 얼마있어?”, “코인원 지갑에 이더리움 몇개있어?”
- 세부 목표 7. Extension 종료
- 사용자는 발화를 통해 Extension을 종료할 수 있다.
- 발화 예시) “종료해줘/그만해줘”, “종료/그만”
- 대화 상태 시, 마이크가 열린 상태에서 7초간 발화하지 않는 경우 Extension이 자동 종료 된다. (reprompt 지정을 하지 않은 경우)
14. 2.3. 사용자 시나리오 스크립트 작성
발화 주체 발화 예시 세션 상태 관련 세부 목표
사용자 (User)
클로바, 코인헬퍼에서 비트코인 시세
알려줘
클로바 -> 익스텐션 세부 목표 #1, #4
익스텐션 (Extension)
거래소별 비트코인 시세입니다.
코인원 1,114만원, 빗썸 1,120만원,
코빗 1,118만원 입니다.
익스텐션 세부 목표 #4 성공
Extension (마이크 닫힘) 익스텐션 -> 클로바 -
발화 주체 발화 예시 세션 상태 관련 세부 목표
사용자 (User)
클로바, 코인헬퍼에서 코인원 시세
알려줘
클로바 -> 익스텐션 세부 목표 #1, #5
익스텐션 (Extension)
코인원 거래소 시세입니다. 비트코인
1,114만원, 이더리움 982만원,
이더리움 클래식 39,700원, 리플
1,030원, 비트코인 캐시 1,348,000
원 입니다.
익스텐션 세부 목표 #5 성공
Extension (마이크 닫힘) 익스텐션 -> 클로바 -
- 명령형 호출 사용자 시나리오 (목표 성공 케이스)
15. 2.3. 사용자 시나리오 스크립트 작성
발화 주체 발화 예시 세션 상태 관련 세부 목표
사용자 (User)
클로바, 코인헬퍼에서 업비트 시세
알려줘
클로바 -> 익스텐션 세부 목표 #1, #5
익스텐션 (Extension)
이 익스텐션에서는 빗썸, 코인원,
코빗 거래소의 시세를 조회 하실 수
있습니다.
익스텐션 세부 목표 #5 실패
Extension
(마이크 닫힘),
(마이크 열림)
선택 가능
(익스텐션 -> 클로바)
(익스텐션)
목표 달성을 위해 대화를 이어나갈
것인가? 아니면 종료할 것인가?
- 명령형 호출 사용자 시나리오 (목표 실패 케이스)
발화 주체 발화 예시 세션 상태 관련 세부 목표
사용자 (User)
클로바, 코인헬퍼에서 모네로 시세
알려줘
클로바 -> 익스텐션 세부 목표 #1, #4
익스텐션 (Extension)
이 익스텐션에서는 비트코인,
비트코인캐시, 이더리움, 이더리움
클래식, 리플의 시세를 조회 하실 수
있습니다.
익스텐션 세부 목표 #4 실패
Extension
(마이크 닫힘),
(마이크 열림)
선택 가능
(익스텐션 -> 클로바)
(익스텐션)
목표 달성을 위해 대화를 이어나갈
것인가? 아니면 종료할 것인가?
16. 2.3. 사용자 시나리오 스크립트 작성
발화 주체 발화 예시 세션 상태 관련 세부 목표
사용자 (User) 클로바, 코인헬퍼 시작해줘 클로바 -> 익스텐션 세부 목표 #1
익스텐션 (Extension)
빗썸, 코인원, 코빗 거래소의 시세를
제공합니다.
익스텐션
세부 목표 #2
User 너 뭐할줄 알어? 세부 목표 #3
Extension
이 익스텐션은 가상화폐 거래소에서
현재 가상화폐 시세를 조회할 수
있습니다.
세부 목표 #3
User 이더리움 얼마야? 세부 목표 #4
Extension
거래소별 이더리움 시세 입니다.
코인원 1,114만원, 빗썸 1,120만원,
코빗 1,118만원 입니다.
세부 목표 #4
User 코빗 지금 시세 알려줘 세부 목표 #5
Extension
코빗 거래소 시세 입니다. 비트코인
1,114만원, 이더리움 982만원,
이더리움 클래식 39,700원, 리플
1,030원, 비트코인 캐시 1,348,000
원 입니다.
세부 목표 #5
User 종료해줘 세부 목표 #7
Extension (마이크 닫힘) 익스텐션 -> 클로바 -
- 대화형 호출 사용자 시나리오
18. 3.1. 인터렉션 모델이란?
- 음성으로부터 인식된 사용자의 요청 (발화)를 Extension 서버에 전달하기 위해 정형화된 포멧 (Request JSON 형태)으로 바꿔주는 규칙을 명세
한 것이다.
- 정의된 인터렉션 모델은 NLU (자연어 처리) 엔진을 통해 해당 Extension 서버로 전달할 의도 (Intent)와 정보 (Slot)로 분석/변화 시 사용된다.
- CEK에서 제공하는 NLU 엔진은 패턴 기반 모델과 통계 기반 모델 (ML : Machine Learning)을 하이브리드 형태로 제공된다.
Clova Developer Console (인터렉션 빌더)
19. 3.2. 인터렉션 모델 구성 요소
- 의도 (Intent) : Extension이 처리할수 있는 사용자의 요청을 구별해둔 범주 (주로 사용자 발화문에 사용된 동사형 요소)
- 커스텀 Intent : AskCoinPriceIntent (코인 가격 조회 의도)
- 빌트인 Intent : Clova.GuideIntent (도움말 요청 의도)
- 빌트인 Intent 4종 (GuideIntent, CancelIntent, YesIntent, NoIntent)은 기본으로 제공 된다.
- 정보 (Slot) : 사용자 발화로부터 획득할 수 있는 정보 (주로 사용자 발화문에 사용된 명사형 요소)
- 커스텀 Slot 타입 : CURRENCY (Slot명 : 화폐종류 or currencyType)
- 커스텀 Slot 타입 : EXCHANGE (Slot명 : 거래소 or exchangeName)
- 빌트인 Slot 타입 : CLOVA.NUMBER (Slot명 : 코인개수 또는 coinCount)
- 빌트인 Slot 타입 11종 (DATETIME, DURATION, NUMBER, RELATIVETIME, UNIT, ORDER, KO_ADDRESS, CURRENCY 등)은 기
본으로 제공 된다.
20. 3.2. 인터렉션 모델 구성 요소
- 발화 예시 (Utterance) : 같은 의도를 지녔지만 다양한 사용자의 표현을 Extension이 인식하는데 필요한 기반 데이터
- 커스텀 Intent : AskCoinPriceIntent (코인 가격 조회 의도)
- “지금 이더리움 얼마야?”
- “비트코인 시세”
- “코인원에서 시세 문의요”
- “리플 지금 빗썸에서 얼마지?”
- 빌트인 Intent : Clova.GuideIntent (도움말 요청 의도)
- “너 뭐 할줄 아니?”
- “할줄 아는 거 말해봐”
21. 3.3. 인터렉션 모델 빌더
- 인터렉션 모델은 클로바 개발자 콘솔에서 제공하는 인터렉션 모델 빌더를 통해 의도(Intent), 정보(Slot), 발화 예시(Utterance)를 정의하고 모델
을 빌드/테스트 할 수 있다.
정의한 Slot 타입
정의한 Intent
모델 빌드
모델 테스트
22. 3.4. 커스텀 및 빌트인 Slot 타입 생성
- 익스텐션에서 커스텀하게 사용할 커스텀 Slot 타입을 생성하고, 각 Slot 타입에 속하는 대표어/동의어 정보를 입력할 수 있다.
- 암호 화폐의 종류를 표현하는 CURRENCY와 거래소 종류를 표현하는 EXCHANGE를 생성하고 대표어와 동의어들을 입력한다.
23. 3.4. 커스텀 및 빌트인 Slot 타입 생성
- Clova에서 기본적으로 제공하는 빌트인 Slot 타입을 사용할 수 있다.
- 암호 화폐 주문시 몇 개를 주문할지 알아야 하기 때문에, 수량을 표현하는 CLOVA.NUMBER을 사용한다.
24. 3.5. 커스텀 의도 생성 및 발화 예시 추가
- 익스텐션에서 커스텀하게 사용할 커스텀 의도 (Custom Intent)를 생성하고, 해당 의도로 표현 되는 발화 예시를 추가할 수 있다.
- 코인 시세 질의에 대한 의도인 AskCoinPriceIntent를 생성하고, 15 문장의 발화 예시를 추가하였다.
정의된 발화 예시 목록
25. 3.6. 발화 예시 작성 가이드
- 같은 의도를 지녔지만 다른 방식으로 표현이 되는 발화 예시를 많이 작성 한다.
- 패턴이 서로 겹치지 않게 표현에 다양한 변형을 주어 발화 예시를 작성 한다.
- 통계 기반 모델이 잘 동작하기 위한 발화 예시 개수
- 최소 10 문장 내외
- 해당 Intent에 Slot이 사용되지 않았거나 간단한 Slot 타입의 Slot이 사용된 경우
- 최소 30 문장 이상
- 해당 Intent에 사용된 Slot이 빌트인 Slot 타입인 경우
- 해당 Intent에 사용된 Slot이 사람이 전부 인지할 수 있는 양의 사전 크기를 가지는 커스텀 Slot 타입인 경우
- 최소 100 문장 이상
- 해당 Intent에 사용된 Slot이 가수명, 곡명, 영화제목, 업체명 등 사전의 크기가 매우 큰 Slot 타입인 경우
26. 3.7. AskCoinPriceIntent 발화 예시의 나쁜 조합과 좋은 조합
- 나쁜 조합
- 비트코인 시세 알려줘
- 비트코인 얼마야?
- 비트코인 지금 얼마?
- 비트코인 가격이 어때?
- 비트코인 시세 알려줘
- 이더리움 시세 알려줘
- 비트코인캐시 시세 알려줘
- 리플 시세 알려줘
- 좋은 조합
- 비트코인 시세 알려줘
- 이더 얼마야?
- 지금 얼마지 비캐
- 리플 가격이 어때?
- 위 발화 예시로 인터렉션 모델이 학습한 경우, ‘비트코인’ 라는 표현이 사용자 발화에 포함되면 무조건
AskCoinPriceIntent로 인식될 가능성이 매우 높다.
- 또는 ‘시세 알려줘’ 라는 표현이 사용자 발화에 포함되어야만 AskCoinPriceIntent로 인식될 가능성이 매우 높다.
27. 3.8. 인터렉션 모델을 잘 만들려면?
- 인터렉션 모델은 지속적으로 정의하고 빌드/테스트 해서 완성도를 높여 나가야 한다.
- 한번에 완벽한 인터렉션 모델을 만들려는 욕심을 버린다.
- 기계적/반복적인 발화 예시는 통계 모델에서 아무 의미가 없다.
- 주요 발화 예시들을 고민하여 정의하고, 인터렉션 모델 빌더에서 테스트를 통해서 놓친 발화 예시들을 찾아 보자.
- 테스트를 할 때는 발화 예시를 작성한 사람이 아닌 다른 사람이 테스트 해보는 것이 좋다. 이러한 방법은 새로운 발화 예시를 찾는데 도움이
된다.
- 실제 사용자들이 어떻게 발화를 하는지 유심히 살펴 보자.
- 익스텐션 개발이 완료되어 서비스되면, 사용자들의 실제 발화 로그를 확인 할 수 있다. 이러한 실제 발화 로그를 살펴봄으로써 사용자들의 실
제 발화 중 놓친 발화 예시를 발굴 할 수 있다.
28. 3.9. 사용자 시나리오 스크립트 X 인터렉션 모델
발화 주체 발화 예시 Intent 및 Slot Request 타입 및 세션 유지 여부
사용자 (User) 클로바, 코인헬퍼 시작해줘 - LaunchRequest
익스텐션 (Extension)
빗썸, 코인원, 코빗 거래소의 시세를
제공합니다.
-
Extension Response
(ShouldEndSession : false)
User 너 뭐할줄 알어? Intent : Clova.GuideIntent IntentRequest
Extension
이 익스텐션은 가상화폐 거래소에서
현재 가상화폐 시세를 조회할 수
있습니다.
-
Extension Response
(ShouldEndSession : false)
User 이더리움 얼마야?
Intent : AskCoinPriceIntent
Slot : currency
IntentRequest
Extension
거래소별 이더리움 시세 입니다.
코인원 1,114만원, 빗썸 1,120만원,
코빗 1,118만원 입니다.
-
Extension Response
(ShouldEndSession : false)
User 코빗 지금 시세 알려줘
Intent : AskCoinPriceIntent
Slot : market
IntentRequest
Extension
코빗 거래소 시세 입니다. 비트코인
1,114만원, 이더리움 982만원,
이더리움 클래식 39,700원, 리플
1,030원, 비트코인 캐시 1,348,000원
입니다.
-
Extension Response
(ShouldEndSession : false)
User 종료해줘 - SessionEndedRequest
Extension (마이크 닫힘) - -
- 정의한 인터렉션 모델을 통해서 사용자 시나리오 스크립트에 적용해 보면 아래와 같은 Intent 및 Slot이 전달될 것이다.
- 이때, CEK의 Request는 익스텐션 호출시 : LaunchRequest, Intent 요청시 : IntentRequest, 익스텐션 종료시 : SessionEndedRequest 3가
지 타입으로 전달 된다.
30. 4.1. CEK <-> 익스텐션 서버간 Request/Response 처리
- 앞서 정의한 인터렉션 모델을 기반으로 아래와 같은 방식으로 CEK와 익스텐션 서버는 통신하게 된다.
31. 4.2. CEK Request JSON
- 자세한 스펙은 Clova Platform 개발자 문서를 참고 한다. (https://developers.naver.com/console/clova/guide/)
LaunchRequest IntentRequest
SessionEndedRequest
32. 4.3. CEK Response JSON
- 자세한 스펙은 Clova Platform 개발자 문서를 참고 한다. (https://developers.naver.com/console/clova/guide/)
Response JSON