음성 에이전트를 만들 때 첫 주에 반드시 겪게 되는 5가지 실패 유형 — Venky B, Plivo

Transcript

00:00:00간단한 질문 몇 가지 먼저 하고 바로 시작하도록 하겠습니다. 여기 계신 분들 중에
00:00:19음성 AI 에이전트를 직접 만들어 보신 분이 얼마나 되나요? 네, 청중 중에 꽤 많으시네요. 그럼
00:00:28실제 프로덕션 환경에 AI 에이전트를 배포해 보신 분들은 또 얼마나 되시나요? 나쁘지 않네요. 좋습니다. 그럼 보통
00:00:38어떤 일이 벌어지는지 이야기해 보죠. 다들 음성 AI 에이전트에 대해 이야기하잖아요? 아시다시피
00:00:47요즘 세상의 거의 모든 문제에 대한 만병통치약처럼 여겨지는 게 바로 음성 AI 에이전트입니다. 그래서 모두가
00:00:51에이전트를 만들고 배포하려고 하죠. 개발 환경에서
00:00:57만들어 볼 때는 아주 그럴듯하게 작동합니다. 그러다 개념 증명(PoC) 단계에서 프로덕션으로 전환하는 순간
00:01:03난관에 부딪히기 시작하죠. 그래서 오늘은 PLEVO의 음성 AI 에이전트 경험을 바탕으로
00:01:09어떤 문제들이 발생하는지 다섯 가지 관점에서 살펴보겠습니다. 그 전에 먼저 제 소개를 간단히 하겠습니다. 저는 창업자이자 CAO인 벤키입니다.
00:01:19다른 친구는 에이전트 엔지니어링 매니저라는 직함을 쓰는데, 저는 직함상 최고 에이전트 책임자(CAO)라고 부르고 있습니다.
00:01:28직함상으로는 그렇다는 거죠. 자, 그렇다면 우리가 왜, 왜 이런 논의를 할 자격이 있고
00:01:35설명해 드리겠습니다. 먼저 우리가 지금까지 걸어온 여정에 대해 조금 이야기한 뒤에 본격적으로
00:01:42들어가겠습니다. 저희는 약 14년 동안 비즈니스를 해왔습니다. 개발자 API 플랫폼으로 시작해서
00:01:48지금은 AI 에이전트 비즈니스를 하고 있죠. 2011년 당시 음성과 SMS API로 시작했습니다.
00:01:54그리고 지금은 풀스택 AI 에이전트 제품에 주로 집중하고 있습니다.
00:02:01플랫폼의 전체 스택 말이죠. 저희 플랫폼은 전 세계적으로 매달 10억 건 이상의 음성 통화를 처리하고 있으며,
00:02:08이를 통해 고객들과 함께 일하면서 프로덕션 환경의 음성 AI 에이전트에서 어떤 패턴들이 나타나는지
00:02:16많이 목격할 수 있었습니다.
00:02:20저희는 90명 규모의 팀이며, 5천만 달러의 투자금을 확보하고 있습니다.
00:02:25재미있는 사실은, 이것이 외부 VC 투자금 덕분이 아니라는 점입니다. 수년 동안 회사를 운영하며 이익을 내고
00:02:33곳간에 차곡차곡 쌓아둔 현금이라는 것이죠.
00:02:38저희가 전 세계에 걸쳐 지원하고 있는 일부 고객들의 로고를 슬라이드에 남겨두었는데요.
00:02:42제공하는 제품 관점에서 이것을 크게 세 가지로 분류해 볼 수 있습니다.
00:02:49하지만 제공하는 서비스 관점에서 보면, 저는 이것을 세 가지
00:02:54다른 영역으로 나눌 수 있습니다. 첫째는 프로그래밍 가능한 AI 에이전트 서비스입니다.
00:03:00아직 완전한 음성 대 음성 제품은 아니지만 음성 파이프라인 형태의 프로그래밍 가능한 서비스죠.
00:03:05또한 AI 에이전트 스튜디오도 가지고 있습니다. 노코드 시각화 빌더인데요. 그리고 앞서 말씀드렸듯
00:03:11음성 API로 시작했기 때문에, 지난 14년 동안 당연히 이를 발전시켜 왔습니다.
00:03:16SIP 트렁킹과 오디오 스트리밍 레이어 말이죠. 그래서 저희는 텔레포니나
00:03:22통신사 레이어를 다른 곳에 의존하지 않습니다. 그게 바로 수년간 구축해 온 핵심 비즈니스입니다.
00:03:26그리고 그 위에 저희의 AI 에이전트 플랫폼이 얹혀 있는 것입니다.
00:03:32자, 그럼 본론으로 들어가 볼까요? 여러분도 모두 AI 에이전트를 만들어 보셨으니
00:03:39이런 것들을 한 번쯤 보셨거나 어떤 방식으로든 직접 구현해 보셨을 겁니다. 전체적인 파이프라인이
00:03:44어떻게 생겼는지에 대해 더 많은 시간을 할애해 살펴보겠습니다. 고객들을 보면 알 수 있듯이,
00:03:51여러분도 충분히 공감하실 텐데요. AI 에이전트를 고민하는 누구나
00:03:56이러한 오케스트레이션 프레임워크들을 가져다가 꽤 훌륭하게 활용하곤 합니다.
00:04:01라이브킷(LiveKit)이나 파이프캣(Pipecat)을 써서 그 위에 AI 에이전트를 구축하는 식이죠. 이들은
00:04:06음성 인식(STT), LLM, 음성 합성(TTS)이라는 네 가지 서로 다른 레이어를 오케스트레이션하고
00:04:13그 사이에 발화 감지(Turn Detection)만 넣으면 바로 끝난다고 생각합니다. POC 단계에서 AI 에이전트가 잘 작동하니
00:04:19프로덕션에서도 잘 작동할 거라고 생각하는 거죠. 보통은 그렇게 시작합니다. 지연 시간을 측정해 보면
00:04:24이 슬라이드에서 각 레이어별 대략적인 지연 시간을 보실 수 있습니다. 사람들은 이를 보고
00:04:30네, 이 정도면 제가 필요한 용도에 충분하겠네요라며 프로덕션 배포를 진행합니다. 그러다
00:04:36프로덕션 환경이 가동되기 시작하면 온갖 종류의 장애 모드(Failure mode)가 나타나게 됩니다.
00:04:41이번 발표에서는 주로 그 부분에 대부분의 시간을 쓰게 될 것 같습니다. 질문이 있으실 경우를 대비해
00:04:48마지막에 질의응답 시간을 조금 남겨두었지만, 바로 이어서
00:04:53저희가 마주하는 다양한 장애 모드들에 대해 이야기해 보겠습니다. 먼저 누구나 입에 올리는
00:05:01첫 번째 주제부터 시작하죠. 가장 많이 회자되는 장애 모드인 바로 '지연 시간(Latency)'입니다. 오늘
00:05:07AI 에이전트나 음성 AI 에이전트에 관한 세션이 몇 개 더 있는 것으로 알고 있는데요. 아마
00:05:12다들 이 특정 장애 모드를 짚고 넘어가실 겁니다. 그래서 제가 이 이야기를 곧바로 꺼내는 이유는
00:05:17사용자 입장에서 이 전체적인 경험이 실제로 어떠한지 설명하기 위해서입니다. 보통
00:05:26대부분의 사람들은 이를 첫 번째 오디오가 출력되는 시간(Time to first audio), 즉 사용자가 발화를 멈춘 순간부터
00:05:34에이전트가 말하기 시작할 때까지의 시간이죠? AI 에이전트를
00:05:39구축해 보셨다면 어떤 느낌이 좋고 자연스러운지, 어떤 느낌이
00:05:46거슬리는지, 혹은 완전히 짜증 나는지 단계별로 체감해 보셨을 겁니다.
00:05:52대부분 플랫폼이나 솔루션에서 광고하는 550밀리초 미만을 원하지만,
00:06:00실제로는 대부분 750밀리초에서 1.2초 사이에 머무는 경우가 많습니다.
00:06:07대다수가 이 범위에 속하고, 성능이 정말 떨어진다면
00:06:131.2초를 훌쩍 넘겨서 결국 사용자가 전화를 끊어버리게 되죠.
00:06:19이제 다양한 계층에서 고객들과 함께 프로덕션 환경에서 실제로 겪은 사례와
00:06:26그에 대한 해결책들을 공유해 드리겠습니다. 우리가 이 레이어를 접근할 때
00:06:33생각해야 할 점은 비용, 지능, 지연 시간이라는 세 가지 요소 사이의 균형입니다.
00:06:42왜 이 세 가지를 이야기하냐면 서로 밀접하게 연관되어 있기 때문입니다.
00:06:48밖에서 몇 분과 이야기를 나누다가 이런 말을 나눴는데요.
00:06:51지난 1년 동안 LLM 분야에서는 엄청난 혁신과 지능의 급상승이 있었습니다.
00:06:58대부분의 지능 향상은 심층 사고나 강화 학습 등을 중심으로 이루어졌죠.
00:07:05그런데 음성 에이전트의 아이러니는 말하는 LLM이나 에이전트의
00:07:11생각 기능이 거의 항상 꺼져 있어야 한다는 점입니다.
00:07:19지난 1년 동안 LLM 레이어에서 이뤄진 발전 중 여기서는 적용되는 게 거의 없습니다.
00:07:25물론 지시사항을 더 잘 따르거나 툴 콜링을 잘 수행하는 더 나은 모델들은 있지만,
00:07:29생사고 레이어에 내장된 지능은 충분히 빠른 속도를 내기 위해
00:07:34기본적으로 전부 꺼두어야 하거든요. 이게 바로 우리가 직면하는 아이러니 중 하나입니다.
00:07:39그렇다면 지능, 비용, 지연 시간의 균형을 어떻게 맞춰야 할까요?
00:07:44시중에 나와 있는 몇 가지 옵션들을 한번 살펴보죠.
00:07:48이전 차트에서 보셨듯이 LLM은 지연 시간을 가장 크게 유발하는 주범이기 때문에
00:07:55특별히 LLM을 짚어서 이야기하는 것입니다.
00:08:02대부분 기본적으로 선택하는 프론티어 모델, 즉 OpenAI, 클로드, 제미나이를 보면
00:08:09P50 기준 첫 토큰 생성 시간(TTFT)이 평소에는 450~500밀리초 정도이지만 튀어 오를 수 있습니다.
00:08:17P90이나 P95 같은 경우는 쉽게 1.2초, 심지어 1.3초 이상으로 치솟을 수 있으며,
00:08:25이는 전체 에이전트 경험에 좋지 않습니다. 자, 그게 바로 프론티어 모델입니다.
00:08:31다른 옵션으로는 토큰을 아주 빠르게 뱉어내는 것으로 유명하고 인기 있는 세레브라스나 그록이 있습니다.
00:08:38이런 방식도 작동은 하지만, 여기서 전용 지연 시간이나 첫 토큰 생성 시간을 보장받으려면
00:08:45전용 용량이 필요하고 비용이 엄청나게 비쌉니다.
00:08:51아까 균형을 맞춰야 할 요소 중 하나로 비용을 언급했던 이유가 바로 그 때문입니다. 정말 비싸죠.
00:08:56그록 팀이나 세레브라스 팀 누구에게 물어보더라도 이렇게 말할 겁니다.
00:09:01전용 용량을 쓰려면 12개월 전에 미리 예약해야 한다고요. 향후 1년 치가 전부 예약되어 있습니다.
00:09:05그러니까 꽤 비용이 많이 드는 옵션이죠. 게다가 배포하려는 모델이
00:09:11이러한 인프라 레이어에서 12개월 뒤에도 살아남을지 확실히 알아야 해요.
00:09:17이는 엄청난 투자이자 큰 미지의 영역입니다. 그렇다면 프로덕션 급에
00:09:27이 세 가지 요소를 잘 균형 잡힌 고품질의 에이전트 말입니다.
00:09:34우리에게 효과가 있었던 것은 바로 오픈 소스 모델이었습니다.
00:09:41선택할 수 있는 종류와 변형도 당연히 아주 많습니다. 제가 특별히 말씀드리고 싶은 것은
00:09:47저희가 함께 다루고 있는 두 가지 모델, Qwen 3.5와 Gemma 4입니다. 현재 시장에 나와 있는
00:09:56최첨단 오픈 소스 모델이라고 볼 수 있죠. 이 모델들의 성능에 대해 많은 벤치마크를 진행해 보았습니다.
00:10:02'모델이 생겼으니 이제 직접 호스팅하고 내 GPU에서 돌려야 하네'라고 생각하면 겁이 날 수도 있습니다.
00:10:10하지만 300밀리초 미만을 꾸준히 목표로 한다면 이 방식이 지연 시간, 비용, 지능 사이의
00:10:17훌륭한 균형점이라는 것을 알 수 있었습니다.
00:10:23자, 조금 더 깊이 들어가 볼까요? 영어만 다룬다면 Qwen 3.5나 Gemma 모두 잘 작동합니다.
00:10:29하지만 다국어 서비스, 즉 글로벌 청중이나 다양한 언어를 다뤄야 한다면 Gemma 4가 훨씬 더 나은 모델입니다.
00:10:35토큰 효율성 평가를 진행해 보았는데요. 쉽게 풀어서 설명하자면,
00:10:44해당 언어로 단어 하나를 생성하는 데 토큰이 얼마나 소모되는지를 뜻합니다.
00:10:48다국어 관점에서 Gemma가 Qwen 3.5보다 최소 2.5배에서 3배 이상 훨씬 더 뛰어납니다.
00:10:56따라서 다국어 기준에서는 다른 조건이 모두 같을 때 Gemma 4의 응답 속도가 훨씬 더 빠릅니다.
00:11:04다국어 처리를 기준으로요. 자, 그럼 LLM 계층에서는 어떤 크기의 모델을 선택해야 할까요? 혼합 전문가(MoE) 모델이 보통
00:11:12잘 작동합니다. 30억 또는 40억 파라미터 규모의 MoE 모델이면 대개 무난하게 쓸 수 있죠. 다만
00:11:17혼합 전문가 모델의 문제는 누군가 파인튜닝을 시도하려고 할 때 까다로워질 수 있다는 점입니다.
00:11:22MoE 모델 파인튜닝은 그리 간단하지 않거든요. 자칫하면 모델이 망가지거나
00:11:28오류가 나는 경우가 많습니다. 그래서 이게 MoE 모델을 쓸 때 겪는 대표적인 어려움 중 하나지만, 보통 별도의
00:11:35파인튜닝이나 커스텀 작업 없이도 곧바로 원하는 수준의 90% 정도는 달성할 수 있습니다.
00:11:42이것이 바로 MoE 모델의 장점이죠. 자, 그런데 만약 파인튜닝을 하고 싶거나
00:11:48더 깊이 들어가서 '나는 헬스케어 같은 특정 도메인에서 일하고 있으니
00:11:53모델을 반드시 파인튜닝해야겠다'고 생각하신다면, 현재 기준으로 볼 때는 적어도
00:11:588억이나 12억, 아니 80억이나 120억 파라미터 모델부터 시작하는 것이 좋습니다. 어쩌면 6개월 뒤에는
00:12:0440억 모델이 80억 모델을 가볍게 뛰어넘을지도 모르지만요. 하지만 오늘날의 기준으로 보면
00:12:11최소한 80억이나 120억 모델이 필요하다는 것을 알 수 있습니다. 이 모델들에서 기대하는 바가 두 가지이기 때문이죠.
00:12:16하나는 당연히 빠른 토큰 생성이고요, 다른 하나는 훌륭한 지시 따르기 능력입니다. 알겠죠? 그리고
00:12:23두 번째는 툴 호출(Tool Calling) 성공률이 매우 높아야 한다는 점입니다. 이 두 가지를 잘 해내면
00:12:29모델을 전혀 파인튜닝하지 않아도 이미 70~80%는 달성한 셈이며, 모델들이 곧바로 잘 작동하게 됩니다.
00:12:35이것이 바로 저희의 비법입니다. 실제로 저희는
00:12:42두 가지 방식을 운영하고 있습니다. 특정 산업군을 위한 파인튜닝 모델을 하나 쓰고요, 그리고 대부분의
00:12:50일반적인 유스케이스에는 MoE 모델을 그냥 기본으로 사용합니다. 실패 사례에 대해 이야기하게 될
00:12:56다다음 슬라이드에서 몇 가지 팁과 노하우를 더 다루겠지만, 지연 시간과 LLM 관점에서의
00:13:00입장은 이렇습니다. 음, 자, 시간이 부족하니까
00:13:07속도를 좀 내겠습니다. 자, 여기에는 몇 가지 다른 방식들도 더 있습니다. 사람들이
00:13:12여러 모델을 조합해서 에이전트를 구축하기도 하는데요. 대화 부분에는
00:13:19훨씬 작고 가벼운 대화용 모델을 사용하고, 예를 들어 30억 파라미터 모델을 쓰고요,
00:13:24툴 호출용으로는 훨씬 더 큰 모델을 두어서
00:13:27툴 호출 성공률을 높이는 식입니다. 음,
00:13:35죄송합니다. 두 번째는, 음성 인식(Transcriptions)이 불안정할 것이라고 가정하라는 것입니다. 이것은
00:13:42AI 에이전트를 만들 때 마음속에 새겨두어야 할 원칙입니다. 시중에 나와 있는
00:13:49최고의 음성 인식 엔진을 쓰더라도 말이죠. 그 이유를 보여드리겠습니다. 시중에 나와 있는
00:13:55최첨단 음성 인식 엔진들은 대개 단어 오류율(WER)을 4~6% 수준으로 낮춰줍니다.
00:14:02물론 이것은 알려진 평가 세트 기준이고요. 현실 세계의 잡음이 섞인 통화에서는
00:14:10사람마다 다른 다양한 억양이나 도메인 전문 용어 등이 섞이면서
00:14:15단어 오류율이 두 자릿수로 치솟는 경우가 보통입니다.
00:14:21물론 오픈소스 모델을 가져다가 파인튜닝을 할 수도 있겠지만요,
00:14:25보통 어디서 문제가 자주 발생하는지 살펴보면 일정한 패턴이 존재합니다.
00:14:31고유명사, 전문 용어, 전화번호 같은 경우 뜬금없이 숫자가 누락되기도 하고요,
00:14:38잘못된 단어로 대체되기도 합니다. 이런 주소 문제들을 어떻게 해결하는지 몇 가지 예시를 통해
00:14:43짚어보겠습니다. 긴 주소를 수집하려고 할 때 음성 인식 엔진이
00:14:48주소의 일부를 그냥 놓쳐버릴 수도 있습니다. 언어간 코드 스위칭(Code-switch) 문제도 있죠. 제가 구사하는 언어의 예를 하나 들어보겠습니다.
00:14:55슬라이드에 넣기가 가장 쉬웠거든요. 예를 들어 영어이긴 한데 다른 문자로 적혀 있는 경우인데요,
00:15:01이것이 바로 힌디어에서 쓰이는 방식입니다. 맞죠? 이렇게 다른 문자로 적힌 영어인 셈이죠.
00:15:06반면 이것의 실제 영어 버전은 “hello, how are you?”입니다. 따라서 다른 국가의 청중을 상대할 때
00:15:11이처럼 언어간 코드 스위칭이 일어나고, 영어 음성이 엉뚱한 다른
00:15:16문자 체계로 인식되기 시작하면, 음성 인식 엔진부터 LLM 계층에 이르기까지
00:15:21모든 것이 망가지기 시작합니다. LLM이 엉뚱하게도 그 이상한 문자로 된 결과물을
00:15:26계속 뱉어내기 시작하고, 결국 TTS(음성 합성)까지 망가져 버리거든요. 알겠죠? 따라서 이것은
00:15:32매우 주의해야 할 부분입니다. 만약 음성 인식 엔진과 독립적으로 에이전트를 구축하고 싶다면,
00:15:38이 모든 것을 정규화하는 계층을 만들어야 합니다. 이에 대한 해결책은 잠시 후에 이야기해 보겠습니다.
00:15:44그리고 또 다른 사례로는 라틴 문자나 로마자로만 표기된 힌디어가 있습니다.
00:15:48말하자면 힌디어인데 읽기는 영어처럼 읽히는 경우죠. 이 역시 하위 시스템 전체를
00:15:54엉망으로 만들어 버립니다. 지금 든 예시들뿐만 아니라 아랍어, 만다린어,
00:15:59일본어 등 거의 모든 언어에 공통으로 적용되는 문제입니다. 그렇다면
00:16:04음성 인식 계층에서 실제로 확실한 변화를 만들어내는 것은 무엇일까요? 고유명사의 경우,
00:16:11단순히 키워드 부스팅만 사용하는 것은 권장하지 않습니다. 많은 음성 인식 엔진들이
00:16:16특정 단어를 엔진에 입력할 수 있는 키워드 부스팅 기능을 제공하지만,
00:16:21동적 키워드 부스팅을 사용하는 것이 좋습니다. 이게 무슨 뜻이냐면, 통화가 진행되는 내내 똑같은 키워드를 유지하지 말고
00:16:26그 답변이 필요하다고 판단되는 시점에만 동적으로 추가하라는 것입니다. 그래야 가장 높은
00:16:32정확도를 얻을 수 있습니다. 즉, 통화의 단계에 따라 음성 인식 엔진이 부스팅하는
00:16:38키워드가 국면별로 달라지게 하는 것이죠. 바로 이 방식이 가장 효과적이라는 것을 확인했습니다.
00:16:43만약 수많은 키워드로 음성 인식 엔진의 컨텍스트를 그저 오염시켜 버리면 다시 엉뚱한 소리를 만들어내기 시작하거든요.
00:16:49그렇기 때문에 이 방법이 가장 효과적입니다. 네, 그리고 LLM으로 트랜스크립트를 후처리하세요.
00:16:55LLM에는 도메인 컨텍스트가 있지만 음성 인식 엔진에는 없기 때문입니다. 그래서 인식된 단어 중에는
00:17:02말도 안 되는 것들이 많을 수 있습니다. 몇 가지 예를 들어보죠. 이것은
00:17:07음성 인식 엔진이 인식한 전화번호 데이터인데요. 저기 저 'E'가 뭐라고 생각하시나요?
00:17:13그렇죠? 이걸 LLM에 넘겨주면 저게 숫자 3이라는 걸 알아챕니다. 마찬가지로 저기 저 숫자 1도
00:17:18디지털 1이라는 것을 알 수 있죠. 음성 인식 엔진은 종종 이런 부분을 망가뜨리지만,
00:17:24LLM 계층으로 후처리하면 정보 수집 관점에서 즉시 바로잡을 수 있습니다. 제 말은,
00:17:30그리고 마지막으로 말씀드렸듯이, 음성 인식 출력 결과인 다국어 번역 표기(Transliteration) 역시
00:17:37LLM을 사용해 먼저 변환하거나 신경망 기반의 변환 엔진을 활용해 정규화해야 합니다.
00:17:46오픈소스 형태의 도구도 아주 많으니 그중 하나를 골라 쓰시면 됩니다.
00:17:49음성 인식 엔진과 상관없이 항상 정제된 트랜스크립트를 LLM으로 전송하세요.
00:17:55음성 인식 엔진과 관계없이 말입니다.
00:18:00좋습니다. 세 번째로 흔히 마주치는 문제는 데이터 수집입니다. AI 에이전트의 50~60%
00:18:05가 여기서 아주 심하게 망가진다고 생각합니다. 우리는 이걸 음성을 위한
00:18:14UX 문제로 바라보려 합니다. 즉, 트랜스크립트가 LLM으로 들어와서 그 내용을 파악하려 애쓰는 대신 데이터 모델을 생각하라는 거죠.
00:18:21여기에 참석하신 분들 대부분이 개발자이실 테니 개발 관점에서 영감을 얻어봅시다.
00:18:27파이썬의 데이터 클래스나 파이단틱(Pydantic),
00:18:32타입스크립트의 Zod, 혹은 UI의 폼 필드 같은 것에서 영감을 얻어보세요. 만약 이 문제에 대해
00:18:39그런 관점으로 접근하기 시작하면, 데이터 수집 측면에서 정확도가 30%에서 95%까지
00:18:46치솟는 것을 볼 수 있습니다. 그러니 질문하기 전에 형태를 먼저 결정하세요. 무언가를 개방형으로 두는 대신
00:18:52제약을 걸어두는 겁니다. 예를 들어 전화번호를 전화번호 타입 필드로 지정할 수 있을까요?
00:18:58그 순간 몇 자릿수가 필요한지 알 수 있게 됩니다. 그 위에 유효성 검사를
00:19:03추가할 수도 있고, 어떤 허용 가능한 값들이 들어올 수 있는지도 정의할 수 있죠. 따라서 앞서 본 예시에서
00:19:10전화번호 중간에 'E'가 끼어 들어왔을 때, 그것이 전화번호라는 걸 안다면
00:19:15스마트하게 숫자 3으로 유추해서 사용자에게 확인을 거치거나,
00:19:20아니면 오류임을 인지하고 유효성 검사를 통해 사용자에게 다시 말해달라고 요청할 수 있습니다.
00:19:26이것이 바로 수집 패턴 관점에서 우리가 봐온 흔한 방식 중 하나입니다.
00:19:31이름 수집은 아주 흥미로운 부분입니다. 제가 방금 발음하기 어려운
00:19:36이름을 하나 골라봤는데요. 인간이라도 이걸 제대로 알아듣기는 불가능합니다. 우리의
00:19:43음성 인식 엔진이 이걸 제대로 맞힐 리도 없고요. 몇 번을 시도하든 마찬가지일 겁니다.
00:19:47따라서 이 문제를 필드로 생각하기 시작하고, 규칙을 세운 뒤에
00:19:53철자를 한 자 한 자 확인하는 검증 메커니즘을 둘 때 비로소 제대로 맞출 수 있게 됩니다. 그렇지 않으면
00:19:58음성 통화로 이를 수집할 때 완전히 엉망이 되거든요. 그리고 이것은
00:20:03데이터 수집 측면에서 제가 말씀드리고 있는 내용의 한 가지 예시일 뿐입니다.
00:20:11상대적 값들, 즉 날짜 같은 데이터를 다룰 때도 상황이 극단적으로 나빠지곤 합니다.
00:20:18누군가 '다음 주 수요일 8시'라고 말하면 이는 오전 8시를 의미할 수도 있고 오후 8시를 의미할 수도 있습니다. 그리고
00:20:25그 날짜가 실제로 언제인지 파악하는 것 역시 매우 제약된 문제가 됩니다. 만약 이것이
00:20:30날짜/시간 필드라는 것을 알고 있고, 날짜/시간 필드를 수집하고 있다면 현재 날짜를 기준으로 삼고
00:20:35그에 맞춰 이 값이 무엇이 될지 계산해 낼 수 있겠죠. 바로 이런 방식으로 처리해야 합니다.
00:20:39LLM과 툴 호출의 조합을 통해 이 작업을 수행하는 것이죠. 여기서 툴 호출은
00:20:44필드 관점에서 이러한 무거운 작업들을 상당 부분 대신 처리해 줍니다.
00:20:50네. 그리고 단위 테스트 관점에서 이를 실행하는 것입니다. 따라서 모든 평가(evals)는
00:20:58이러한 필드들을 단위 테스트로 취급하기 시작해야 합니다. 그리고 단위 테스트들이
00:21:06에이전트가 어느 정도 신뢰할 수 있고 일관성 있게 작동할 것입니다. 여러분이 굳이,
00:21:10단 하나의 필드 수집에 문제가 생겼다는 걸 알기 위해 수백 개의 엔드투엔드
00:21:15에이전트 테스트 케이스를 실행할 필요가 없습니다. 평가를 필드 레벨과 단위 테스트 레벨에서 수행하세요.
00:21:24그리고 앞서 말씀드렸듯이, 이러한 사고방식을 가지면 프롬프트를 왕창 넣고 매번
00:21:30몇 글자씩 계속 수정하면서, 왠지 내 프롬프트 엔지니어링 덕분에 LLM이 훨씬 더 지시를 잘 따르고
00:21:36마법처럼 이런 사항들을 따르게 될 거라고 기대하는 대신, 모든 것이 훨씬 더 체계적으로 변합니다.
00:21:41사실, 말씀드린 것처럼 저희는 모델을 파인튜닝하지 않고도 95%, 97%의 정확도를 달성하는 것을 보아왔습니다.
00:21:47모델을 파인튜닝하지 않고도 95%, 97%의 정확도를 달성하는 것을 보아왔습니다.
00:21:53좋습니다. 그리고 요령은 기본적으로 에이전트가 거치는 구체적인 상태를 바탕으로,
00:21:57해당 시점에 에이전트가 무엇을 하고 있는지에 대한 컨텍스트를 잘게 쪼개는 것입니다.
00:22:04좋습니다. 시간 관계상 이 부분은 빠르게
00:22:10넘어가겠습니다. 3분밖에 안 남았네요. 버그이길 바라지만, 일단 이 정도로 넘어가죠.
00:22:16좋습니다. 자, 여기가 문제 발생하는 네 번째 영역입니다. 대부분의 사람들은 LLM 출력을 가져와서
00:22:24TTS로 보냅니다. 물론 시장에는 많은 복잡한 작업을 처리해 주는 훌륭한 TTS들이 많이 있지만,
00:22:30종종 엉망이 되곤 합니다. 저희가 권장하고 실제로 확인한 바에 따르면, 보통은 LLM과
00:22:37TTS에 입력되는 데이터 사이에 정규화 레이어를 두는 것이 좋습니다. LLM 출력을
00:22:43직접 TTS로 보내면 안 됩니다, 그렇죠? 몇 가지 예시를 통해 살펴보겠습니다.
00:22:50기본적인 것으로는, TTS로 합성하기 전에 이모지와 마크다운을 제거하는 것입니다.
00:22:58대부분의 오케스트레이션 파이프라인은 LiveCAD나 PipeCAD 같은 경우 플래그 몇 개만 설정하면
00:23:02이를 대신 처리해 줍니다. 하지만 이런 도구를 쓰지 않거나 직접 구축하는 경우라면,
00:23:08읽어주는 내용에 이모지가 나타나거나 마크다운이 그대로 노출되는 것을 원치 않을 테니
00:23:12이 부분을 명시적으로 설정해 주어야 합니다.
00:23:17좋습니다. 좀 더 흔한 예로 사용자 지정 사전을 들 수 있습니다. 대부분의 TTS 엔진은
00:23:23고유명사, 브랜드, 약어 등 사용자 지정 단어를 어떻게 발음할지 설정하는 기능을 제공합니다.
00:23:30따라서 LLM 출력이 TTS로 넘어갈 때 이 설정을 적용해야 합니다. 그렇지 않으면 발음이 엉망이 되거든요.
00:23:36우리가 이를 어떻게 테스트하는지 예시를 보여드리겠습니다.
00:23:40다른 하나는 대부분의 엔진이 속도 조절 기능도 제공한다는 점입니다. 특정 개체를 발음할 때
00:23:47에이전트의 속도를 0.8배나 0.7배로 늦춰서 해당 개체를 정확히 발음할 수 있도록 하세요.
00:23:54특정 개체에 대해 정확히 발음하고 이메일이나 전화번호,
00:24:00이름의 철자를 하나씩 읽을 때 발음이 꼬이지 않도록 합니다. 그리고 이메일, 통화, 날짜 같은 복잡한 요소들은 모두 정규화하세요.
00:24:09TTS에만 맡겨두지 마세요. 대부분 처리할 수 있긴 하지만,
00:24:15TTS에만 의존하지 마세요. 자체적인 정규화 계층을 직접 구축하여, 나중에 TTS를
00:24:21교체해야 하거나 어떤 이유로 첫 번째 서비스에 장애가 생겨서
00:24:25다른 TTS를 사용하고 싶을 때, TTS 엔진에만 의존하지 않고 이를 직접 관리할 수 있도록
00:24:32내부에 구축하는 것이 좋습니다. 그리고 음, 제 배지가 여기에 없는데, 제 성이 거기에 안 나와 있네요.
00:24:39그래서 제 첫 번째 테스트는 제 성이나 회사 이름을 제대로 발음하지 못하면
00:24:44이미 기본도 못 하고 있는 겁니다. 제 성은 '발라수브라마니안'인데,
00:24:50음성 AI 에이전트를 사용해 이 이름을 제대로 발음하지 못한다면, 제 기준에서는 탈락입니다. 저는 알 수 있죠,
00:24:56에이전트가 매일 철자를 그대로 읽어야 하는 많은 단어들을 제대로 발음하지 못할 거라는 걸요.
00:25:04두 번째는 저희 회사 이름인 Pliwo입니다. 많은 엔진들이 이를 Pliwo나
00:25:09기타 여러 방식으로 발음합니다. 하지만 파이프라인에서 이를 제어할 수 있다는 점이
00:25:16매우 중요합니다. 만약 고객 대상 제품을 구축하고 계신다면,
00:25:21이러한 옵션을 고객에게 제공하는 것이 좋습니다. 좋습니다,
00:25:26마지막 두 슬라이드는 빠르게 훑고 넘어가겠습니다. 시간이 꽤 많이 지났거든요.
00:25:32발화 종료 감지는 별도의 주제이지만, 핵심 포인트들을 빠르게
00:25:36띄워드려서 여러분이 훑어보실 수 있도록 하겠습니다. 이 후에 따로 이야기가 필요하다면
00:25:41그때 이야기 나누면 됩니다. 이 화면을 5초 정도만 띄워두고
00:25:49오프라인에서 이야기 나누도록 하겠습니다. 시간이 꽤 초과되었네요. 그리고 마지막으로,
00:25:53마지막 주제는 끼어들기와 백채널링입니다. 이와 관련된 기능을 수행하는
00:25:58음성 대 음성 모델에 대한 이야기가 많지만, 저희는 음성 대 음성 파이프라인에서 이 모든 것을
00:26:03어떻게 구현할 수 있는지 확인해 보았습니다. 이 모든 것을 구현하는 데 굳이 음성 대 음성 모델이 꼭 필요한 것은 아닙니다.
00:26:07이 역시 슬라이드에 띄워두는 것으로 갈음하고 마무리하겠습니다. 음,
00:26:15알겠습니다. 질문을 받을 시간은 없을 것 같네요. 혹시 시간이 있으시다면 나중에 개별적으로 질문해 주세요.
00:26:19아무쪼록 이번 내용이 수십억 건 규모의 프로덕션 환경에서 저희가 확인하고 있는 바에 대해
00:26:24통찰을 얻는 데 유익한 시간이 되었기를 바랍니다. 감사합니다.
00:26:29다음에 뵙겠습니다.

