Transcriptions et stratégies de validation
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 intermédiaires de la transcription
- Transcriptions validées : les résultats finaux 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 facultativement contenir des horodatages au niveau des mots. Ceux-ci ne sont reçus que 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 deux manières : validation manuelle ou détection d’activité vocale (VAD).
Validation manuelle
Avec la stratégie de validation manuelle, vous décidez quand valider les segments de transcription. Il s’agit de la stratégie 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 réduire 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 silences ou à un autre point logique, comme un changement de tour de parole.
Effectuer plusieurs validations manuelles successives sur une courte période peut dégrader les performances du modèle.
Envoi du contexte textuel précédent
Lors de l’envoi d’audio à transcrire, vous pouvez envoyer le 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 à comprendre le contexte.
L’envoi du contexte previous_text n’est possible qu’avec le premier fragment audio via
connection.send(). L’envoyer dans des fragments ultérieurs entraîne 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 de transcription.
Lors de la transcription de l’audio du microphone dans l’intégration côté client, il est recommandé d’utiliser la stratégie VAD.
Maintenir la connexion pendant les silences
Les SDK officiels ne coupent 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 répartiteur 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. C’est important pendant les silences prolongés, 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 de connexion : vide (text: "") si le segment actuel ne comporte aucun texte non validé, ou répétant le dernier texte partiel dans le cas contraire.
Les signaux de maintien de connexion ne sont pas des pings autonomes : vous devez continuer à diffuser l’audio (les trames de silence conviennent). Si vous arrêtez d’envoyer de l’audio, aucun signal de maintien n’est envoyé et le serveur ferme la connexion après 15 secondes sans message 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 entraînent l’envoi par le serveur d’une erreur
invalid_requestet la fermeture de la connexion. - Les signaux de maintien sont déclenchés par le traitement effectif de l’audio silencieux envoyé par le modèle, et non par un minuteur autonome. 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 et3000environ toutes les 3 secondes. Le premier signal de maintien d’une session arrive environ 2 secondes après son début, car le serveur met en mémoire tampon les ~2 premières secondes d’audio avant la transcription. Définissez votre intervalle à environ un tiers au maximum de votre propre délai de lecture afin de conserver une marge. - Le champ
textd’un signal de maintien n’est vide que si 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 le dernier texte partiel afin de ne jamais effacer le texte intermédiaire. Après une validation, les signaux de maintien redeviennent vides jusqu’à l’arrivée d’une nouvelle parole. - Fonctionne avec
commit_strategy=manualetcommit_strategy=vad, ainsi qu’avecfilter_background_audio=true. N’a aucune incidence sur la facturation, au-delà de l’audio que vous diffusez déjà. - La configuration
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 résultats partiels 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’obtenir un équilibre optimal entre qualité et bande passante.
- Assurez une entrée audio nette avec un minimum de bruit de fond.
- Utilisez un gain de microphone approprié pour éviter l’écrêtage.
- Seul l’audio mono est actuellement pris en charge.
Taille des fragments
- Envoyez des fragments audio d’une durée de 0,1 à 1 seconde pour un streaming fluide.
- Les fragments plus petits réduisent la latence, mais augmentent la surcharge.
- Les fragments plus grands sont plus efficaces, mais peuvent introduire de la latence.