Transcriptions et stratégies de validation
Ce guide explique comment gérer les transcriptions et les stratégies de validation avec l’API ElevenLabs Realtime Speech to Text.
Guide pratique · Suppose que vous avez suivi le guide sur le streaming côté client ou le streaming côté serveur.
Vue d’ensemble
Lors de la transcription audio, vous recevez des transcriptions partielles et validées.
- Transcriptions partielles : les résultats provisoires de la transcription
- Transcriptions validées : les résultats définitifs du segment de transcription envoyés lorsqu’un message « commit » est reçu. Une session peut comporter plusieurs transcriptions validées.
La transcription validée peut éventuellement contenir des horodatages au niveau des mots. Ils sont reçus uniquement lorsque l’option « include timestamps » est définie sur true.
Stratégies de validation
Lors de l’envoi de fragments audio via WebSocket, les segments de transcription peuvent être validés de trois manières : validation manuelle, détection d’activité vocale (VAD) ou prédiction de tour de parole. La prédiction de tour de parole est disponible uniquement avec Scribe v3 Live.
Validation manuelle
Avec la stratégie de validation manuelle, vous contrôlez le moment où les segments de transcription sont validés. Cette stratégie est utilisée par défaut. La validation d’un segment efface la transcription accumulée déjà traitée et démarre un nouveau segment sans perdre le contexte. Pour améliorer la latence, il est recommandé de valider toutes les 20 à 30 secondes. Même sans validation manuelle, le modèle valide automatiquement après environ 36 secondes d’audio accumulé.
Pour de meilleurs résultats, validez pendant les périodes de silence ou à un autre point logique, comme un changement de tour de parole.
Valider manuellement plusieurs fois dans une courte séquence peut dégrader les performances du modèle.
Envoyer le contexte textuel précédent
Lors de l’envoi d’audio à transcrire, vous pouvez envoyer un contexte textuel précédent avec le premier fragment audio afin d’aider le modèle à comprendre le contexte de la parole. Cela est utile dans plusieurs cas :
- Texte de l’agent pour les cas d’usage d’IA conversationnelle : permet au modèle de mieux comprendre le contexte de la conversation et de produire de meilleures transcriptions.
- Reconnexion après une erreur réseau : permet au modèle de poursuivre la transcription en utilisant le texte précédent comme indication.
- Informations contextuelles générales : une brève description du sujet de la transcription aide le modèle à en comprendre le contexte.
L’envoi du contexte previous_text est possible uniquement avec le premier fragment audio via
connection.send(). Son envoi dans les fragments suivants entraînera une erreur. Le texte précédent fonctionne
mieux lorsqu’il contient moins de 50 caractères.
Détection d’activité vocale (VAD)
Avec la stratégie VAD, le moteur de transcription détecte automatiquement les segments de parole et de silence. Lorsqu’un seuil de silence est atteint, le moteur de transcription valide automatiquement le segment transcrit.
Lors de la transcription d’audio depuis le microphone dans l’intégration côté client, il est recommandé d’utiliser la stratégie VAD.
vad_silence_threshold_secs accepte des valeurs de 0,192 à 3,0 secondes. Les SDK JavaScript et React acceptent uniquement des valeurs de 0,3 à 3,0.
Prédiction de tour de parole
La prédiction de tour de parole est disponible uniquement avec Scribe v3 Live
(scribe_v3_live). Les autres modèles rejettent commit_strategy=turn_prediction avec une
erreur invalid_request et ferment la connexion.
Un seuil de silence VAD court peut interrompre les locuteurs lorsqu’ils font une pause, tandis qu’un seuil long ajoute un délai avant chaque validation. La prédiction de tour de parole utilise le contexte de la conversation, et pas seulement le silence, pour estimer si le locuteur a terminé son tour de parole. Un appelant qui s’interrompt au milieu de l’énoncé d’un numéro de téléphone risque moins d’être coupé.
Scribe v3 Live inclut turn_probability, la probabilité estimée que le locuteur ait terminé son tour de parole, dans chaque message partial_transcript :
Avec commit_strategy=turn_prediction, le serveur valide le segment actuel lorsqu’une transcription partielle atteint une turn_probability supérieure ou égale à 0.9. La VAD reste active ; le serveur valide donc également lorsque le seuil de silence vad_silence_threshold_secs est atteint. Les paramètres VAD (vad_silence_threshold_secs, vad_threshold, min_speech_duration_ms et min_silence_duration_ms) s’appliquent à la prédiction de tour de parole de la même manière qu’à la VAD.
La stratégie de validation par défaut est manual pour tous les modèles, y compris Scribe v3 Live. Définissez explicitement commit_strategy=turn_prediction pour activer la prédiction de tour de parole.
Les énumérations CommitStrategy des SDK Python et JavaScript n’incluent pas encore turn_prediction.
Pour utiliser la prédiction de tour de parole, connectez-vous directement à l’API WebSocket et définissez le paramètre de requête.
turn_probability est envoyé avec chaque stratégie de validation lorsque le modèle est Scribe v3 Live. Avec la stratégie manual, vous pouvez le lire pour décider du moment de validation dans votre propre application.
Filtrer l’audio d’arrière-plan
Définissez le paramètre de requête filter_background_audio=true pour réduire les activations erronées dues à la parole en arrière-plan, comme les conversations à proximité, et au bruit ambiant. Lorsque le filtrage est activé, la détection d’activité vocale utilise un modèle réglé pour ignorer la parole en arrière-plan, et vad_threshold est défini par défaut sur 0.15, sauf si vous le définissez vous-même.
filter_background_audio ne peut pas être combiné avec include_timestamps. Si vous définissez les deux, le serveur
envoie une erreur invalid_request et ferme la connexion.
Le filtrage ne modifie pas la facturation : tout l’audio diffusé est facturé, y compris l’audio ignoré par le filtre.
Maintenir la connexion active pendant les silences
Les SDK officiels ne ferment pas la connexion lorsqu’aucun message n’arrive ; la plupart des intégrations n’en ont donc pas besoin. Si votre propre client WebSocket, ou un proxy ou un équilibreur de charge intermédiaire, ferme la connexion lorsqu’aucune trame n’arrive pendant un certain temps, transmettez le paramètre de requête facultatif keepalive_interval_ms lors de la connexion. Cela importe pendant de longues périodes de silence, par exemple lors d’un appel téléphonique avec des pauses de 10 à 15 secondes. Environ une fois par intervalle, le serveur envoie un partial_transcript de maintien : vide (text: "") si le segment actuel ne contient aucun texte non validé, ou une répétition du dernier texte partiel dans le cas contraire.
Les signaux de maintien ne sont pas des pings automatiques : vous devez continuer à diffuser de l’audio (des trames de silence conviennent). Si vous cessez d’envoyer de l’audio, aucun signal de maintien n’est envoyé et le serveur ferme la connexion après 15 secondes sans message du client. Cette limite du serveur n’est pas configurable.
- Accepte un entier entre
500et10000(millisecondes). Cette option est désactivée par défaut ; omettez le paramètre pour conserver le comportement existant. - Les valeurs hors plage ou non entières amènent le serveur à envoyer une erreur
invalid_requestet à fermer la connexion. - Les signaux de maintien dépendent du traitement effectif par le modèle de l’audio silencieux que vous envoyez, et non d’un minuteur automatique ; ils confirment donc également que le chemin de transcription est actif.
- L’audio est traité par fragments d’environ 1 seconde ; les signaux de maintien arrivent donc environ une fois par intervalle, arrondi à cette cadence (par exemple,
1000se déclenche environ une fois par seconde,3000environ toutes les 3 secondes). Le premier signal de maintien d’une session arrive environ 2 secondes après son démarrage, car le serveur met en mémoire tampon les ~2 premières secondes d’audio avant de transcrire. Définissez votre intervalle à environ un tiers au maximum de votre propre délai d’expiration de lecture afin de conserver une marge. - Le
textd’un signal de maintien est vide uniquement lorsque le segment actuel ne contient encore aucun texte non validé. Si une pause survient après de la parole mais avant une validation, ce qui est particulièrement visible avecfilter_background_audio=trueou en mode de validation manuelle sans validation, le signal de maintien répète plutôt le dernier texte partiel afin de ne jamais effacer le texte provisoire. Après une validation, les signaux de maintien redeviennent vides jusqu’à l’arrivée de nouvelle parole. - Fonctionne avec
commit_strategy=manualetcommit_strategy=vad, ainsi qu’avecfilter_background_audio=true. N’a aucun impact sur la facturation au-delà de l’audio que vous diffusez déjà. - Le
configdu messagesession_startedrenvoiekeepalive_interval_ms(nulllorsqu’il est désactivé).
Un partial_transcript vide (text: "") signifie « aucune parole dans le segment actuel ». Un
partial_transcript répété et identique pendant une pause est également un signal de maintien ; les clients doivent simplement afficher
les transcriptions partielles comme ils le font déjà, sans traiter la répétition comme un cas particulier.
Ajoutez le paramètre à l’URL WebSocket :
Formats audio pris en charge
Bonnes pratiques
Qualité audio
- Pour de meilleurs résultats, utilisez une fréquence d’échantillonnage de 16 kHz afin d’équilibrer qualité et bande passante.
- Assurez-vous que l’entrée audio est claire et comporte peu de bruit de fond.
- Utilisez un gain de microphone adapté pour éviter l’écrêtage.
- Seul l’audio mono est actuellement pris en charge.
Taille des fragments
- Envoyez des fragments audio de 0,1 à 1 seconde pour un streaming fluide.
- Des fragments plus petits réduisent la latence, mais entraînent davantage de surcharge.
- Des fragments plus grands sont plus efficaces, mais peuvent introduire de la latence.