Key Takeaway

음성 AI 에이전트를 프로덕션에 안정적으로 배포하려면 오픈소스 모델을 통한 지연 시간 최적화, 동적 키워드 부스팅을 활용한 음성 인식 보정, 그리고 데이터 모델 기반의 수집 구조 설계가 필수적이다.

Highlights

  • 음성 AI 에이전트를 개발 환경에서 프로덕션으로 전환할 때 지연 시간, 음성 인식 오류, 데이터 수집 실패 등 5가지 주요 난관이 발생한다.

  • 첫 토큰 생성 시간(TTFT)을 300밀리초 미만으로 유지하려면 프론티어 모델 대신 오픈소스 모델인 Qwen 3.5나 Gemma 4가 훌륭한 균형점을 제공한다.

  • 다국어 처리 관점에서 Gemma 4는 Qwen 3.5보다 토큰 효율성이 최소 2.5배에서 3배 이상 뛰어나다.

  • 음성 인식(STT) 엔진은 현실 세계의 잡음과 억양으로 인해 단어 오류율이 두 자릿수로 치솟으므로, 동적 키워드 부스팅을 적용해야 한다.

  • 데이터 수집 단계에서는 개방형 프롬프트 대신 파이단틱이나 Zod 같은 데이터 모델 형식을 도입해 정확도를 30%에서 95% 이상으로 끌어올린다.

