실시간 음성 에이전트와 최첨단 인공지능(Frontier Intelligence) — 보한 리(Bohan Li), 엘리스AI(EliseAI)

AAI Engineer
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00제 이름은 보입니다. 오늘 프론티어 인텔리전스를 활용한 실시간 음성 에이전트에 대해 발표하게 되었습니다.
00:00:18효과적으로, 저희 엘리스 AI(Elise AI)가
00:00:22어떻게 음성 에이전트 하네스를 설계하여 필요한 수준의 프론티어급 지능을 갖춘
00:00:28실시간 음성을 구현했는지 이야기해 보려 합니다. 시작하기에 앞서,
00:00:36제가 이전에 일했던 자율주행 차량과 비교하면서, 왜 캐스케이드(Cascaded) 음성 에이전트를
00:00:42특히 이전 자율주행차 분야에서 일했던 경험과 비교하여
00:00:48제 생각에 캐스케이드 음성 에이전트는 이를
00:00:53인식(Perception) 관점에서 바라볼 때 매우 타당합니다. 자율주행 차량의 경우
00:00:59바운딩 박스, 카메라, 라이다가 이에 해당하죠. 음성의 경우 그것은
00:01:05전사(Transcription), 즉 현실 세계의 신호를
00:01:09언어 모델이나 여러분이 다루는 두뇌가 처리할 수 있는 데이터 요소로 효과적으로 변환하는 것입니다.
00:01:17두 번째는 매우 직관적인 플래닝 스택(Planning stack)입니다.
00:01:23여기서는 언어 모델이 인식 단계의 출력값을 받아
00:01:29다시 현실 세계로 내보내고자 하는 출력값을 생성합니다. 그리고 마지막으로 제어(Controls)
00:01:36레이어가 있습니다. 자율주행에서는 플래너가 출력한 주행 경로를 가져와
00:01:43실제 차량을 제어하는 실제 제어값으로 변환합니다. 여기서는 텍스트를
00:01:50음성 에이전트의 생각을 표현하는 데 사용하는 오디오로 변환합니다. 이 요소들 각각을 자세히 살펴보겠습니다.
00:02:00저희는 지능을 희생하지 않으면서 음성 에이전트의 속도를 향상시키기 위해
00:02:08이러한 각 영역에서 몇 가지 흥미로운 트릭을 적용했습니다.
00:02:13첫 번째는 전사기(Transcriber) 레이어입니다. 저희는 이른바
00:02:19스트리밍 투기적 전사기(Streaming speculative transcriber)라는 개념을 생각해 냈습니다.
00:02:24이는 플럭스(Flux)와 같은 빠른 스트리밍 전사기를 스크라이브 v2(Scribe v2)나 정확한 배치 전사기 위에,
00:02:33혹은 그 아래에 계층화하여 더 많은 컨텍스트를 받아들이도록 하는 방식입니다. 조금 느리지만 더 정확한 감지 결과를 제공합니다.
00:02:39이제 한 가지 설정을 통해 살펴보겠습니다. 이 경우 에이전트가 방금
00:02:44이름과 생년월일을 적어달라고 요청하고, 사용자가 이에 대답할 때 타이밍이 어떻게 전개되는지 보겠습니다.
00:02:49먼저 초기 감지 결과를 얻게 됩니다. 스트리밍 레이어로부터 결과를 받죠.
00:02:57정확한 레이어이자 교정 레이어는 텍스트가 동일하므로 작동하지 않습니다.
00:03:05스트리밍 텍스트 감지 결과가 더 들어오게 되며, 이 경우 교정 레이어는 실제로
00:03:11취소됩니다. 새로운 텍스트가 들어왔기 때문에 더 많은 컨텍스트와 오디오가 기존의 정확한 결과를 대체하기 때문입니다.
00:03:21여기서 첫 번째 교정이 이루어집니다. 스크라이브 v2 레이어가
00:03:27질문의 맥락을 이해하기 때문에, 이것이 이름과 생년월일에 대한 이야기라는 것을 파악할 수 있습니다.
00:03:34그리고 몇 가지 감지가 더 이루어집니다. 이들은 단순한 문장 부호이므로 신경 쓰지 않습니다.
00:03:37결과적으로 이 텍스트를 에이전트에게 전달하게 됩니다.
00:03:44다음으로 언어 모델 레이어로 넘어가겠습니다. 여기서는 느리지만
00:03:52지능적인 LLM을 사용하고 있기 때문에 왕복 횟수를 정말 줄이고 싶어 합니다. 우리로 하여금
00:03:58많은 추론을 하게 만드는 주원인은 툴 콜링(Tool calling)입니다. 이를 없애는 한 가지 방법은 백그라운드 에이전트가 툴 콜링을
00:04:05대신 수행하게 하고, 그 결과를 메인 에이전트의 컨텍스트에 다시 집어넣어 메인 에이전트가 마치
00:04:13자신이 툴 콜을 한 것처럼 착각하게 만드는 것입니다. 앞서 언급한 감지 과정을 기억해 보세요. 어떤 일이 일어나냐면, 이 감지 각각이
00:04:26에이전트의 조기 생성을 유발하지만, 사용자가 말을 끝마쳤다는 것을 확인할 때까지는 실제로 이를 출력하지 않습니다.
00:04:38이 경우 사용자는 '네(sure)'라고 말합니다. 에이전트는 사용자가 뭔가 더 말할 것임을 알게 됩니다.
00:04:45사용자 감지 결과로부터 이름과 생년월일을 파악하는 것을 돕는 우리의 백그라운드 툴 콜링은
00:04:51아직 실행되지 않으므로 별다른 일이 일어나지 않습니다. 다음 실시간 감지 결과가 들어옵니다. 여전히 이름은 아니라고 하죠.
00:05:02우리 에이전트는 상황에 맞추어 계속 진행합니다.
00:05:06이제 더 많은 컨텍스트가 돌아옵니다. 에이전트는 이름이 있어야 할 것 같다고 느낍니다.
00:05:11전사 오류가 있다고 생각할 수 있으므로 스펠링을 말해달라고 요청할 것입니다.
00:05:16여전히 이름이나 생년월일은 없습니다. 그리고 마지막으로, 이것은 전사기인
00:05:22스크라이브 v2로부터 온 교정된 최종 실시간 감지 결과임을 기억하십시오.
00:05:27여기서 툴 콜 없이 이루어졌던 에이전트의 성급한 생성은 취소됩니다.
00:05:34백그라운드 에이전트가 마침내 찾고자 하던 이름과 생년월일을 찾아냈기 때문입니다.
00:05:38따라서 다시 트리거되며, 이제 에이전트는 실제로 필요한 컨텍스트를 갖추게 됩니다.
00:05:45여기서 우리가 그것을 수행하고 있는 것을 볼 수 있습니다. 여기서의 툴 콜은 약간의
00:05:49지능을 담고 있습니다. 이름의 오인식을 교정하고,
00:05:53일종의 음성학적 매칭(Phonetic matching)을 수행합니다.
00:05:57그리고 이것이 사용자의 발화 끝이라는 것을 이해하면,
00:06:02출력하게 됩니다. 꽤 표준적인 방식이죠.
00:06:06좋습니다. 다음 레이어는 텍스트 음성 변환(TTS)입니다. TTS의 목표는
00:06:12에이전트가 말한 내용을 가져오는 것이며, 에이전트는 이를 스트리밍
00:06:16방식으로 출력할 것입니다. 따라서 최대한 빨리 오디오를 생성해야 합니다. 이상적인 방법은
00:06:24에이전트가 전체 텍스트 생성을 마치기도 전에 오디오가 재생되도록 하는 것입니다. 이를 통해
00:06:31생성 완료 대기 시간을 숨길 수 있습니다. 이제 스트리밍
00:06:39에이전트 출력을 재생해 보겠습니다. U로 시작하죠. 그리고 더 깊이 들어가기 전에,
00:06:46여기서 소개하는 '프리픽스 캐시(Prefix cache)'라는 새로운 개념이 있습니다. 프리픽스 캐시는
00:06:52에이전트 스트림을 확인하여 해당 단어 시퀀스에 대해 이미 생성된 오디오가 있는지
00:07:02이전 생성 과정이나 혹은 이번 통화 내의 동일한 생성 과정에서부터 존재치 확인합니다.
00:07:10단어 U를 감지합니다. 이 프리픽스 캐시를 위해 우리는 모든 단어마다
00:07:17즉시 적중(Hit)시키기를 원하지는 않습니다. 조금 더 많은 단어를 기다릴 것입니다. 따라서
00:07:24세 단어 후에 프리픽스 캐시가 첫 번째 적중을 기록합니다. 그리고 오른쪽에 있는 것은
00:07:31표준 TTS 제공업체입니다. 카르테시아(Cartesia)는 웹소켓을 지원하는 TTS 엔진입니다.
00:07:36따라서 에이전트를 캐시를 통해 파이핑하고, 웹소켓을 통해서도 파이핑하고 있습니다.
00:07:45더 많은 토큰이 들어오고, 더 많은 캐시가 쌓이며, 웹소켓으로 더 많이 전송됩니다. 특별히 더 말할 것은 없습니다.
00:07:51그리고 이제 첫 번째 고유한 상황이 발생합니다. 실제로 캐시 미스(Cache miss)를 유발하는 토큰을
00:07:59찾아낸 것입니다. 이전 생성 결과를 캐싱하고 있다면 당연합니다. 당신의 이름은...이라고 말하는 것은
00:08:05매우 흔한 일이지만, 일단 이름을 추가하면 갑자기 캐시 미스가 발생하게 됩니다.
00:08:12이 시점에서 우리는 캐시된 오디오를 실제로 내보내게 됩니다. 즉, 'You said your name is' 부분이
00:08:19나머지 스트리밍 텍스트가 돌아오는 동안 출력됩니다. 이 시점에서 사용자는 에이전트의 목소리를 듣습니다.
00:08:25사용자는 무슨 일이 일어나고 있는지 잘 모릅니다. 단지 응답 속도가 매우 빠르다고 느낄 뿐입니다.
00:08:32이제 남은 텍스트가 흘러 들어옵니다. 이 시점에선 이미 캐시에서 출력된 상태입니다.
00:08:38캐시는 할 일을 다 했습니다. 나머지는 카르테시아로 넘길 수 있습니다. 여기서 카르테시아가
00:08:46이 시점까지의 전체 대본을 보게 되는 트릭이 있습니다. 카르테시아 입장에서는 이
00:08:56프리픽스 캐시의 존재를 알지 못합니다. 이 전체 문장을 표준적인
00:09:01자연스러운 억양(Prosody)으로 생성할 뿐입니다. 하지만 우리가 하는 일은 생성이 완료되어 돌아왔을 때, 이미
00:09:08여기서 오디오를 재생했으므로 카르테시아의 오디오 중복분을 억제하고
00:09:13나머지 부분만 재생하는 것입니다. 따라서 사용자가 느끼기에 약간의 어색함이 있을 수 있습니다. 나중에 오디오를 재생해 드릴 텐데,
00:09:21아마 알아채지 못하실 겁니다. 효과적으로 우리는 이 부분을 가져와서
00:09:28이 오디오 재생이 끝난 직후에 바로 출력합니다. 그래서 사용자에게는 끊김 없이 매끄럽게 보입니다.
00:09:35기술적인 세부 사항이 너무 많았으니, 가장 좋은 방법은
00:09:43실제 통화 녹음을 재생하여 직접 확인하는 것 같습니다. 통화를 녹음해 두었으니 어떻게 되는지 들어보시죠.
00:09:53안녕하세요, 보 산부인과 엘리스입니다.
00:09:59안녕하세요, 임신 가능성이 있는 것 같아서 확인차 초음파 검사를 예약하고 싶어요.
00:10:03기쁜 소식이네요. 성함과 생년월일을 말씀해 주시겠어요?
00:10:08네, 엘리스 트라이얼이요. 생년월일은 2303이요.
00:10:15감사합니다. 저희 병원은 처음이신가요?
00:10:24네. 보 산부인과에 오신 것을 환영합니다. 보험 정보를 업로드하실 수 있는 링크를 문자로 보내드릴까요?
00:10:34네. 좋습니다. 보냈습니다. 수신하시면 알려주세요.
00:10:48보험 정보를 수신했습니다. 가장 빠른 예약 가능일은 목요일인
00:10:537월 2일 오전 10시입니다. 잠시만요, 제 캘린더를 좀 확인할게요.
00:11:01네, 천천히 하세요. 다음 주에 가능한 시간 있나요?
00:11:09다음 주라면, 노스 클리닉(North Clinic)에서 에이버리 스톤(Avery Stone) 의사 선생님과의 초음파 예약을
00:11:147월 7일 화요일 오후 2시나 3시에 잡아드릴 수 있습니다. 두 시간 중 괜찮으신 시간이 있으신가요?
00:11:20네, 오후 2시가 좋아요. 좋습니다. 예약이 완료되었습니다. 그때 뵙겠습니다.
00:11:29감사합니다. 안녕히 계세요. 네, 대략 이렇습니다.
00:11:35이러한 스트리밍이나 백그라운드에서 일어나는 수많은 일들을
00:11:43보실 수 있습니다. 바로 이것이 음성 에이전트를 흥미롭게 만드는 점입니다.
00:11:48그리고 진정으로
00:11:55자연스러운 대화를 이끌어내기 위해 하네스 측면에서 많은 노력을 기울일 수 있으며, 그것이 바로 우리가 추구하는 바입니다.
00:11:59마지막으로 간단히 엘리스에 대해 이야기하고 마치겠습니다.
00:12:04엘리스는 본사가 뉴욕에 있으며, 베이 지역(Bay Area)에서도 입지를 넓히려고 하고 있습니다.
00:12:09샌프란시스코의 AI 스타트업들을 떠올릴 때 사람들이 생각하는 것과는
00:12:15금전적으로나 스타일 면에서 조금 다른 회사라고 생각합니다.
00:12:23우리는 실제로 사람들을 돕고, 사람들이 가장 필요로 하는 곳에서 도움을 주는 데 매우 집중하고 있습니다.
00:12:31가장 중요한 삶의 영역인 주거와 헬스케어 분야에서 일하고 있으며 아주 잘 해내고 있습니다.
00:12:37우리 팀에 합류할 수 있는 링크가 여기에 있으며,
00:12:45트위터(@Elyse.ai)에도 많은 글을 올릴 예정이니 팔로우해 주세요. 네, 이상입니다.
00:12:57그럼 트위터에 더 많은 소식을 게시하도록 하겠습니다.

