La détection de l’activité vocale (VAD) est une fonctionnalité de Realtime API qui permet de détecter automatiquement quand l’utilisateur commence ou cesse de parler.
Elle est activée par défaut dans les sessions Realtime de parole à parole, mais reste facultative et peut être désactivée.
Dans les sessions Realtime de transcription, la prise en charge de la détection des tours de parole dépend du modèle de transcription. Les modèles qui prennent en charge la VAD utilisent server_vad par défaut, tandis que gpt-realtime-whisper exige que la détection des tours de parole soit omise ou définie sur null.
Vue d’ensemble
Lorsque la VAD est activée, l’audio est automatiquement découpé en segments et Realtime API envoie des événements pour indiquer quand l’utilisateur commence ou cesse de parler :
input_audio_buffer.speech_started: début d’un tour de paroleinput_audio_buffer.speech_stopped: fin d’un tour de parole
Vous pouvez utiliser ces événements pour gérer les tours de parole dans votre application. Par exemple, ils permettent de gérer l’état de la conversation ou de traiter les transcriptions par segments.
Vous pouvez configurer la VAD avec l’événement client session.update en définissant session.audio.input.turn_detection.
La VAD propose deux modes :
server_vad: découpe automatiquement l’audio en segments en fonction des périodes de silence.semantic_vad: découpe l’audio en segments lorsque le modèle estime, d’après les mots prononcés par l’utilisateur, que celui-ci a terminé son énoncé.
Pour les sessions et les modèles qui prennent en charge la VAD, la valeur par défaut est server_vad.
Consultez les sections suivantes pour en savoir plus sur les différents modes.
VAD côté serveur
La VAD côté serveur est le mode par défaut pour les sessions de parole à parole, ainsi que pour les sessions de transcription avec les modèles qui prennent en charge la détection des tours de parole. Elle utilise les périodes de silence pour découper automatiquement l’audio en segments.
Vous pouvez ajuster les propriétés suivantes pour affiner les réglages de la VAD :
threshold: seuil d’activation (de 0 à 1). Un seuil plus élevé nécessite un volume sonore plus important pour activer le modèle et peut donc donner de meilleurs résultats dans les environnements bruyants.prefix_padding_ms: durée d’audio (en millisecondes) à inclure avant le début de parole détecté par la VAD.silence_duration_ms: durée de silence (en millisecondes) nécessaire pour détecter la fin de la parole. Des valeurs plus courtes permettent de détecter les tours de parole plus rapidement.
Voici un exemple de configuration de la 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
}
}
}
}
}
Utilisez le même champ session.audio.input.turn_detection dans les sessions de transcription. Pour gpt-realtime-whisper, omettez la détection des tours de parole ou définissez-la sur null.
Les champs create_response et interrupt_response sont utilisés uniquement dans les conversations de parole à parole. Dans les sessions de transcription, la VAD contrôle seulement le découpage de l’audio en segments.
VAD sémantique
La VAD sémantique est un nouveau mode qui utilise un classificateur sémantique pour détecter quand l’utilisateur a fini de parler, d’après les mots qu’il a prononcés. Ce classificateur attribue un score à l’audio d’entrée en fonction de la probabilité que l’utilisateur ait fini de parler. Lorsque cette probabilité est faible, le modèle attend l’expiration d’un délai ; lorsqu’elle est élevée, il n’a pas besoin d’attendre. Par exemple, si l’utilisateur laisse sa phrase en suspens sur un « euh… », le délai d’attente sera plus long que pour une affirmation clairement terminée.
Avec ce mode, le modèle risque moins d’interrompre l’utilisateur pendant une conversation de parole à parole ou de découper une transcription avant que l’utilisateur ait fini de parler.
Vous pouvez activer la VAD sémantique en définissant session.audio.input.turn_detection.type sur semantic_vad.
Voici comment la configurer :
{
"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
}
}
}
}
}
Le même champ session.audio.input.turn_detection s’applique aux sessions de transcription. Les champs create_response et interrupt_response sont réservés aux conversations.
La propriété facultative eagerness permet de contrôler la propension du modèle à interrompre l’utilisateur en ajustant le délai d’attente maximal. En mode transcription, même si le modèle ne répond pas, cette propriété influe sur le découpage de l’audio en segments.
autoest la valeur par défaut et équivaut àmedium.lowlaisse à l’utilisateur le temps de s’exprimer.highdécoupe l’audio en segments dès que possible.
Si vous souhaitez que le modèle réponde plus souvent en mode conversation ou renvoie plus rapidement les événements de transcription en mode transcription, vous pouvez définir eagerness sur high.
À l’inverse, si vous souhaitez laisser l’utilisateur parler sans interruption en mode conversation ou obtenir des segments de transcription plus longs en mode transcription, vous pouvez définir eagerness sur low.