피드로 돌아가기
Killing Voice AI Lag: The Pre-Warming Trick
Dev.toDev.to
Frontend

Killing Voice AI Lag: The Pre-Warming Trick

intervu.dev가 TTS 재생 중 WebSocket 사전 연결로 음성 AI 응답 후 마이크 활성화 지연을 850ms에서 400ms 이하로 단축

ANBMZ L2026년 3월 26일7intermediate

Context

intervu.dev의 음성 인터뷰 턴테이킹 루프에서 TTS 재생 완료 후 마이크 WebSocket 연결을 새로 열 때 DNS 해석, TCP 핸드셰이크, WebSocket 업그레이드 핸드셰이크 오버헤드로 인해 약 800~900ms의 지연이 발생했다. 이러한 지연으로 인해 AI 응답과 사용자 음성 입력 사이의 응답성이 떨어져 대화의 자연스러움이 훼손되었다.

Technical Solution

  • TTS 재생 시작 시점에 onTTSPlaybackStart() 콜백을 통해 prewarmMicConnection() 함수 즉시 실행
  • prewarmMicConnection()에서 마이크 활성화 없이 WebSocket 연결만 미리 수립하여 micConnectionReady 플래그로 연결 상태 추적
  • TTS 재생 종료 시점에 onTTSPlaybackEnd()에서 micConnectionReady 상태 확인 후 연결이 준비된 경우 즉시 마이크 활성화, 미완료 시 온디맨드 연결 폴백
  • 턴마다 새로운 WebSocket 연결을 개별 생성하여 상태 누수 방지 및 서버 로직 단순화
  • 서버 백엔드의 유휴 타임아웃을 30초로 설정하여 TTS 음성 길이(수 초)보다 충분히 길게 구성

Impact

  • TTS 종료 이벤트부터 백엔드 도착 첫 오디오 청크까지 측정 시간 기준으로 약 850ms에서 400ms 이하로 단축
  • 네트워크 상태가 양호한 경우 50~80ms까지 단축
  • AI 음성이 1초 이상인 경우 사전 연결이 거의 항상 완료되어 400ms 최악의 경우는 1초 미만 음성에서만 발생

Key Takeaway

AI 음성 출력과 사용자 음성 입력이 교대로 발생하는 모든 음성 AI 애플리케이션에서 재생 윈도우는 다음 사용자 액션을 위한 리소스(WebSocket 연결, 트랜스크립션 세션, 상태 사전로드)를 사전에 준비하는 자연스러운 기회이며, 턴테이킹 핸드오프 지점의 지연이 발생할 때 이 패턴을 적용하면 지연을 크게 줄일 수 있다.


음성 턴테이킹 인터페이스를 개발하는 엔지니어는 상대방 음성 출력이 진행되는 동안 다음 입력 처리를 위한 WebSocket 연결, 세션 초기화, 또는 컨텍스트 로드를 사전에 시작하면, 사용자 발화 시작 시점에 필요한 리소스가 이미 준비된 상태로 핸드오프 지연을 50ms 수준까지 단축할 수 있다.

원문 읽기
Killing Voice AI Lag: The Pre-Warming Trick | Devpick