핵심 요약

엘리스 AI는 전사, LLM, TTS 레이어 각각에 스트리밍 투기적 전사, 백그라운드 툴 콜링, 프리픽스 캐시 같은 최적화 트릭을 적용하여 지능을 유지하면서 실시간 음성 에이전트의 속도를 높인다.

하이라이트

  • 스트리밍 투기적 전사기는 빠른 스트리밍 전사기와 정확한 배치 전사기를 계층화하여 더 많은 컨텍스트와 정확한 감지 결과를 제공한다.

  • 백그라운드 에이전트가 툴 콜링을 대신 수행하고 결과를 메인 에이전트에 주입하여 메인 에이전트의 왕복 추론 횟수를 줄인다.

  • 프리픽스 캐시는 에이전트 스트림에서 이미 생성된 오디오를 확인하여 생성 완료 대기 시간을 숨긴다.

  • 카르테시아는 웹소켓을 지원하는 TTS 엔진으로 활용된다.

  • 엘리스 AI는 주거와 헬스케어 분야에서 실시간 음성 에이전트를 적용한다.

타임라인

캐스케이드 음성 에이전트의 구조와 인식 레이어

  • 음성 에이전트는 자율주행 차량의 인식, 플래닝, 제어 레이어와 동일한 구조적 관점을 가진다.
  • 인식 레이어는 현실 세계의 신호를 언어 모델이 처리할 수 있는 데이터 요소인 전사로 변환한다.
  • 제어 레이어는 텍스트를 음성 에이전트의 생각을 표현하는 오디오로 변환한다.