Timeline

음성 AI 에이전트의 프로덕션 전환 난관과 지연 시간 최적화

  • 개발 환경에서 잘 작동하던 음성 AI 에이전트는 프로덕션 환경에서 다양한 장애 모드에 부딪힌다.
  • LLM 레이어는 지연 시간을 유발하는 주범이며, 프론티어 모델은 P90 기준으로 1.2초 이상 지연될 수 있다.
  • Qwen 3.5와 Gemma 4 같은 오픈소스 모델을 활용하면 300밀리초 미만의 지연 시간과 비용, 지능 사이의 균형을 맞출 수 있다.

음성 AI 에이전트는 POC 단계에서 완벽해 보이지만 프로덕션 가동 시 지연 시간 등의 문제에 직면한다. 사용자 경험에 치명적인 지연 시간을 줄이기 위해 전용 용량을 사용하는 프론티어 모델이나 고비용 인프라 대신, 오픈소스 모델을 직접 호스팅하는 방식이 효과적이다. 특히 다국어 환경에서는 토큰 효율성이 뛰어난 모델을 선택하는 것이 응답 속도 확보에 유리하다.

불안정한 음성 인식(STT) 극복과 후처리 전략

  • 최첨단 음성 인식 엔진도 실제 통화 환경에서는 억양과 전문 용어로 인해 단어 오류율이 두 자릿수로 상승한다.
  • 통화 전체에 동일한 키워드를 유지하는 대신 답변이 필요한 시점에만 동적 키워드 부스팅을 적용해야 한다.
  • 인식된 텍스트는 LLM을 이용해 후처리함으로써 누락된 숫자나 잘못된 표기를 즉시 바로잡아야 한다.

