Twilio Conversation Relay와 Python(FastAPI)을 사용해 실시간 AI 음성 에이전트를 구축하는 튜토리얼이다. WebSocket으로 발신자 음성을 STT(Deepgram Flux)로 전사하고 OpenAI로 응답을 생성한 뒤 TTS(ElevenLabs)로 재생하는 전체 파이프라인을 구현한다. 가상 항공사를 예제로 비행 상태 조회 등 OpenAI function calling까지 다룬다.
핵심 포인트- FastAPI를 웹 프레임워크로 사용해 TwiML 엔드포인트와 WebSocket 핸들러를 구현, 비동기 음성 스트리밍 파이프라인을 구성한다.
- Conversation Relay가 STT-WebSocket-TTS 파이프라인 전체를 추상화해 개발자가 AI 로직에만 집중할 수 있다.
- Deepgram nova-3-general(Flux) 모델로 STT를 처리해 발화 종료 감지 지연을 200~600ms 줄이고 false interruption을 약 30% 감소시킨다.
- OpenAI function calling으로 외부 데이터(비행 상태 등)를 조회한 뒤 자연스럽게 응답을 이어가는 도구 호출 흐름을 구현한다.
- ElevenLabs TTS와 eotThreshold, ignoreBackchannel 설정으로 자연스러운 음성 대화 흐름을 완성한다.
상세 정리- 아키텍처 흐름: 발신자 전화 → Twilio TwiML 요청 → 서버가 ConversationRelay 동사 반환 → WebSocket 연결 → STT 전사 → OpenAI 추론 → TTS 재생.
- 필수 스택: Python 3.11+, FastAPI, OpenAI Python 클라이언트, Twilio Python 헬퍼, Deepgram Flux, ElevenLabs, ngrok.
- TwiML 설정: FastAPI 라우트에서 ConversationRelay 동사를 반환하며 domain, welcomeGreeting, STT/TTS 제공자를 지정한다.
- WebSocket 핸들러: FastAPI의 비동기 WebSocket으로 setup/prompt/interrupt/error 4가지 메시지 유형을 처리하고 OpenAI 스트리밍 응답을 토큰 단위로 전달한다.
- 음성 최적화 시스템 프롬프트: 마크다운/이모지 금지, 숫자 철자 표기, 응답 2~3문장 제한으로 TTS 품질을 높인다.
- 도구 호출 흐름: 모델이 tool_calls를 반환하면 함수 실행 후 결과를 담은 두 번째 스트림 호출로 자연스러운 응답을 완성한다.
- 성능: Conversation Relay 응답 지연 중앙값 0.5초 미만, Deepgram Flux로 false interruption 약 30% 감소.
- JavaScript, C#, PHP 버전도 별도 제공되며 동일한 Conversation Relay 아키텍처를 각 언어로 구현한다.
왜 읽나Python/FastAPI 스택으로 실시간 AI 음성 에이전트를 구축하려는 개발자에게 STT-WebSocket-LLM-TTS 전체 파이프라인을 따라갈 수 있는 구현 레퍼런스다.