5. 1. Clova Platform
•처음부터 외부 오픈을 전제로 설계
•내부/외부 사용자간 동일 코드, 동일 서버, 동일 운영
•Device 개발자를 위한 Clova Interface Connect, CIC
•Service 개발자를 위한 Clova Extension Kit, CEK
6. 1. Clova Platform
Clova Interface Connect
•하드웨어 개발자가 제품에 Clova Interface 연결 가능
•Public API 및 SDK (Java/Android/C++) 제공
•음성, Vision(예정)을 단일 인터페이스로 제공
•저전력 등의 IoT환경에도 적용 가능
7. 1. Clova Platform
Clova Extension Kit
•Service 및 Content를 Clova에 손쉽게 연결
•간단한 설정과 REST API 연동으로 자연어 기반 서비스 개발
•Public API / SDK(예정, NodeJS/Python/Java/Ruby/..)
•Step by Step 형식의 Builder 및 온라인 테스트 환경 제공
8. 1. Clova Platform
Open Platform
•네이버, 라인이 사용하는 Platform 그대로 공개
•Extension Marketplace
•최고 수준의 SDK / API 문서 지원
•인식, 합성, Vision 개별 API 제공
10. 2. Architecture & Tech Stack
Challenge
•요청을 받아서 분석하기 전까진 무슨 내용인지 알 수 없는 API
•Latency에 매우 민감
•하나의 요청을 처리 하기 위해 무수히 많은 서비스와 연결된다.
•요청을 받는 와중에라도 서버가 Interrupt 하거나 응답을 줘야 함
12. 2. Architecture & Tech Stack
Protocol
•연결 신뢰성이 있어야 하거나, 확보할 수 있어야 하고
•Latency에 민감한 대응을 할 수 있어야 하고
•민감 정보(음성/사진)를 다루기 때문에 보안성이 우수해야 하며
•Open Platform을 지향하므로, Client 구현이 쉬워야 하는
•Protocol을 선택해야 했음
13. 2. Architecture & Tech Stack
HTTP/2
•가장 최적의 Protocol
•Header 압축, Multiplexing등을 통한 Latency 감소
•Binary Frame based Protocol
•Single TCP Connection & Ping-Pong Mechanism
•TLS Based Security
14. 2. Architecture & Tech Stack
HTTP/2
•HTTP/2는 한개의 Connection에 여러개의 논리적인 연결, Stream으로 구성
•순서와 방향이 섞여도 문제 없는 구성
Image from https://docs.google.com/presentation/d/1r7QXGYOLCh4fcUq0jDdDwKJWNqWK1o4xMtYpKZCJYjM/present?slide=id.gae999cde7_0_40
15. 2. Architecture & Tech Stack
HTTP/2
•하나의 Stream은 Header와 Data Frame으로 구성
•End Flag가 지정될때까진 몇개의 Frame 이라도 전송 가능
•한 Stream 내에서 Request -> Response 구조인건 HTTP/1.X와 동일
Image from https://docs.google.com/presentation/d/1r7QXGYOLCh4fcUq0jDdDwKJWNqWK1o4xMtYpKZCJYjM/present?slide=id.gae999cde7_0_40
16. DATA FRAME
(200ms PCM)
2. Architecture & Tech Stack
HTTP/2
•여러개의 Frame으로 구성할 수 있다는 점을 이용해서 Streaming & Downsteram 활용
•음성인식의 경우 한 Frame을 200ms 단위로 구성해서 서버에서 Streaming 받아 처리
POST Request Stream: /v1/events
DATA FRAME
(200ms PCM)
DATA FRAME
(200ms PCM)
DATA FRAME
(200ms PCM)
DATA FRAME
(200ms PCM)
DATA FRAME
(200ms PCM)
DATA FRAME
(200ms PCM)
DA
(2
17. 2. Architecture & Tech Stack
HTTP/2
•Client의 요청 중, 혹은 요청하지 않은 경우에도 서버가 먼저 응답을 줘야하는 경우
•HTTP/2에 기본으로 포함된 Push는 Client 요청 시, 요청하지 않은 내용을 함께 전달
•따라서, 응답을 종료하지 않고(End Flag) 필요시 DATA Frame을 계속 전달하는 방법 사용
HEADERS (END_FLAG)
DATA
DATA
DATA
DATA
18. 2. Architecture & Tech Stack
HTTP/2
•하지만.. 어려운 점
•Client 구현이 다른 검토 대상 (web socket, …) 대비 미성숙
•Downstream은 curl 같은 도구로 테스트 하기 어렵다
•생각보다 HTTP/1.X와 다르지만 비슷해 보여서 개발자들의 학습 비용
•그래도 세상은 빠르게 HTTP/2로 전환 중!
19. 2. Architecture & Tech Stack
Golang
•개발/설계 당시 언어 및 제반 환경에 대한 조사 후 Golang 선택
•회사에 기존에 쌓여있는 C/C++ 기반의 자산을 활용하기 쉽고
•검토 당시 가장 성숙한 HTTP/2 서버 구현 보유
•또한, Platform 특성상 대부분의 Workload는 I/O에서 발생
20. 2. Architecture & Tech Stack
Golang
•Cgo는 무척 편리한 도구이고 강력하지만
•생각보다 cost가 높고, 개발 환경 구축, 빌드, 배포 등에 지연 요소
•기존 자산을 활용해 시간을 벌고, 단계적으로 Native go 구현으로 이전 중
21. 2. Architecture & Tech Stack
Monitoring
•복잡하게 연관된 시스템에 대한 모니터링
•특정 API에 대한 성공/실패에 대한 점검 만으로는 의미가 없거나 부족함
•“알 수 없는” 시스템을 검사해야 하는, Blackbox Testing
22. 2. Architecture & Tech Stack
Monitoring
•End To End Blackbox Testing
•“자연어 입력”과 “기대 결과”를 검사
•“자연어 입력”은 텍스트 혹은 음성
•그런데 “오늘 날씨 어때?”나 “지금 몇시야?”에 대한 “기대 결과”는?
•오늘날씨알려줘에 대해 네이버에서 검색해봤어요. 오늘날씨왜이렇게더운가요?? 남극의눈물
이녹아서그래요 내일은비가올까요 안올까요 쨍쨍할까요 날씨좋은날이태원해밀털호텔수영장에
다녀왔어요구름씨의블로그추천꾹눌르세요 더 많은 결과는 네이버 클로바 앱에서 확인해보세요.
23. 2. Architecture & Tech Stack
Monitoring
•Test 목적의 CIC Client 개발
•Input에 대해서 Client의 작동을 모사
•Input/Output에 대해 Python으로 DSL 작성
24. 2. Architecture & Tech Stack
Monitoring
•Why Python? Go에 비해 문자열 조작이 편하고 DSL을 만들기 쉬웠음
•Python-Hyper
•다양한 경우와 작동에 대한 테스트
•24/365 끝없는 Regression Test, Alerting
26. 3. Clova Interface Connect
Interface Connect
•새로운 Human Interface 에 대한 표준 API 제공
•음성, (예정) Vision, ….
•Downstream Channel과 Event Request로 구성
•요청(Event)을 보내서 명령(Directive)을 수신
27. 3. Clova Interface Connect
Interface Connect - Auth
•한국/일본간 인증 기반과 체계가 다름(Naver/Line)
•기술 체계도 미묘하게 다르고 법률 문제
•Platform 사용자에게 oAuth 2.0 기반의 단일 Interface를 제공하고 Backend 추상화
•각 국가별 Transparent 한 API 제공
28. 3. Clova Interface Connect
Interface Connect - Downstream Channel
•모든 CIC Client는 반드시 1개의 Downstream Channel을 유지
•Clova Platform에서 먼저 전달하는 명령(Directive)
•HTTP/2 Multiplexing
29. 3. Clova Interface Connect
Event
•Clova Client에서 올려 보내는 모든 요청
•요청의 내용이 아닌 요청의 종류에 대응
•음성 인식 요청, 영상 인식 요청, 재생 상태 보고, 버튼 눌림 보고, ...
•요청 ID
•Wake-Up Word 같은 각종 Interruption 요소
30. 3. Clova Interface Connect
•모든 인식 요청은 요청 발생 시점에 ID를 Client
에서 생성
•서버는 해당 인식 요청에 대한 모든 Directive
에 요청 ID를 Tag
•만약 Client가 마지막에 가지고 있던 요청 ID와
응답의 요청 ID가 다르면 해당 요청 무시
31. 3. Clova Interface Connect
Directive
•Client의 Event에 대응하여 Platform에서 지시하는 명령
•TTS 재생, 음악 재생, 화면 표시, ...
•Client는 일종의 Execution Engine으로 작동
•Client Queue를 규정
32. 3. Clova Interface Connect
Directive - 표준화
•‘작동’의 표준적인 지시에 대한 문제
•Software/Hardware적 환경이 모든 Client마다 다름
•화면 유무, 해상도 차이, 음악 재생 능력 차이 등
•Directive는 특정 표현을 규정하는게 아닌 의미를 규정
33. 3. Clova Interface Connect
Directive - Template
•디바이스의 물리적 특성은 모두 다르고 강제 불가
•고 수준의 Markup Langauge는 구현 부담이 큼
•표현 대신 의미를 기술하는 Template 선택
•Background, Image, MainText, SubText, RefText
34. 3. Clova Interface Connect
Context & Event Driven
•“멈처줘” - Ambiguity 문제
•Client는 Event에 항상 자신의 “현재 상태 정보”를 전달
•Platform 에서는 상태 정보를 참고하여 Ambiguity 처리
•알람 상태, 음악 재생 상태, 음소거 상태 등
35. 3. Clova Interface Connect
Context & Event Driven
•Client가 Directive를 수행하리란 보장이 없거나, 언제 수행할 지 알수 없음
•따라서, 지시 -> Callback Event -> 지시 -> Callback Event … 의 반복 구성
•주로 Directive의 수행 성공/실패를 전달 받음
•혹은 Timeout과 결합하여 Action 수행 실패 자체를 파악
36. 3. Clova Interface Connect
Intent
“Clova, 아이유 노래 틀어줘”
Music.Play
•자연어, 행동등을 {Namespace}.{Name} 의 형태로 표현
•표현이 다르지만 같은 (틀어줘, 틀어, 들려줘, ...)의미는 같
은 Intent로 표현
•Intent 마다 개별 Parameter(Slot)를 가질 수 있음
Slot: Artist
37. 3. Clova Interface Connect
Intent Routing
•Platform은 Intent를 기준으로 실제 요청을 처리할 서비스를 선택
•Intent에 대한 입력과 출력 포맷을 표준화
Music.Play
Naver Music
Music Service
Radio Service
Intent
Router
38. 3. Clova Interface Connect
Backward Compatibility
•Embedded 환경에 많이 배포되는 특성상 하위 호환성이 무척 중요
•Text 기반의 Protocol, Semantic Versioning을 통한 Version 협상
•Field는 항상 추가만 수행, 적정 시점에서 Interface 분리
•Client 는 Unknown Field/Directive는 정책에 따라 무시 대응 (Silently Ignore)
40. 4. Clova Extension Kit
Interaction Model
•자연어를 어떻게 이해하고 분석할지 정의
•명령 의도별 (Intent) 예시 문장과 변수 (Slot) 태깅
“Clova, Dash에게 앞으로 가라 해”
Dash.Move
{Direction: Forward}
Intent
Slots
43. 4. Clova Extension Kit
Interaction Model
•통계 기반 언어 분석
•(예정) Multi turn 지원
•주요 기본 표현을 위한 Builtin Intent 지원
•화폐, 주소 같은 기본적인 Slot 사전 지원
44. 4. Clova Extension Kit
Request Model
•모든 요청은 JSON Request & Response
•(예정) HTTPS Required
•사용자, 기기에 대한 정보 제공
•사용자와의 대화에 따른 생명주기
•Session 제공
45. 4. Clova Extension Kit
Request Model - Context
•사용자, 기기에 대한 정보
•사용자 식별자, 기기 식별자
•기기가 지원하는 기능 (음악 재생 가능 여부 등)
•기기의 상태, ex) 볼륨 크기, 음소거 여부 등
46. 4. Clova Extension Kit
Request Model - Lifecycle
•Extension 은 실행되어, 요청을 받고, 종료되는 생명주기를 가짐
•“Clova, Dash 열어줘” -> “Clova, Dash 종료”
•Extension 스스로도 종료 여부를 결정할 수 있음
•한 생명 주기 내에서 Clova Platform에 정보를 저장할 수 있는 Session 제공
Launch
Intent
End
47. 4. Clova Extension Kit
Request Model - Event Request
•기본적으로 Extension은 사용자의 명시적인 실행이 있는 경우에만 호출 됨
•단, 사용자가 명령하지 않았어도 Extension이 호출되는 경우가 있음
•Ex) “음악이 재생됨” / “음악이 정지됨”
48. 4. Clova Extension Kit
Response Model
•다양한 환경의 기기에 응답을 제공
•단순 응답외에 행동을 제어해야 하는 경우
•좀 더 복잡한 처리를 위한, 추가 입력 요청
49. 4. Clova Extension Kit
Response Model - TTS, Template
•Extension은 음성 안내를 위한 “답변” 문구를 제공
•음성 안내는 간단한 상태와, 자세한 상태 두가지로 제공 가능
•음성외 10여 종의 Template 제공
•CIC Device들은, 각 Device의 환경에 따라 Template 해석 및 처리
•Template은 표현 형태가 아닌 데이터를 기술
50. 4. Clova Extension Kit
Response Model - Directive Model
•요청한 CIC Device의 작동을 제어
•ex) AudioPlayer.Play
•모든 Device가 지정한 Directive를 수행을 보장하지 않음
•Extension은 Device에 해당 작동을 요청하고, Device는 그 작동의 수행 여부를 응답
51. 4. Clova Extension Kit
Response Model - Multi Turn
•Extension이 추가적인 입력을 원할 경우
•ex) “내일 몇시에 알려 드릴까요?”
•Extension이 종료를 희망하지 않을 경우 CIC는 무조건 추가 입력을 시도
•CEK Session을 통해서 대화 상태 관리
52. 4. Clova Extension Kit
Builder
•웹 기반의 Extension 관리 및 개발/테스트 도구
•호출어, 연동 정보(Extension 서버 주소), 언어 모델, Market 정보 등 입력
•Interaction Model 편집 및 테스트 도구
•호출어 등에 대한 리뷰 진행