500ms 이하 지연시간의 음성 에이전트를 직접 구축한 과정

6 hours ago 2

  • 음성 기반 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

Read Entire Article