23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
이번 에이닷 3.1 버전 개편에 맞춰, 에이닷 에이전트와 음성으로만 대화를 이어갈 수 있는 ‘음성모드’를 새롭게 선보였습니다.
ChatGPT나 Gemini Live 등을 써보신 분들에게는 익숙한 기능일 수 있지만, 에이닷이 좀 더 국내향의 에이전트이고,
캘린더, 맛집추천, 라디오 등 다양한 Built-in 서비스들을 제공하고 있는 만큼 에이닷 음성모드만이 가진 특징들이 있습니다.
본 글을 통해 이러한 에이닷 음성모드만의 특장점을 소개하고, 그 구현 과정에 대해 살펴보도록 하겠습니다.
에이닷 음성모드는 앱을 실행하고 바로 보이는 대화창에서 바로 시작할 수 있습니다.
우하단의 ‘음성모드’ 버튼을 누르면 즉시 음성 입력 대기 상태로 전환되고, 사용자가 말하는 즉시 음성 인식 기능이 활성화되는데요.
음성 모드를 통해 주고받은 대화는 채팅창에 기록되어 음성모드 종료 이후에도 확인할 수 있으며, 채팅을 통해서도 대화를 이어갈 수 있습니다.
또한 음성 인식 과정에 따라 각기 다른 애니메이션이 나타나도록 해서, 현재 상태를 직관적으로 파악할 수도 있습니다.
Listening passive: 마이크를 열고 발화를 기다리는 중
Listening active: 사용자가 말하고 있는 중
Processing: 사용자의 요청을 처리 중
Speaking: TTS로 응답을 재생하는 중
Pause: 마이크가 닫힌 일시정지 상태
이와 같은 단계별 인터페이스는 에이닷 음성모드를 더 편리하게 사용할 수 있도록 돕습니다.
에이닷 음성모드의 가장 큰 장점은 한국어 대화에 최적화된, 자연스러운 발화체 음성 합성 모델을 지원한다는 점입니다.
사실 에이닷 2.0대 버전에서도 에이전트의 응답을 음성으로 전달하기 위해 다양한 보이스를 지원했었는데요.
이전 버전에서는 정보 전달에 초점을 맞춘 낭독형 보이스 옵션을 제공했다면, 3.1 버전에서는 실제 대화에 가까운 합성음을 구현했습니다.
특히, 한국어 발음이 어색하거나 혹은 한국어 음성을 지원하지 않는 타사 서비스와 달리, 에이닷은 한국어에 최적화된 TTS를 통해 편안하고 자연스러운 대화를 가능하게 했습니다.
뿐만 아니라 자연스러운 영어 응답이 지원되고 이에 대한 개선도 지속적으로 진행되고 있어, 앞으로 더욱 다양한 언어로의 확장이 기대됩니다.
에이닷 에이전트는 캘린더, 뉴스, 라디오 등 다양한 유틸리티/미디어 서비스를 제공하기 때문에,
음성모드 사용 중에도 해당 기능이 잘 수행되도록 하거나, 이미지나 버튼, 플레이어 등이 적절한 시점에 자연스럽게 노출되도록 하는 사용자 경험이 중요하다고 생각했습니다.
따라서 채팅모드에서 노출되는 부가적인 시각 정보의 도움 없이, 음성으로 전달되는 내용만으로도 정보의 완결성이 지켜지도록 응답을 설계하였습니다.
또한 “라디오 틀어줘”와 같이 미디어 콘텐츠가 재생돼야 하는 요청이 들어오면 즉시 음성모드를 종료하고 플레이어를 띄우도록 하거나,
일정 관리나 날씨 홈 화면 등에 진입하는 버튼 등도 음성모드 레이어가 닫히면 노출하도록 돼있어, 음성모드 전후로도 에이닷의 다양한 기능들을 편리하게 사용할 수 있도록 했습니다.
음성모드가 채팅모드에 비해 가지는 가장 큰 차이점은 사용자 입력을 음성으로 받고, 생성된 응답을 TTS(Text to Speech)로 송출하는 과정일 것입니다.
채팅모드에서 사용자의 입력은 즉시 텍스트 형태로 전달이 되지만, 음성모드에서는 사용자의 입력 방식이 음성으로 이뤄지기 때문에 다음과 같은 과정을 필요로 합니다.
1~2. 음성 파일 생성: 클라이언트에서 사용자의 입력을 음성 파일 형태로 생성
3~4. ASR 서버 호출: 음성 파일을 ASR(Automatic Speech Recognition) 서버에 전송하여 텍스트로 변환
5~6. 응답 서버 호출: 변환된 텍스트를 파라미터로 하여 LLM을 호출 및 응답 생성
7~8. TTS 생성: LLM 응답을 TTS(Text to Speech)로 생성
9~10. 음성 송출: 생성된 음성합성음을 클라이언트를 통해 유저에게 송출
기존 버전의 에이닷 서비스에서도 보이스바를 통한 음성 입력 기능을 지원해왔기 때문에 ASR 적용에는 비교적 큰 어려움이 없었지만,
음성 응답을 실시간으로 제공하는 TTS 구현 과정은 다소 까다로웠습니다.
LLM이 생성한 응답은 스트리밍(Streaming) 형식으로 한 글자씩 전송되기 때문에, 이를 TTS로 변환하는 과정에서 데이터를 한 번에 처리할 수 없는 상황이 발생했기 때문입니다.
우선은 해당 문제를 해결하기 위해 LLM의 생성한 응답 데이터가 모두 생성이 되면, 생성된 전문을 데이터로 하여 TTS 서버를 호출하는 식으로 구현을 시도해보았습니다.
이 방식은 TTS를 생성하기 위한 데이터를 확보할 수 있다는 점은 해소해주었지만,
응답 스트리밍이 종료된 시점부터 음성 답변이 나갈 수 있기 때문에 그만큼 응답에 지연(Latency)이 생긴다는 한계점이 있었습니다.
따라서 응답 스트리밍이 시작되자 마자 거의 동시에 TTS를 생성할 수 있는 방법을 고안해야 했고, 저희는 Chunking 기법으로 이 문제를 해결하고자 했습니다.
LLM 응답이 문장 단위로 완성될 때마다 Chunk를 만들어 비동기적으로 TTS 서버를 호출할 수 있도록 로직을 개선한 것입니다.
이를 통해 TTS 응답의 지연 시간을 크게 줄이고, 더욱 자연스럽고 빠른 대화 경험을 제공할 수 있었습니다.
[*Chunking: 대용량 데이터를 다룰 때 데이터를 작은 덩어리(Chunk)로 나누어 효율적인 저장 및 처리가 가능하게 하는 기술]
오늘은 음성모드에 대한 소개와 함께 출시를 준비하면서 겪게 된 소소한 이야기들을 풀어보았습니다.
사실 처음 기획을 할 때는 기존 에이닷 버전에서도 음성모드의 기초가 되는 ASR, TTS 기술들을 익히 활용해왔기 때문에,
음성으로 대화할 수 있는 간단한 인터페이스를 추가한다는 개념으로 접근을 했습니다.
하지만 단순한 입출력 장치로서 해당 기술들을 사용하는 것과 에이전트와 연속적인 대화를 이어나가기 위한 귀와 목소리로 활용하는 것에는 구현에 있어 적지 않은 차이가 있었고,
본 블로그 글에는 담지 못했던 어려움들도 많았는데요.
그런 눈에는 잘 보이지 않는 차이를 보완하기 위해서 여러 TASK 단에서 많은 노력을 해주셨고, 덕분에 큰 차질없이 출시를 마칠 수 있었습니다.
더 나은 성능을 보이기 위해 지금도 고생해주고 계신 여러 담당자분들에게 감사의 인사를 전하며, 글을 마치도록 하겠습니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.