VAD : détection automatique de la parole
Comprendre la détection de tour de parole
Dans une conversation vocale, le système doit savoir quand l’utilisateur commence à parler et quand il s’arrête. C’est le rôle du VAD (Voice Activity Detection). L’API Voice Agent propose un VAD côté serveur (server_vad) qui analyse le flux audio en temps réel pour détecter ces transitions.
Configuration du VAD
Le VAD se configure dans l’objet turn_detection de votre session.update :
{
"type": "session.update",
"session": {
"turn_detection": {
"type": "server_vad",
"threshold": 0.85,
"silence_duration_ms": 500,
"prefix_padding_ms": 333
}
}
}
Les trois paramètres clés
threshold (seuil de détection)
Valeur entre 0 et 1 qui détermine la sensibilité de la détection vocale. Plus la valeur est élevée, plus le système exige un signal vocal fort pour déclencher la détection :
- 0.3 - 0.5 : très sensible, capte les chuchotements et les bruits ambiants (risque de faux positifs)
- 0.6 - 0.8 : sensibilité moyenne, bon pour les environnements calmes
- 0.8 - 0.95 : peu sensible, nécessite une voix claire (recommandé pour les environnements bruyants)
La valeur par défaut est 0.5. Pour une utilisation en production, une valeur entre 0.8 et 0.9 est généralement préférable.
silence_duration_ms (durée de silence)
Nombre de millisecondes de silence nécessaires pour considérer que l’utilisateur a fini de parler. Ce paramètre influence directement la réactivité de l’agent :
- 200-300 ms : réponse très rapide, mais risque de couper l’utilisateur en pleine phrase (lors d’une pause de réflexion)
- 400-600 ms : bon compromis entre réactivité et tolérance aux pauses naturelles
- 800-1500 ms : très tolérant, attend que l’utilisateur ait clairement terminé
La valeur par défaut est 300 ms. Pour le français, où les pauses naturelles sont fréquentes, une valeur de 500-700 ms est recommandée.
prefix_padding_ms (tampon de début)
Nombre de millisecondes d’audio conservées avant le début détecté de la parole. Cela évite de perdre le début du premier mot prononcé :
- 100-200 ms : minimum pour ne pas tronquer les consonnes initiales
- 300-400 ms : valeur confortable pour capturer l’intégralité du premier mot
- 500+ ms : conserve un contexte large avant la parole
La valeur par défaut est 200 ms. Une valeur de 333 ms est généralement suffisante.
Événements VAD
Lorsque le VAD détecte un changement, le serveur envoie des événements spécifiques :
speech_started
{
"type": "input_audio_buffer.speech_started",
"audio_start_ms": 2450
}
Indique que la parole a été détectée. Le champ audio_start_ms indique le moment dans le flux audio où la parole commence.
speech_stopped
{
"type": "input_audio_buffer.speech_stopped",
"audio_end_ms": 5200
}
Indique que le silence a été détecté après la parole. Le champ audio_end_ms indique la fin de la parole. À ce moment, le serveur valide automatiquement le buffer audio et lance la génération de la réponse.
Mode sans VAD (mode manuel)
Si vous préférez gérer la détection de parole vous-même (par exemple avec un bouton “push-to-talk”), vous pouvez désactiver le VAD :
{
"type": "session.update",
"session": {
"turn_detection": null
}
}
En mode manuel, vous devez explicitement envoyer input_audio_buffer.commit pour indiquer que l’utilisateur a fini de parler, puis response.create pour demander une réponse.
Ajuster le VAD en production
Le réglage optimal du VAD dépend de votre contexte d’utilisation. Voici quelques scénarios courants :
- Centre d’appel silencieux : threshold 0.5, silence 400 ms
- Application mobile en extérieur : threshold 0.9, silence 600 ms
- Kiosque interactif en magasin : threshold 0.85, silence 500 ms
- Dictée vocale (push-to-talk) : VAD désactivé, commit manuel
Points clés à retenir
- Le VAD
server_vaddétecte automatiquement le début et la fin de la parole - Le
thresholdcontrôle la sensibilité (0.8-0.9 recommandé en production) - Le
silence_duration_msdétermine le délai avant de considérer que l’utilisateur a fini (500 ms recommandé pour le français) - Le
prefix_padding_msconserve de l’audio avant la parole détectée pour ne pas tronquer les mots - En mode sans VAD, vous gérez manuellement les tours de parole avec
commitetresponse.create