핵심 요약
OpenAI Realtime API와 Whisper 4(2026-02 출시)·고품질 TTS를 결합하면 음성-텍스트-LLM-텍스트-음성 사이클이 P50 700ms대까지 떨어진다. 사람 대화에 가까운 음성 챗봇 만든 경험을 정리.
1. 두 가지 접근
| 접근 | 구조 | P50 | 비용/분 | 제약 |
|---|---|---|---|---|
| Pipeline (Whisper → LLM → TTS) | 3단계 직렬 | 1.2~2s | $0.06 | 인터럽트 어려움 |
| Realtime API (Speech-to-Speech) | 단일 모델 | 0.4~0.8s | $0.24 | 모델·기능 제약 |
2. Pipeline 패턴 — 유연함
// 1) Whisper STT (스트리밍)
const stt = await openai.audio.transcriptions.create({
file: audioStream,
model: 'whisper-4',
response_format: 'verbose_json',
stream: true,
})
// 2) LLM (스트리밍)
const completion = await openai.chat.completions.create({
model: 'gpt-5.5',
messages,
stream: true,
})
// 3) TTS (스트리밍)
for await (const sentence of bufferBySentence(completion)) {
const audio = await openai.audio.speech.create({
model: 'tts-4-hd',
voice: 'alloy',
input: sentence,
response_format: 'opus',
})
pipeToClient(audio)
}
3. Realtime API 패턴 — 빠름
const ws = new WebSocket('wss://api.openai.com/v1/realtime?model=gpt-realtime-4', {
headers: { Authorization: 'Bearer ' + key },
})
ws.send(JSON.stringify({
type: 'session.update',
session: {
modalities: ['audio', 'text'],
voice: 'alloy',
input_audio_format: 'pcm16',
output_audio_format: 'pcm16',
turn_detection: { type: 'server_vad', threshold: 0.6 },
},
}))
// 클라이언트가 마이크 PCM을 그대로 보냄
4. 지연시간 분해 — Pipeline 1.4s 케이스
| 구간 | 시간 |
|---|---|
| 마이크 → 서버 (WebRTC) | 40ms |
| VAD 종료 감지 | 250ms |
| Whisper 4 (한국어 5초 음성) | 320ms |
| LLM 첫 토큰 | 380ms |
| TTS 첫 청크 | 290ms |
| 네트워크 응답 | 40ms |
VAD와 TTS가 절반. 첫 sentence 끝나자마자 보내면 P50 0.9s 가능.
5. 인터럽트 처리
사용자가 봇이 말하는 중에 끼어드는 게 자연스러움 핵심. Realtime API는 input_audio_buffer.speech_started 이벤트로 자동 처리. Pipeline은 직접 구현:
if (vad.speechStarted) {
await tts.cancel()
await llm.abort()
startNewTurn()
}
6. 한국어 품질 (2026-05)
- Whisper 4: 한국어 WER 4.2% (3.x 7.8%). 전문 용어·이름 여전히 약함.
- TTS-4-HD: 한국어 자연스러움 상위 수준. 감정 컨트롤 옵션.
- Realtime API: 영어 우선. 한국어는 일부 표현 어색.
7. 비용 실측 — 10분 통화
| 구성 | 비용 |
|---|---|
| Whisper 4 (10분 입력) | $0.06 |
| GPT-5.5 (평균 8K tokens) | $0.16 |
| TTS-4-HD (출력 7,000자) | $0.18 |
| 합계 Pipeline | $0.40 |
| Realtime API 10분 | $2.40 |
대량 처리는 Pipeline, 고가치·짧은 인터랙션은 Realtime.
8. WebRTC vs WebSocket
- WebRTC: 패킷 손실에 강함, P50 -100ms, 구현 복잡
- WebSocket + opus: 단순, 안정망에선 동등 품질
모바일 등 네트워크 변동 큰 환경은 WebRTC. 회사 내부망은 WebSocket으로 충분.
9. 안전·법규
- 녹음 동의 고지 (한국 통신비밀보호법)
- 음성·텍스트 보관 정책 명문화
- 의료·금융 상담엔 보이스 인증 별도 (음성 위조 대비)
10. 흔한 함정
- VAD 임계값 너무 낮음: 짧은 침묵을 발화로 인식 → 봇이 자꾸 끼어듦
- echo cancellation 미적용: 봇 음성이 마이크로 들어가 무한 루프
- TTS를 한 번에 다 생성: 첫 응답까지 5초+. 문장 단위 스트리밍 필수
참고
- platform.openai.com/docs/guides/realtime
- github.com/openai/openai-realtime-api-beta

댓글 0