- 음성 기반 AI 시스템의 지연시간을 400ms 수준으로 줄인 자체 구축형 음성 에이전트 개발 사례를 다룸
-
STT, LLM, TTS를 실시간 파이프라인으로 연결해 기존 상용 플랫폼(Vapi 등)보다 2배 빠른 응답 속도 달성
-
Deepgram Flux로 발화 감지와 전환을 처리하고, Groq의 llama-3.3-70b 모델을 사용해 첫 토큰 생성 시간을 대폭 단축
-
지리적 배치와 네트워크 최적화를 통해 EU 지역 배포 시 지연시간을 절반 이하로 감소
- 음성 에이전트의 핵심은 실시간 오케스트레이션과 파이프라인 설계이며, 이를 직접 구현하면 성능 병목을 명확히 파악할 수 있음
음성 에이전트 구축 배경
- 소비재 대기업을 위한 음성 에이전트 프로토타입 개발 경험을 바탕으로, 상용 플랫폼의 복잡성을 직접 다루기 위해 자체 구축 시도
- ElevenLabs와 Vapi 같은 플랫폼은 편리하지만, 내부 동작을 이해하기 어렵고 세밀한 지연시간 제어가 불가능함
- 목표는 Vapi 수준의 성능을 직접 구현하는 것이었으며, 하루와 약 100달러의 API 크레딧으로 실현
음성 에이전트의 복잡성
- 텍스트 기반 챗봇과 달리, 음성은 실시간 전환 관리(turn-taking) 가 필요
- 사용자가 말하는 순간 시스템은 즉시 발화를 중단하고, 멈추면 빠르게 응답을 시작해야 함
- 단순한 음성 감지(VAD)만으로는 발화 종료를 정확히 판단하기 어렵고, 지연·중첩 발화·불필요한 침묵이 발생
1차 구현: VAD 기반 테스트
-
FastAPI 서버와 Twilio WebSocket을 이용해 μ-law 오디오 스트림을 수신
-
Silero VAD로 음성 존재 여부를 판단하고, 발화 종료 시 미리 녹음된 WAV 파일을 재생
- 단순하지만 즉각적인 반응성과 자연스러운 대화 흐름을 확인할 수 있었음
- 이 단계에서 지연시간의 하한선을 측정하는 기준 확보
2차 구현: Deepgram Flux와 실시간 파이프라인
-
Deepgram Flux를 도입해 스트리밍 전사와 턴 감지를 통합
- Flux가 발화 종료를 감지하면 다음 순서로 처리
- 전사 결과와 대화 이력을 LLM에 전달
- 첫 토큰이 생성되는 즉시 TTS(WebSocket) 로 스트리밍
- 생성된 오디오를 Twilio로 실시간 전송
-
TTS 연결을 사전 유지(warm pool) 해 약 300ms의 지연을 절감
- 사용자가 말을 시작하면 LLM·TTS·오디오 전송을 즉시 취소해 자연스러운 중단 처리 구현
지연시간 측정과 지역 배포
- 터키 현지에서 로컬 실행 시 평균 1.6~1.7초 지연 발생
-
Railway EU 리전에 배포하고 Twilio·Deepgram·ElevenLabs를 EU 리전으로 맞추자
- 평균 690ms(총 790ms) 로 단축, Vapi 대비 약 50ms 빠름
- 지연 감소로 대화 반응성이 크게 향상, 발화 중단 처리도 매끄러워짐
모델 선택과 성능 향상
- 초기에는 gpt-4o-mini 사용, 이후 Groq llama-3.3-70b로 교체
- 테스트 결과 Groq 모델의 첫 토큰 생성 시간(TTFT) 이 OpenAI 대비 최대 3배 빠름
- 평균 400ms 이하의 종단 간 지연 달성, 첫 오디오가 500ms 이내 도착
- 이 수준에서는 사람보다 에이전트가 더 빨리 반응하는 체감
주요 기술적 교훈
-
지연시간 최적화는 발화 종료부터 첫 음성 출력까지의 전체 경로 관리가 핵심
-
TTFT가 전체 지연의 절반 이상을 차지하므로, 저지연 모델 선택이 중요
-
STT→LLM→TTS를 순차 처리하지 않고 스트리밍 파이프라인화해야 함
-
발화 중단 시 전 구성요소를 즉시 취소해야 자연스러운 대화 유지
-
서비스 간 지리적 근접성이 지연에 결정적 영향을 미침
상용 플랫폼과의 비교
- Vapi·ElevenLabs는 API, 안정성, 관찰성 등 부가 기능을 제공하므로 대부분의 팀에는 여전히 유용
- 그러나 직접 구축을 통해 실제 병목과 파라미터 의미를 이해할 수 있으며,
특정 요구에 맞춘 맞춤형 오케스트레이션이 가능
- 음성 시스템은 결국 오케스트레이션 문제이며, 구조를 명확히 보면 해결 가능한 엔지니어링 과제임
소스 코드
- 전체 구현은 GitHub에서 공개됨: github.com/NickTikhonov/shuo