음성 활동 감지
음성 활동 감지 (Voice activity detection, VAD)
출처: 문서
Voice activity detection(VAD)은 Realtime API에서 사용할 수 있는 기능으로, 사용자가 말하기 시작했는지 또는 멈췄는지를 자동으로 감지해요. speech-to-speech Realtime 세션에서는 기본적으로 활성화되지만, 선택 사항이라 끌 수도 있어요. transcription Realtime 세션에서는 턴 감지(turn detection) 지원 여부가 transcription 모델에 따라 달라져요. 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: 음성 턴의 끝
이 이벤트들을 사용해 애플리케이션에서 음성 턴을 처리할 수 있어요. 예를 들어 대화 상태를 관리하거나, 전사를 청크 단위로 처리하는 데 사용할 수 있어요.
VAD는 session.update 클라이언트 이벤트에서 session.audio.input.turn_detection을 설정해 구성할 수 있어요.
VAD에는 두 가지 모드가 있어요:
server_vad: 침묵 구간을 기준으로 오디오를 자동으로 청크로 나눠요.semantic_vad: 사용자가 말한 단어를 바탕으로 모델이 발화를 마쳤다고 판단할 때 오디오를 청크로 나눠요.
VAD를 지원하는 세션과 모델의 기본값은 server_vad예요.
아래에서 각 모드에 대해 더 알아보세요.
Server VAD
Server VAD는 speech-to-speech 세션과 턴 감지를 지원하는 transcription 세션의 기본 모드예요. 침묵 구간을 사용해 오디오를 자동으로 청크로 나눠요.
다음 속성을 조정해 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
}
}
}
}
}
transcription 세션에서도 동일한 session.audio.input.turn_detection 필드를 사용해요. gpt-live-transcribe와 gpt-realtime-whisper에서는 턴 감지를 생략하거나 null로 설정해요.
create_response와 interrupt_response 필드는 speech-to-speech 대화에서만 사용돼요. transcription 세션에서는 VAD가 오디오가 청크로 나뉘는 방식만 제어해요.
Semantic VAD
Semantic VAD는 사용자가 발화한 단어를 바탕으로 말하기를 마쳤는지 감지하는 시맨틱 분류기(semantic classifier)를 사용하는 새로운 모드예요. 이 분류기는 사용자가 말을 다 했을 확률에 따라 입력 오디오에 점수를 매겨요. 확률이 낮으면 모델이 타임아웃을 기다리고, 확률이 높으면 기다릴 필요가 없어요. 예를 들어 발화가 흐려지는(끝이 흐릿한) 사용자 오디오는 명확한 문장보다 긴 타임아웃을 초래해요.
이 모드에서는 speech-to-speech 대화 중 모델이 사용자를 덜 방해하며, 사용자가 말을 다 하기 전에 전사를 청크로 나눌 가능성도 낮아요.
Semantic VAD는 session.audio.input.turn_detection.type을 semantic_vad로 설정하면 활성화돼요.
다음과 같이 구성할 수 있어요:
{
"type": "session.update",
"session": {
"type": "realtime",
"audio": {
"input": {
"turn_detection": {
"type": "semantic_vad",
"eagerness": "low" | "medium" | "high" | "auto", // optional
"create_response": true, // only in conversation mode
"interrupt_response": true, // only in conversation mode
}
}
}
}
}
동일한 session.audio.input.turn_detection 필드가 VAD를 지원하는 모델의 transcription 세션에도 적용돼요. create_response와 interrupt_response 필드는 대화 모드 전용이에요.
선택 사항인 eagerness 속성은 모델이 사용자를 방해하려는 성향(최대 대기 타임아웃 튜닝)을 제어하는 방법이에요. transcription 모드에서는 모델이 응답하지 않더라도 오디오가 청크로 나뉘는 방식에 영향을 줘요.
auto는 기본값이며medium과 동일해요.low는 사용자가 말할 시간을 충분히 주는 설정이에요.high는 가능한 한 빨리 오디오를 청크로 나눠요.
대화 모드에서 모델이 더 자주 응답하길 원하거나, transcription 모드에서 전사 이벤트를 더 빨리 받고 싶다면 eagerness를 high로 설정해요. 반대로 대화 모드에서 사용자가 방해받지 않고 말하길 원하거나, transcription 모드에서 더 큰 전사 청크를 원한다면 eagerness를 low로 설정할 수 있어요.