음성 인식 엔진은 고유명사나 전화번호를 누락하거나 엉뚱한 문자로 변환하기 쉽다. 이를 해결하기 위해 통화 국면별로 키워드 부스팅을 동적으로 다변화하고, LLM을 활용한 트랜스크립트 후처리 계층을 두어 정제된 데이터를 상위 레이어로 전달하는 구조가 필요하다.

데이터 수집 정확도 향상을 위한 구조화 패턴

  • 음성 에이전트 실패의 절반 이상은 개방형 데이터 수집 과정에서 발생한다.
  • 파이썬 데이터 클래스나 타입스크립트 Zod 같은 데이터 모델 개념을 도입하면 수집 정확도가 95% 이상으로 상승한다.
  • 필드 레벨과 단위 테스트 레벨에서 에이전트 평가를 수행하여 일관성을 확보해야 한다.

전화번호, 이름, 날짜 등의 정보를 개방형으로 수집하면 오류가 빈번하게 발생한다. 데이터 타입을 엄격히 정의하고 유효성 검사와 제약 조건을 추가하면 비정상적인 입력값을 사전에 차단하거나 보정할 수 있다. 프롬프트를 무작위로 수정하는 대신 필드 레벨의 단위 테스트를 통해 에이전트의 신뢰성을 높인다.

텍스트 음성 변환(TTS) 정규화와 발음 제어

  • LLM 출력을 정규화 레이어 없이 TTS로 직접 보내면 마크다운이나 이모지가 그대로 음성으로 출력되는 문제가 생긴다.
  • 사용자 지정 사전을 활용해 고유명사나 브랜드의 발음을 제어하고 필요시 속도를 조절해야 한다.
  • TTS 엔진 변경에 유연하게 대응하기 위해 내부에 독자적인 정규화 계층을 구축하는 것이 바람직하다.

LLM의 출력 결과를 곧바로 TTS로 전달하면 특수문자나 잘못된 발음으로 인해 품질이 저하된다. 합성 전 단계에서 이모지와 마크다운을 제거하고, 복잡한 요소들을 정규화하는 전용 계층을 두어야 한다. 고유명사나 회사 이름처럼 매일 다루는 단어들을 정확히 발음하는지 테스트하는 것이 품질 보장의 기본이다.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video