음성 에이전트 설계는 자율주행 차량의 시스템과 유사한 방식으로 이해할 수 있다. 전사는 자율주행의 카메라와 라이다처럼 신호를 데이터로 변환하며, 플래닝 스택은 언어 모델을 통해 출력을 생성한다. 제어 레이어는 주행 경로 대신 텍스트를 오디오로 변환하는 역할을 담당한다.

스트리밍 투기적 전사기와 언어 모델 최적화

  • 스트리밍 투기적 전사기는 플럭스와 스크라이브 v2를 계층화하여 속도와 정확도를 동시에 높인다.
  • 백그라운드 에이전트가 툴 콜링을 처리하고 그 결과를 메인 에이전트에 주입한다.
  • 사용자가 발화를 끝마쳤다는 것을 확인하기 전까지 에이전트의 성급한 생성은 취소되거나 대기한다.

속도와 지능을 동시에 확보하기 위해 전사기 레이어에서는 빠른 스트리밍 전사기와 정확한 배치 전사기를 결합한다. 또한 메인 에이전트의 왕복 추론을 줄이기 위해 백그라운드 에이전트가 툴 콜링을 대신 수행한다. 사용자 발화가 진행되는 동안 조기 생성된 결과는 교정 및 최종 감지 결과에 따라 적절히 관리된다.

