Twilio Media Streams와 NVIDIA PersonaPlex를 연결하는 Node.js 브리지 서버를 구축해 약 70ms 지연으로 실시간 음성-음성 변환 전화를 구현하는 튜토리얼이다. PersonaPlex는 full-duplex Moshi 아키텍처 기반 대화 음성 모델로, 자연스러운 턴 테이킹과 음성 클로닝을 동시에 지원한다.
핵심 포인트- PersonaPlex는 3개의 오디오/텍스트 스트림을 동시 처리하는 full-duplex 모델로, 캐스케이드 파이프라인(음성 커스텀)과 하이브리드 시스템 프롬프트(행동 조건)를 결합한다.
- 브리지 서버는 Twilio의 8kHz narrow-band mulaw 스트림을 24kHz Ogg Opus로 업샘플링 후 PersonaPlex에 전달하고, 응답을 다시 8kHz로 다운샘플링한다.
- 바이너리 WebSocket 프로토콜로 PersonaPlex와 통신하며, 타입 프리픽스(0x00 핸드셰이크 / 0x01 오디오 / 0x02 텍스트)로 프레임을 구분한다.
- RTX 4090(24GB VRAM) 이상의 GPU가 필요하며, RunPod 기준 유휴 시 시간당 약 0.01달러 비용이 발생한다.
- VAD(음성 활동 감지기) 튜닝 없이는 무음 구간 노이즈가 응답을 과도하게 트리거하는 문제가 있다.
상세 정리- 아키텍처 개요: Twilio TwiML이 WebSocket 브리지 서버를 가리키고, 서버가 Twilio와 PersonaPlex 사이에서 프록시 역할을 한다.
- 오디오 변환: Twilio는 8kHz mulaw 포맷으로 오디오를 전송하고, 선형 보간으로 24kHz PCM으로 업샘플링 후 Ogg Opus 컨테이너에 패키징해 PersonaPlex에 보낸다.
- PersonaPlex 바이너리 프로토콜: 타입 바이트 프리픽스(0x00 핸드셰이크 확인, 0x01 오디오 데이터, 0x02 텍스트 토큰) 방식으로 프레임을 처리한다.
- BridgeSession: 각 통화 세션을 캡슐화하며, 음성 경로가 섞이지 않도록 파싱 상태를 추적한다.
- PersonaPlex 모델: Helium LLM 기반 경량 모델로 응답 품질보다 실시간 처리를 우선한다.
- GPU 요구사항: RTX 4090(24GB VRAM 최소) / vCPU 16(AMD EPYC) / 메모리 62GB. 모델 가중치 약 14GB, 초기 다운로드 5~10분 소요.
- 배포 시 주의: Trial Twilio 계정은 사전 검증된 번호만 사용 가능. WebSocket URL에서 쿼리 파라미터가 제거되므로 TwiML Parameter 엘리먼트로 대신 전달해야 한다.
- 비용 관리: 테스트 미사용 시 RunPod 인스턴스 종료 권장.
- 지연: 화자 전환 지연 약 70ms로 실시간 전화 통화에 적합한 수준.
왜 읽나Twilio 전화 인프라와 GPU 기반 실시간 음성 AI를 연결하고 싶은 백엔드/AI 엔지니어에게 단계별 구현 참고자료.