Actualités

AssemblyAI détaille la construction brute de l’agent vocal WebSocket sans SDK

AssemblyAI a publié un tutoriel pour construire un agent vocal directement sur WebSockets avec STT en streaming, passerelle LLM et TTS.

Illustration éditoriale thématique
Illustration éditoriale, et non photographie de l'événement.

Article traduit. Lire l'article original.

AssemblyAI a publié un tutoriel le 29 octobre 2026 qui explique la construction d’un agent vocal directement sur des WebSockets bruts, sans utiliser son SDK. L’article relie la reconnaissance vocale en streaming, un appel HTTP LLM et la lecture de synthèse, et présente cette approche comme un moyen de garder un contrôle total sur chaque trame de protocole et chaque transition d’état.

Preuves et contexte

Le guide utilise trois connexions et un clé API : le WebSocket de reconnaissance vocale Universal-3.6 Pro Realtime, la passerelle LLM sur HTTPS simple, et le WebSocket de synthèse vocale AssemblyAI. Selon le tutoriel, le socket de reconnaissance vocale reçoit 16 kHz audio binaire PCM et renvoie des trames telles que Begin, SpeechStarted, Turn et Termination, tandis que le socket de synthèse vocale accepte Generate, Flush, Cancel, KeepAlive et Terminate et renvoie Audio, FlushDone, Cancelled, Termination et Error.

AssemblyAI indique que l’exemple est conçu pour les développeurs qui souhaitent comprendre ou posséder chaque octet du flux, y compris le comportement de barge-in et l’appel d’outils. Le post indique que l’échantillon tient dans environ 300 lignes de Python et utilise uniquement les bibliothèques websocket, httpx et sounddevice. Il est également indiqué que la même clé API authentifie tous les services trois, avec LLM Gateway utilisant un format chat-complétions compatible OpenAI.

L’agent d’exemple du tutoriel est configuré pour répondre aux questions météo via un appel d’outil get_weather. Dans le code d’exemple, la requête de modèle est envoyée avec les outils de la charge utile du message, le résultat de la fonction est ajouté sous forme de message outil, et le LLM est appelé à nouveau jusqu’à ce qu’il retourne du texte brut. L’exemple d’AssemblyAI envoie ensuite ce texte au socket TTS, où chaque réponse doit être suivie d’un Flush pour produire de l’audio.

L’article documente également la gestion des entrées par intrusion : lorsque l’utilisateur parle par-dessus l’agent, le programme efface la lecture locale et envoie Annulation sur le socket TTS, tout en supprimant les trames audio restantes jusqu’à l’arrivée de Annulled. Il ajoute un filtre backchannel pour que de courtes reconnaissances comme « mhm », « ok » ou « oui » n’interrompent pas l’agent en plein milieu d’une phrase. Le tutoriel dit que la session TTS peut rester ouverte pendant toute la conversation, mais doit être maintenue vivante par des trames périodiques pendant les périodes d’inactivité.

Le post d’AssemblyAI inclut des détails opérationnels et des conseils de gestion des erreurs, notamment la note que le socket TTS envoie une trame d’erreur avant la fermeture de la panne et que le socket STT se ferme avec des codes de fermeture et raisons du websocket. Le guide précise également que la voix TTS dans l’échantillon utilise l’ID vocal d’Audrey, que le format de sortie est 24 kHz pcm_s16le, et que l’entrée microphone doit correspondre au taux d’échantillonnage de 16 kHz configuré côté parole-texte.

Autres articles en français · Comparaisons financières et sources SEC (anglais)