프리픽스 캐시와 TTS 스트리밍

  • 프리픽스 캐시는 이전에 생성된 오디오가 있는지 확인하여 생성 완료 대기 시간을 숨긴다.
  • 웹소켓을 지원하는 카르테시아는 스트리밍 텍스트를 자연스러운 억양의 오디오로 생성한다.
  • 캐시 미스가 발생한 경우 캐시된 오디오를 먼저 내보내고 나머지 스트리밍 오디오와 매끄럽게 연결한다.

텍스트 음성 변환 단계에서는 전체 텍스트 생성이 끝나기 전에 오디오를 재생하여 지연 시간을 감춘다. 프리픽스 캐시를 통해 단어 시퀀스의 기존 오디오를 재사용하며, 캐시 미스가 발생할 경우 미리 준비된 오디오를 출력한 뒤 카르테시아의 오디오 중복을 억제하고 자연스럽게 이어 붙인다.

실제 통화 녹음 시연 및 기업 소개

  • 병원 초음파 검사 예약을 처리하는 실시간 음성 에이전트의 실제 통화 녹음이 시연된다.
  • 에이전트는 이름, 생년월일, 보험 정보 수신 및 캘린더 일정을 자연스럽게 처리한다.
  • 엘리스는 뉴욕과 베이 지역에 기반을 두고 주거와 헬스케어 영역의 실용적인 AI 솔루션에 집중한다.

구현된 스트리밍 및 백그라운드 처리 기술이 실제 통화에서 어떻게 작동하는지 예약 시연을 통해 확인할 수 있다. 에이전트는 사용자와의 대화 속에서 병원 예약과 일정 조율을 매끄럽게 수행한다. 엘리스는 사람들이 가장 필요로 하는 주거와 헬스케어 분야에 집중하여 서비스를 제공하고 있다.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기