음성 활동 감지(VAD)는 사용자가 말을 시작하거나 멈추는 시점을 자동으로 감지하는 Realtime API 기능입니다.
Realtime API의 음성-음성 변환 세션에서는 VAD가 기본적으로 켜져 있으며 필요에 따라 끌 수 있습니다.
Realtime API의 전사 세션에서는 전사 모델에 따라 발화 구간 감지 지원 여부가 달라집니다. VAD를 지원하는 모델의 기본값은 server_vad입니다. gpt-live-transcribe와 gpt-realtime-whisper에서는 발화 구간 감지 설정을 생략하거나 null로 설정해야 합니다. 이 두 모델에서는 각 발화 구간을 종료하려면 input_audio_buffer.commit을 전송하세요.
개요
VAD를 켜면 오디오가 자동으로 구간별로 나뉘고, Realtime API가 다음 이벤트를 전송해 사용자가 말을 시작하거나 멈춘 시점을 알립니다.
input_audio_buffer.speech_started: 발화 구간 시작input_audio_buffer.speech_stopped: 발화 구간 종료
애플리케이션에서는 이 이벤트를 사용해 발화 구간을 처리할 수 있습니다. 예를 들어 대화 상태를 관리하거나 전사 결과를 구간별로 처리할 수 있습니다.
session.update 클라이언트 이벤트에서 session.audio.input.turn_detection 값을 지정해 VAD를 설정할 수 있습니다.
VAD에는 두 가지 모드가 있습니다.
server_vad: 무음 구간을 기준으로 오디오를 자동으로 나눕니다.semantic_vad: 사용자가 말한 내용을 바탕으로 모델이 발화가 끝났다고 판단하면 오디오를 나눕니다.
VAD를 지원하는 세션과 모델의 기본값은 server_vad입니다.
아래에서 각 모드의 동작을 자세히 살펴보세요.
서버 VAD
서버 VAD는 음성-음성 변환 세션의 기본 모드입니다. 발화 구간 감지를 지원하는 모델의 전사 세션에서도 기본 모드로 사용됩니다. 이 모드에서는 무음 구간을 기준으로 오디오를 자동으로 나눕니다.
다음 속성으로 VAD 설정을 세밀하게 조정할 수 있습니다.
threshold: 음성 감지 임계값입니다(0~1). 임계값을 높이면 더 큰 소리가 들어와야 모델이 음성을 감지하므로 주변 소음이 많은 환경에서 성능이 더 좋을 수 있습니다.prefix_padding_ms: VAD가 음성을 감지한 시점보다 앞선 오디오를 얼마나 포함할지 밀리초 단위로 지정합니다.silence_duration_ms: 발화가 끝났다고 판단하는 데 필요한 무음 시간(밀리초)입니다. 값이 작을수록 발화 구간의 끝을 더 빨리 감지합니다.
다음은 VAD 설정 예시입니다.
{
"type": "session.update",
"session": {
"type": "realtime",
"audio": {
"input": {
"turn_detection": {
"type": "server_vad",
"threshold": 0.5,
"prefix_padding_ms": 300,
"silence_duration_ms": 500,
"create_response": true, // only in conversation mode
"interrupt_response": true, // only in conversation mode
},
},
},
},
}
전사 세션에서도 같은 session.audio.input.turn_detection 필드를 사용하세요. gpt-live-transcribe와 gpt-realtime-whisper에서는 발화 구간 감지 설정을 생략하거나 null로 설정하세요.
create_response와 interrupt_response 필드는 음성-음성 변환 대화에서만 사용합니다. 전사 세션에서 VAD는 오디오를 구간별로 나누는 방식만 제어합니다.
의미 기반 VAD
의미 기반 VAD는 의미 분류기를 사용해 사용자가 말한 내용을 바탕으로 발화가 끝난 시점을 감지하는 새로운 모드입니다. 분류기는 사용자가 말을 마쳤을 확률을 기준으로 입력 오디오에 점수를 매깁니다. 확률이 낮으면 모델은 대기 시간이 끝날 때까지 기다리고, 높으면 기다릴 필요가 없습니다. 예를 들어 사용자가 말끝을 흐리면 문장을 분명하게 끝냈을 때보다 대기 시간이 길어집니다.
이 모드를 사용하면 음성-음성 변환 대화에서 모델이 사용자의 말을 중간에 끊거나 사용자가 말을 마치기 전에 전사 결과를 나눌 가능성이 줄어듭니다.
session.audio.input.turn_detection.type을 semantic_vad로 설정하면 의미 기반 VAD를 켤 수 있습니다.
설정 예시는 다음과 같습니다.
{
"type": "session.update",
"session": {
"type": "realtime",
"audio": {
"input": {
"turn_detection": {
"type": "semantic_vad",
"eagerness": "auto", // optional
"create_response": true, // only in conversation mode
"interrupt_response": true, // only in conversation mode
},
},
},
},
}
VAD를 지원하는 모델의 전사 세션에서도 같은 session.audio.input.turn_detection 필드를 사용합니다. create_response와 interrupt_response 필드는 대화 모드 전용입니다.
선택 사항인 eagerness 속성은 최대 대기 시간을 조정해 모델이 사용자 발화에 얼마나 빨리 개입할지 제어합니다. 전사 모드에서는 모델이 응답하지 않아도 이 설정에 따라 오디오를 나누는 시점이 달라집니다.
auto는 기본값이며medium과 동일하게 동작합니다.low로 설정하면 사용자가 여유 있게 말할 수 있습니다.high로 설정하면 오디오를 가능한 한 빨리 나눕니다.
대화 모드에서 모델이 더 자주 응답하게 하거나 전사 모드에서 전사 이벤트를 더 빨리 받으려면 eagerness를 high로 설정하세요.
대화 모드에서 사용자가 방해받지 않고 계속 말할 수 있게 하거나 전사 모드에서 더 긴 구간의 전사 결과를 받으려면 eagerness를 low로 설정하세요.