URL: https://www.youtube.com/watch?v=Q3403O6h-yI 날짜: 2026-09-19 채널: Tech Bridge 원문 발행일: 2026-09-18 영상 길이: 26분 18초 발표자: Plivo 창업자 겸 CEO Venky B Nuggets 제목: 보이스 AI 에이전트가 첫 배포 주에 무너지는 5가지 이유 주제: 음성 AI 에이전트, 프로덕션 안정성, STT, LLM, TTS, 데이터 수집, 턴테이킹
📌 핵심 질문 / 이 영상이 다루는 핵심 논점
==개발 환경의 데모에서 자연스럽게 작동하는 보이스 AI 에이전트가 실제 프로덕션에 배포되는 순간 무너지는 이유는 모델 하나의 성능이 아니라 전체 음성 파이프라인의 경계면과 데이터 계약을 설계하지 않았기 때문이다.==
- 지연 시간은 비용·지능·속도 사이의 트레이드오프이며, 550ms라는 광고상의 목표보다 750~1,200ms가 현실적인 경우가 많다.
- 최신 음성 인식 엔진도 4~6%의 단어 오류율(WER)을 남기고, 실제 잡음·억양·도메인 용어가 섞인 통화에서는 오류율이 두 자릿수까지 치솟는다.
- 음성으로 데이터를 받을 때 자유로운 대화문을 그대로 LLM에 넘기지 말고 타입이 지정된 필드(Typed Field), 제약 조건, 검증, 재확인 절차로 바꿔야 한다.
- LLM 출력물을 곧바로 TTS에 보내지 말고 이모지·마크다운·고유명사·숫자·이메일·날짜를 정규화하는 자체 계층을 둬야 한다.
- 턴 감지(Turn Detection), 끼어들기(Barge-in), 백채널링(Backchanneling)은 엔드투엔드 음성 대 음성(Speech-to-Speech) 모델이 없어도 조합형 파이프라인에서 구현할 수 있다.
데모는 STT(Speech-to-Text), LLM, TTS(Text-to-Speech), 턴 감지라는 네 계층을 오케스트레이션하면 완성되는 것처럼 보인다. 그러나 프로덕션에서는 각 계층이 내놓는 불완전한 결과를 다음 계층이 그대로 믿으면서 오류가 증폭된다. Plivo가 매달 10억 건이 넘는 음성 통화를 처리하며 얻은 핵심 교훈은, 작은 모델을 고르는 일보다 상태별 컨텍스트 분리, 명시적 데이터 타입, 정규화, 필드 단위 평가를 설계하는 일이 더 큰 안정성 향상을 만든다는 것이다.
1. 데모에서 프로덕션으로 넘어갈 때 깨지는 구조
개발 환경에서 한두 번 성공한 대화는 운영 환경의 품질 보증이 아니다. 실제 통화는 지연 시간의 꼬리 분포, 전사 오류, 언어 혼용, 숫자와 고유명사, 사용자의 끼어들기를 동시에 발생시킨다.
1.1. Plivo가 관찰할 수 있었던 운영 규모
-
API 사업에서 음성 에이전트 플랫폼으로 확장
- 출발점: Plivo는 2011년 음성(Voice) 및 SMS API로 시작했다.
- 현재 초점: 약 14년 동안 개발자 API 플랫폼에서 AI 에이전트 사업으로 확장했고, 플랫폼 안에서 음성 에이전트의 전체 스택을 제공한다.
-
대규모 통화에서 반복되는 패턴
- 처리량: 전 세계에서 매달 10억 건이 넘는 음성 통화를 접한다.
- 관찰 대상: 고객이 만든 음성 에이전트가 실제 운영 환경에서 어떤 계층에서 실패하는지 반복적으로 확인할 수 있다.
- 운영 기반: 팀 규모는 90명이며, 은행에 보유한 자금은 5,000만 달러다.
- 자금의 성격: 5,000만 달러는 외부 벤처캐피털(VC) 투자금이 아니라 수년간 수익을 내고 현금으로 축적한 자금이다.
-
제품이 놓인 세 가지 층
- 프로그래밍 가능한 AI 에이전트: 아직 진정한 음성 대 음성 제품이라기보다 개발자가 구성하는 음성 파이프라인(speech pipeline)이다.
- AI Agent Studio: 코딩 없이 구성하는 비주얼 빌더다.
- 통신 인프라: 14년에 걸쳐 SIP 트렁킹(SIP trunking)과 오디오 스트리밍 계층을 구축했기 때문에 통신·통신사업자(carrier) 계층을 외부 업체에 의존하지 않는다.
1.2. 모두가 처음 만드는 네 계층 파이프라인
-
오케스트레이션의 출발점
- 프레임워크 선택: 개발자는 LiveKit, Pipecat 같은 오케스트레이션 프레임워크를 고른다.
- 계층 결합: STT, LLM, TTS, 턴 감지를 연결하고 그 위에 자신만의 에이전트를 만든다.
-
데모 성공이 만드는 착시
- 측정 방식: 각 계층의 지연 시간을 재고, 현재 수치가 자신의 요구사항에 충분하다고 판단한다.
- 잘못된 결론: 개발 환경 또는 개념 증명(POC)에서 동작하면 프로덕션에서도 괜찮을 것이라고 생각한다.
- 운영 전환: 실제 트래픽을 받는 순간 계층별 실패가 연쇄적으로 드러난다.
-
프로덕션 품질의 단위
- 한 모델의 점수: 특정 LLM의 벤치마크 점수만으로 통화 품질을 설명할 수 없다.
- 경계면의 계약: STT가 숫자와 이름을 어떻게 표현하는지, LLM이 어떤 필드를 채우는지, TTS가 그 값을 어떻게 읽는지를 명시해야 한다.
2. 실패 요인 1 — 지연 시간은 사용자 경험·비용·지능의 균형 문제다
음성 에이전트의 첫 응답이 늦으면 사용자는 시스템이 멈췄다고 느끼고 전화를 끊는다. 단순히 가장 빠른 모델을 고르는 문제도 아니다. 비용, 지능, 지연 시간 세 요소가 서로 얽혀 있기 때문이다.
2.1. TTFA가 만드는 체감 품질의 경계
-
측정 정의
- TTFA(Time to First Audio): 사용자가 말을 멈춘 시점부터 에이전트가 첫 음성을 재생하기 시작하는 시점까지의 시간이다.
- 체감 단계: 자연스럽게 느껴지는 구간, 약간 거슬리거나 눈에 띄는 구간, 명백히 불쾌한 구간이 단계적으로 나뉜다.
-
현실적인 임계값
- 광고상의 목표: 플랫폼·솔루션·각 계층은 550ms 미만을 흔히 광고한다.
- 실제 분포: 대부분의 구현은 750~1,200ms 사이에 도달한다.
- 이탈 구간: 성능이 매우 나쁜 시스템은 1.2초를 넘기며, 이때 사용자가 전화를 끊기 시작한다.
-
프로덕션에서 봐야 할 지표
- 평균만 보지 않기: 평균 또는 P50만 괜찮아도 P90·P95에서 지연이 길면 많은 사용자가 불편을 겪는다.
- 계층별 꼬리 지연: STT, 대기열, LLM, TTS가 각각 추가하는 지연을 분리해 측정해야 한다.
2.2. LLM은 가장 큰 지연 버킷이며 최신 추론 기능이 오히려 독이 될 수 있다
-
음성 에이전트의 역설
- 최근의 발전: 지난 1년간 LLM 분야의 혁신은 사고(Thinking), 강화학습(Reinforcement Learning), 복잡한 추론 능력에 집중됐다.
- 음성의 제약: 통화 에이전트는 충분히 빠르게 말해야 하므로 사고 계층을 거의 항상 꺼야 한다.
- 결과: 최신 추론 기능의 상당 부분이 속도 요구사항 때문에 음성 에이전트에는 적용되지 않는다. 더 나은 지시 이행과 툴 호출을 제공하는 모델이라도 사고 모드를 켜면 TTFA가 악화된다.
-
프론티어 모델의 수치
- 대상: OpenAI, Claude, Gemini 같은 프론티어 모델은 보통 기본 선택지다.
- P50 TTFD: 첫 토큰 또는 첫 음성까지의 지연은 좋은 날에도 대략 450~500ms다.
- P90·P95: 상황에 따라 1.2~1.3초까지 쉽게 상승할 수 있다.
- 사용자 경험: 평균값이 아니라 이 꼬리 지연이 전체 에이전트 경험을 나쁘게 만든다.
-
초고속 추론 인프라의 대가
- 선택지: Cerebras와 Groq는 토큰을 매우 빠르게 생성하는 것으로 알려져 있다.
- 전용 용량: 안정적인 지연 시간과 첫 토큰 생성 시간(TTFT)을 얻으려면 전용 용량이 필요하다.
- 예약 부담: 전용 용량은 매우 비싸고, 해당 업체에 문의하면 12개월 전에 예약해야 하며 향후 12개월분이 이미 예약됐다는 답을 받을 수 있다.
- 투자 위험: 지금 배포한 모델과 인프라가 12개월 뒤에도 유효할지 알 수 없으므로 비용과 기술적 불확실성이 함께 커진다.
2.3. 오픈소스 모델로 300ms 이하를 목표로 잡는 방법
-
현실적인 선택
- 모델: Qwen 3.5와 Gemma 4 같은 최신 오픈소스 모델이 비용·지능·지연 시간의 균형점이 될 수 있다.
- 호스팅 부담: 자체 GPU에서 모델을 호스팅해야 한다는 부담은 있지만, 300ms 미만을 지속적으로 목표로 한다면 효과적인 선택이다.
- 언어별 선택: 영어만 사용하면 Qwen 3.5와 Gemma 4 모두 괜찮지만, 다국어·국제 고객을 대상으로 하면 Gemma 4가 더 유리하다.
-
토큰 비옥도(Token Fertility)
- 의미: 한 언어에서 단어 하나를 생성하는 데 몇 개의 토큰이 필요한지 측정하는 지표다.
- 비교: 다국어 환경에서 Gemma 4는 Qwen 3.5보다 최소 2.5~3배 더 효율적이다.
- 효과: 다른 조건이 같으면 Gemma 4가 단어를 생성하는 시간이 더 짧아진다.
-
모델 크기와 MoE
- 기본 선택: 30억~40억 파라미터 규모의 혼합 전문가(Mixture of Experts, MoE) 모델은 별도 미세 조정 없이도 대체로 잘 작동한다.
- 장점: 기본 상태만으로 원하는 결과에 약 90% 가까이 접근할 수 있다.
- 한계: MoE 모델은 미세 조정이 어렵고, 잘못 조정하면 모델이 망가질 수 있다.
-
도메인 특화 모델
- 미세 조정이 필요한 경우: 의료처럼 특정 산업을 대상으로 하며 모델을 직접 조정해야 한다면 최소 80억 또는 120억 파라미터부터 시작한다.
- 향후 변화: 6개월 뒤에는 40억 모델이 80억 모델을 압도할 수도 있지만, 당시 기준으로는 80억~120억 모델이 안전한 출발점이다.
- 두 가지 핵심 능력: 빠른 토큰 생성과 좋은 지시 이행, 높은 툴 콜링 성공률을 동시에 봐야 한다.
- 실용적 결과: 이 두 능력이 갖춰지면 미세 조정 없이도 약 70~80% 수준까지 도달하며, 범용 모델은 바로 사용할 수 있다.
-
모델을 나눠 쓰는 구성
- 대화 모델: 실제 말을 주고받는 부분에는 더 작고 빠른 대화형 모델을 사용한다. 30억 파라미터 모델도 후보가 된다.
- 툴 호출 모델: 툴 콜링에는 더 큰 모델을 사용해 성공률을 높인다.
- 상품화 방식: 특정 산업용 미세 조정 모델과, 일반 사용 사례에 바로 쓰는 범용 모델이라는 두 가지 모델 맛을 운영할 수 있다.
3. 실패 요인 2 — STT 전사는 본질적으로 취약하다고 가정해야 한다
최고의 음성 인식 엔진도 틀린다. 전사 결과를 진실로 취급하지 않고, 오류가 발생할 위치를 예상해 정규화와 검증을 추가하는 태도가 필요하다.
3.1. 오류율과 반복되는 오류 패턴
-
오류율의 현실
- 공개 평가 데이터: 최첨단 전사 엔진도 알려진 평가 데이터셋에서는 단어 오류율(WER)이 약 4~6%다.
- 실제 통화: 잡음, 다양한 억양, 도메인 어휘가 있는 현실의 통화에서는 WER이 두 자릿수로 올라가는 경우가 흔하다.
- 설계 원칙: 오픈소스 STT를 미세 조정할 수는 있지만, 특정 엔진이 완벽하다고 가정하면 안 된다.
-
오류가 집중되는 데이터
- 고유명사와 전문용어: 브랜드명, 사람 이름, 업계 용어가 자주 틀린다.
- 전화번호: 숫자가 무작위로 빠지거나 다른 숫자로 대체된다.
- 주소: 긴 주소를 모을 때 일부가 통째로 누락될 수 있다.
- 잘못된 대체: 발음이 비슷한 단어가 엉뚱한 단어나 문자로 바뀐다.
3.2. 코드 스위칭과 음역이 전체 파이프라인을 망친다
-
문자 체계가 바뀐 영어
- 사례: 영어 문장을 힌디어에서 쓰는 문자 체계로 표기하면 실제 의미는 “Hello, how are you?”라도 STT가 다른 언어·문자로 받아들일 수 있다.
- 연쇄 오류: STT가 그 문자를 내놓으면 LLM도 같은 문자 체계로 응답을 생성하기 쉽고, TTS가 그 결과를 잘못 발음한다.
-
로마자로 적힌 힌디어
- 반대 사례: 힌디어를 라틴 문자 또는 로마자로 적으면 겉으로는 영어처럼 읽히지만 실제 언어는 힌디어다.
- 하류 계층의 혼란: 이런 입력도 STT·LLM·TTS 전체에 오류를 전파한다.
-
언어 범위
- 특정 언어의 문제가 아님: 아랍어, 만다린, 일본어를 포함해 사실상 어떤 언어에서도 같은 문제가 생길 수 있다.
- 독립성의 조건: 특정 STT 엔진을 바꾸더라도 에이전트가 안정적으로 동작하게 하려면 STT와 LLM 사이에 정규화 계층이 필요하다.
3.3. 동적 키워드 부스팅과 LLM 후처리
-
상태별 동적 키워드 부스팅
- 정적 목록의 한계: 통화 전체에 가능한 키워드를 모두 넣으면 STT 컨텍스트가 오염된다.
- 동적 방식: 현재 통화 상태에서 다음 답변에 필요하다고 판단되는 단어만 키워드 부스팅 목록에 추가한다.
- 효과: 통화의 단계마다 다른 키워드를 강조하면 필요한 구간의 정확도가 올라간다.
- 부작용 방지: 키워드가 너무 많으면 STT가 오히려 환각(hallucination)을 일으키기 시작한다.
-
도메인 컨텍스트를 가진 LLM 후처리
- 역할 분리: STT는 음성 표면형을 받아 적지만, LLM은 도메인 맥락을 알고 있다.
- 전화번호 사례: STT가 전화번호 안의 숫자 3을 문자 “E”처럼 내놓거나 숫자 1을 단어·문자 형태로 잘못 적어도, LLM 후처리가 전화번호 필드라는 맥락에서 바로 수정할 수 있다.
- 전달 계약: 어떤 STT를 사용하든 정리된 전사본을 동일한 형식으로 LLM에 넘긴다.
-
음역(Transliteration) 정규화
- 처리 방식: 다국어 출력은 먼저 LLM 또는 NLM 기반 음역 단계로 표준화하거나 신경망 음역 엔진을 사용한다.
- 구현 선택지: 오픈소스 음역 도구가 많으므로 특정 도구 하나를 선택해 자동화할 수 있다.
- 목표: STT 엔진이 내놓은 문자 체계에 LLM과 TTS가 끌려가지 않도록 깨끗한 표면형을 만들어 준다.
4. 실패 요인 3 — 음성 데이터 수집을 자유 대화가 아니라 타입이 있는 필드로 설계한다
음성 에이전트의 50~60%는 데이터 수집에서 심각하게 실패한다. 문제는 단순한 모델 지능 부족이 아니라, 음성 UX가 데이터 모델과 검증 규칙을 갖추지 못한 데 있다.
4.1. 전사문 해석에서 Typed Field로 관점을 바꾸기
-
나쁜 설계
- 자유로운 전사 전달: 통화 전사문을 LLM에 통째로 넣고 그 안에서 필요한 값이 무엇인지 추측하게 한다.
- 프롬프트 의존: 프롬프트를 몇 글자씩 바꾸면 모델이 마법처럼 지침을 잘 따를 것이라고 기대한다.
-
개발자에게 익숙한 설계 모델
- Python: 데이터 클래스(data class)처럼 필드와 타입을 먼저 선언한다.
- TypeScript: Pydantic 또는 Zod와 같은 스키마·검증 방식에서 아이디어를 가져온다.
- UI: 화면의 폼 필드처럼 사용자가 입력해야 하는 형태와 허용값을 미리 정한다.
-
정확도 변화
- 개방형 수집: 모양이 정해지지 않은 질문은 오류를 누적시킨다.
- 제약형 수집: 필드 타입, 허용값, 길이, 검증, 재확인을 정하면 데이터 수집 정확도가 30%에서 약 95%까지 올라간다.
4.2. 전화번호와 발음하기 어려운 이름
-
전화번호 필드
- 형태를 먼저 정하기: 전화번호를 전화번호 타입 필드로 선언하면 필요한 자릿수를 알 수 있다.
- 검증 추가: 허용되는 문자와 자릿수, 국가번호 같은 제약 조건을 검사한다.
- E가 들어온 경우: 전화번호 중간에 “E”가 나오면 숫자 3으로 추정해 사용자에게 확인하거나, 오류로 판단해 다시 말해 달라고 요청한다.
-
난발음 이름 필드
- 근본 문제: 사람이 여러 번 들어도 정확히 적기 힘든 이름은 STT도 거의 확실히 틀린다.
- 수집 방식: 이름을 하나의 열린 문장으로 받지 말고 문자 하나씩 철자(spelling)를 받는다.
- 안전장치: 각 문자를 확인하고 전체 철자를 다시 읽어 사용자에게 확인시킨다.
4.3. 상대적 날짜와 툴 콜링
-
날짜의 모호성
- 사례: 사용자가 “다음 주 수요일 8시”라고 말하면 오전 8시인지 오후 8시인지 알 수 없다.
- 추가 계산: 현재 날짜를 기준으로 실제 달력 날짜가 어느 날인지 계산해야 한다.
-
제약된 문제로 바꾸기
- 필드 선언: 입력이 날짜/시간(datetime) 필드라고 알고 있으면 모호한 문장을 구조화된 값으로 바꿀 수 있다.
- LLM과 툴의 역할: LLM이 의도를 해석하고, 툴 콜링이 현재 날짜·허용 형식·시간대 계산 같은 실무 작업을 수행한다.
- 확인 절차: 오전·오후가 불명확하면 사용자의 확인을 받아 최종 값을 확정한다.
-
평가의 단위
- 필드 단위 테스트: 전화번호, 이름, 날짜/시간 같은 각 필드를 단위 테스트로 취급한다.
- 반복 가능성: 필드 테스트가 통과하면 에이전트가 안정적이고 반복 가능한 성능을 보일 가능성이 높다.
- 불필요한 비용 제거: 필드 하나의 수집 오류를 찾기 위해 수백 개의 엔드투엔드(E2E) 에이전트 테스트를 돌릴 필요가 없다.
- 상태별 컨텍스트: 에이전트가 그 순간 수행하는 작업과 현재 상태를 작게 나눠 컨텍스트를 설계하면 미세 조정 없이도 95~97% 정확도에 도달할 수 있다.
5. 실패 요인 4 — LLM 출력과 TTS 사이에 정규화 계층을 둔다
LLM의 텍스트를 그대로 TTS에 보내면 마크다운, 이모지, 고유명사, 숫자, 이메일, 날짜가 말하기에 적합한 형태로 변환되지 않는다. TTS가 일부를 자동 처리하더라도 그 동작에 제품 전체를 의존해서는 안 된다.
5.1. 합성 전 기본 정리
-
직접 연결의 문제
- 취약한 경로: LLM 출력 → TTS라는 직결 구조는 오류가 났을 때 어느 계층에서 문제가 생겼는지 파악하기 어렵다.
- 정규화 경로: LLM 출력과 TTS 입력 사이에 제품이 관리하는 정규화 계층을 둔다.
-
반드시 제거할 표현
- 이모지: 음성으로 읽히면 안 되는 이모지를 합성 전에 제거한다.
- 마크다운: 굵게·목록·기호 같은 마크다운 표식을 자연스러운 발화 텍스트로 바꾼다.
- 프레임워크 설정: LiveKit이나 Pipecat은 몇 가지 플래그로 이 처리를 지원하지만, 직접 구축하거나 해당 프레임워크를 쓰지 않는다면 명시적으로 설정해야 한다.
5.2. 발음 사전과 발화 속도
-
커스텀 발음 사전
- 대상: 고유명사, 브랜드, 약어의 발음을 제품별로 지정한다.
- 적용 위치: LLM에서 TTS 출력으로 넘어가는 정규화 단계에 커스텀 사전을 적용한다.
-
엔티티별 느린 발화
- 속도 조절: 전화번호, 이메일, 이름처럼 글자 하나씩 발음해야 하는 값은 에이전트가 천천히 말하도록 한다.
- 권장 범위: 일반 속도의 0.8배 또는 0.7배 정도로 낮춰 해당 엔티티를 또렷하게 발음한다.
- 목표: 숫자·문자·기호를 뭉개지 않고 사용자가 받아 적을 수 있게 한다.
-
정규화해야 할 값
- 이메일 주소는 기호와 도메인을 말하기 좋은 표현으로 바꾼다.
- 통화 금액은 숫자와 통화 단위를 명확히 정리한다.
- 날짜는 연·월·일과 시간대를 혼동하지 않는 문장으로 바꾼다.
- TTS 엔진에 맡기지 않고 자체 계층에서 처리하면 나중에 다른 TTS로 교체해도 동작이 유지된다.
5.3. 발음 테스트를 제품의 첫 관문으로 삼기
-
개인 이름 테스트
- Venky B는 자신의 성을 “Balos Subramanion”으로 제시하며, 음성 에이전트가 이를 발음하지 못하면 이미 테스트에 실패한 것으로 본다.
- 일상적으로 철자를 하나씩 확인해야 하는 단어를 에이전트가 자주 틀린다는 점을 전제로 테스트한다.
-
회사명 테스트
- Plivo라는 회사명을 많은 엔진이 “Pivo”나 “Pleo”처럼 잘못 발음한다.
- 제품 파이프라인에서 발음을 통제하는 기능은 중요하며, 고객 대상 제품이라면 고객이 자신의 브랜드·고유명사 발음을 설정할 수 있게 해야 한다.
6. 실패 요인 5 — 턴 감지·끼어들기·백채널링을 조합형 파이프라인에서 제어한다
사용자가 말을 끝냈는지, 에이전트가 말을 시작해도 되는지, 사용자가 중간에 끼어들었을 때 발화를 멈춰야 하는지, “음”이나 “알겠어요” 같은 백채널링을 어떻게 처리할지는 별도의 턴테이킹 문제다.
6.1. 턴 감지(Turn Detection)
-
독립된 설계 영역
- 턴 감지는 STT·LLM·TTS 모델 선택만으로 해결되지 않는 별도 주제다.
- 사용자의 발화 종료를 너무 일찍 판단하면 말을 자르고, 너무 늦게 판단하면 TTFA가 길어지는 양쪽 실패가 생긴다.
-
시간 제약 속의 발표
- 해당 부분은 발표 시간이 부족해 슬라이드의 핵심 포인트를 빠르게 훑는 방식으로 마무리했다.
- 참석자에게 약 5초 동안 슬라이드를 볼 시간을 준 뒤, 더 이야기할 내용은 별도로 논의하자고 안내했다.
6.2. 끼어들기(Barge-in)와 백채널링(Backchanneling)
-
상호작용의 핵심
- Barge-in: 사용자가 에이전트가 말하는 도중 끼어들면 현재 TTS 출력을 멈추고 새 입력을 처리해야 한다.
- Backchanneling: 사용자의 짧은 맞장구나 확인 신호를 본문 발화와 구분해 자연스러운 대화 흐름을 유지해야 한다.
-
엔드투엔드 모델이 필수는 아님
- 음성 대 음성(Speech-to-Speech) 모델이 이러한 기능을 유행처럼 한 번에 처리해 주지만, 기능 자체를 구현하는 데 그 모델이 반드시 필요한 것은 아니다.
- STT, LLM, TTS, 턴 감지 계층을 조합한 Speech-to-Speech 파이프라인에서도 끼어들기와 백채널링을 구현할 수 있다.
- 핵심은 모델 이름이 아니라 발화 상태, 인터럽트 조건, 출력 중단, 재개 규칙을 명시하는 것이다.
주요 발언 모음
“개발 환경에서는 훌륭하게 들리지만, 개념 증명에서 프로덕션으로 가져가는 순간부터 문제가 발생하기 시작합니다.”
“음성 에이전트의 아이러니는, 빠르게 만들려면 말을 담당하는 LLM의 사고 기능을 거의 항상 꺼야 한다는 점입니다.”
“통화 전체에 키워드를 잔뜩 넣지 말고, 필요하다고 판단되는 순간 동적으로 추가해야 합니다.”
“질문하기 전에 원하는 데이터의 형태를 먼저 정하십시오.”
“LLM의 출력을 TTS에 직접 보내지 말고, 그 사이에 정규화 계층을 두십시오.”
“수십억 건의 통화가 발생하는 대규모 환경에서 실제로 관찰되는 현상을 기준으로 설계해야 합니다.”
핵심 데이터 & 수치
- 2011년: Plivo가 음성·SMS API 사업으로 시작한 시점이다.
- 약 14년: 개발자 API 플랫폼에서 AI 에이전트 전체 스택으로 확장해 온 기간이다.
- 월 10억 건 이상: Plivo가 전 세계에서 접하는 음성 통화 규모다.
- 90명: Plivo 팀 규모다.
- 5,000만 달러: 외부 VC가 아닌 수익 축적으로 은행에 보유한 자금이다.
- 550ms 미만: 플랫폼이 흔히 광고하는 TTFA 목표다.
- 750~1,200ms: 많은 실제 구현이 도달하는 TTFA 범위다.
- 1.2초 초과: 사용자가 전화를 끊기 시작하는 나쁜 성능 구간이다.
- 450~500ms: 프론티어 모델의 좋은 날 P50 TTFD다.
- 1.2~1.3초: 프론티어 모델에서 상승할 수 있는 P90·P95 지연이다.
- 12개월: Groq·Cerebras 전용 추론 용량을 미리 예약해야 할 수 있는 기간이다.
- 300ms 미만: 오픈소스 모델을 사용해 지속적으로 노릴 수 있는 응답 지연 목표다.
- 2.5~3배: 다국어 토큰 비옥도에서 Gemma 4가 Qwen 3.5보다 유리한 정도다.
- 30억~40억: 범용 MoE 모델의 실용적인 규모다.
- 80억~120억: 특정 산업 미세 조정을 고려할 때 권장되는 모델 규모다.
- 70~80%: 빠른 토큰 생성·지시 이행·툴 콜링이 갖춰졌을 때 미세 조정 없이 얻을 수 있는 실용 수준이다.
- 4~6% WER: 알려진 평가 데이터셋에서 최첨단 STT가 보이는 단어 오류율이다.
- 두 자릿수 WER: 잡음·억양·도메인 용어가 있는 실제 통화에서 흔한 오류율이다.
- 50~60%: 데이터 수집에서 심각한 실수를 보이는 AI 에이전트의 추정 비율이다.
- 30% → 95%: Typed Field 방식으로 데이터 수집 정확도가 개선되는 범위다.
- 95~97%: 상태별 컨텍스트 분리와 필드 단위 평가로 미세 조정 없이 도달한 정확도다.
- 0.7~0.8배: 이메일·전화번호·이름 같은 엔티티를 발음할 때 권장하는 느린 속도다.
핵심 용어 정리
- TTFA / TTFD: 사용자가 말을 멈춘 뒤 첫 음성 또는 첫 토큰이 나오기까지의 시간이다.
- STT: 음성을 텍스트로 변환하는 Speech-to-Text 계층이다.
- TTS: 텍스트를 음성으로 합성하는 Text-to-Speech 계층이다.
- WER: 전사 결과의 단어 오류율(Word Error Rate)이다.
- 동적 키워드 부스팅: 통화 전체가 아니라 현재 상태에 필요한 키워드만 STT에 임시로 강조하는 방식이다.
- Typed Field: 전화번호·날짜·이름처럼 타입과 제약 조건이 정의된 데이터 입력 필드다.
- Barge-in: 에이전트의 발화 도중 사용자가 끼어드는 인터럽트다.
- Backchanneling: “음”, “네”, “알겠습니다”처럼 대화 흐름을 확인하는 짧은 맞장구다.
- MoE: 여러 전문가 네트워크 중 일부를 선택해 계산하는 Mixture of Experts 구조다.
결론 및 시사점
- 보이스 AI 에이전트의 프로덕션 실패는 “더 똑똑한 모델 하나”로 해결되지 않으며, STT·LLM·TTS·턴 감지 사이의 명시적 계약이 필요하다.
- TTFA는 P50만 최적화하지 말고 P90·P95의 꼬리 지연과 사용자의 전화 끊기 비율까지 함께 봐야 한다.
- 음성 대화에서는 최신 LLM의 사고 기능을 켜는 것보다 300ms 안팎의 일관된 응답과 안정적인 툴 콜링이 중요할 수 있다.
- 다국어 제품은 Gemma 4처럼 토큰 비옥도가 낮은 모델, 문자 체계 정규화, 음역 단계를 함께 검토해야 한다.
- STT의 4~6% 오류율과 실제 통화의 두 자릿수 오류율을 전제로 고유명사·숫자·주소·코드 스위칭을 방어해야 한다.
- 통화 상태에 맞는 동적 키워드 부스팅은 모든 키워드를 영구적으로 넣는 정적 목록보다 정확도와 환각 방지에 유리하다.
- 전화번호·날짜·이름을 자유 대화에서 추출하지 말고 타입, 길이, 허용값, 검증, 재확인 규칙을 가진 필드로 수집해야 한다.
- 필드 단위 단위 테스트를 먼저 통과시키면 수백 개의 E2E 테스트로 뒤늦게 문제를 찾는 비용을 줄일 수 있다.
- LLM과 TTS 사이의 정규화 계층은 이모지·마크다운 제거, 숫자·이메일·날짜 변환, 커스텀 발음 사전, 속도 제어를 담당해야 한다.
- 고객 대상 플랫폼은 고객이 브랜드명과 고유명사의 발음을 직접 설정하도록 해야 하며, TTS 공급자를 바꿔도 동작하도록 정규화를 제품 소유 영역에 둬야 한다.
- 턴 감지와 Barge-in은 응답 속도와 대화 자연스러움을 동시에 좌우하므로 발화 종료·인터럽트·재개 상태를 별도로 설계해야 한다.
- 음성 대 음성 모델은 편리한 선택지일 뿐 필수 조건이 아니며, 조합형 STT·LLM·TTS 파이프라인에서도 같은 상호작용을 구현할 수 있다.
질의응답 및 마무리
발표 후 질의응답을 위한 시간이 남지 않아 현장 질문은 받지 못했다. 추가 질문은 별도로 논의하기로 안내했으며, 대규모 환경에서 수십억 건의 호출을 처리하며 관찰한 실패 패턴과 설계 원칙을 공유하는 것으로 마무리했다.
핵심 요약 (20줄)
- 개발 환경에서 잘 작동하는 보이스 AI 에이전트도 프로덕션에 배포하면 계층 사이의 작은 오류가 연쇄적으로 커진다.
- 전체 파이프라인은 STT, LLM, TTS, 턴 감지 계층을 오케스트레이션하는 구조로 시작한다.
- TTFA는 사용자가 말을 멈춘 뒤 에이전트가 첫 음성을 낼 때까지의 시간이며 사용자 체감 품질을 좌우한다.
- 550ms 미만이라는 광고와 달리 많은 구현은 750~1,200ms에 머물고 1.2초를 넘으면 이탈이 늘어난다.
- 음성 에이전트는 비용, 지능, 지연 시간 세 요소를 함께 최적화해야 한다.
- 사고 기능을 켠 최신 LLM은 지능을 높일 수 있지만 빠른 음성 응답을 어렵게 만든다.
- OpenAI, Claude, Gemini 같은 프론티어 모델은 P90·P95에서 1.2~1.3초까지 느려질 수 있다.
- Groq와 Cerebras의 전용 용량은 빠르지만 비싸고 12개월 전 예약이 필요할 수 있다.
- Qwen 3.5와 Gemma 4 같은 오픈소스 모델은 300ms 미만 목표에서 비용과 속도의 균형을 제공한다.
- 다국어 환경에서는 Gemma 4의 토큰 비옥도가 Qwen 3.5보다 2.5~3배 유리하다.
- 최고 수준 STT도 평가 데이터에서 4~6% WER을 내며 실제 통화에서는 오류율이 두 자릿수로 상승한다.
- 고유명사, 전문용어, 전화번호, 긴 주소, 코드 스위칭은 전사 오류가 집중되는 영역이다.
- 통화 상태에 필요한 키워드만 동적으로 부스팅하고 모든 키워드를 계속 넣어 환각을 유발하지 않아야 한다.
- LLM 후처리와 음역 정규화는 STT가 놓친 숫자와 문자 체계를 도메인 맥락에 맞게 교정한다.
- AI 에이전트의 50~60%는 데이터 수집에서 실패하므로 자유로운 전사 해석을 피해야 한다.
- 전화번호, 이름, 날짜를 Typed Field로 정의하면 데이터 수집 정확도가 30%에서 약 95%까지 높아진다.
- 필드별 단위 테스트와 상태별 컨텍스트 분리만으로 미세 조정 없이 95~97% 정확도를 달성할 수 있다.
- LLM 출력과 TTS 사이에는 이모지·마크다운·숫자·이메일·날짜를 정리하는 정규화 계층이 필요하다.
- 커스텀 발음 사전과 0.7~0.8배 속도 조절은 브랜드명·이름·전화번호를 명확하게 전달한다.
- 턴 감지, Barge-in, Backchanneling은 엔드투엔드 음성 모델 없이도 조합형 파이프라인에서 구현할 수 있다.
