Assistant vocal AI en temps réel avec Function Calling et diffusion audio bidirectionnelle
Une plateforme de fitness et de nutrition avait besoin d'un assistant AI vocal prioritaire capable de répondre aux utilisateurs en temps réel avec une conversation naturelle, d'exécuter des calculs spécifiques au domaine (ajustements de repas, suivi des calories) et de prononcer les réponses — le tout avec une latence inférieure à une seconde pour une expérience véritablement conversationnelle.
Discutez de Votre Projet
Le Défi
La construction d'un assistant vocal AI de qualité production a posé des défis d'ingénierie temps réel uniques :
- Latence — Les pipelines traditionnels speech-to-text → LLM → text-to-speech ajoutaient 3 à 5 secondes de délai, rompant le flux conversationnel
- Function Calling — L'assistant devait exécuter une logique métier (calculs nutritionnels, ajustements de plans de repas) au milieu de la conversation, pas seulement chatter
- Diffusion audio — L'audio bidirectionnel devait circuler en continu sans interruptions de mise en mémoire tampon ni problèmes d'écho
- Conscience du contexte — L'assistant devait maintenir le contexte de la conversation entre les tours tout en gérant les interruptions
- Multilingue — Les utilisateurs parlaient dans différentes langues et s'attendaient à des réponses dans la même langue
- Isolation de session — Chaque session vocale nécessitait une gestion d'état indépendante sans interférence
Notre Solution
Nous avons construit un assistant vocal AI en temps réel alimenté par l'API Gemini Live de Google avec des capacités audio natives, des fonctions Function Calling personnalisées pour les calculs spécifiques au domaine, et un frontend React avec diffusion audio basée sur WebSocket.
Architecture
- Modèle AI : Gemini avec entrée/sortie audio native et Function Calling
- Backend : Python/FastAPI avec un point de terminaison WebSocket pour l'audio bidirectionnel
- Pipeline audio : PyAudio pour l'E/S microphone/haut-parleur avec diffusion en temps réel
- Frontend : React avec Vite et Tailwind CSS pour l'interface utilisateur de contrĂ´le de session
- Communication : WebSocket pour la messagerie JSON Ă faible latence et le transport audio binaire
- Multimodal : Capture optionnelle de caméra et d'écran pour le contexte visuel
Pipeline audio en temps réel
Diffusion bidirectionnelle
Le système maintient des flux audio continus dans les deux directions :
- Entrée : Audio du microphone capturé en mono 16kHz, découpé en petites trames et diffusé au modèle AI en temps réel
- Sortie : Discours généré par l'AI reçu à 24kHz et diffusé immédiatement via les haut-parleurs
- Pas de mise en lot : Les fragments audio sont envoyés dès leur capture — pas de délais d'accumulation
- Gestion des interruptions : L'utilisateur peut interrompre l'assistant au milieu d'une réponse naturellement
Traitement audio
- Format PCM 16 bits pour l'entrée et la sortie
- Fréquences d'échantillonnage séparées optimisées pour la parole (capture 16kHz, lecture 24kHz)
- Petites tailles de tampon pour une latence minimale
- Diffusion continue sans interruptions de démarrage/arrêt entre les tours
Intégration de Function Calling
Comment ça marche
Le modèle AI peut invoquer des fonctions Python locales au milieu de la conversation lorsque des calculs spécifiques au domaine sont nécessaires :
- L'utilisateur émet une requête vocale (par exemple, "J'ai manqué le déjeuner aujourd'hui")
- Le modèle AI transcrit et comprend l'intention
- Le modèle détermine qu'un appel de fonction est nécessaire et envoie une requête structurée
- Le Backend extrait le nom de la fonction, les arguments et l'ID d'appel
- La fonction locale exécute le calcul de domaine
- Le résultat est renvoyé au modèle sous forme de réponse structurée
- Le modèle génère une réponse vocale en langage naturel incorporant le résultat
Fonctions de domaine
Le système prend en charge le Function Calling axé sur la nutrition pour des scénarios tels que :
- Repas manqués — Redistribue les macronutriments manqués sur les repas restants
- Aliments imprévus — Ajuste les repas à venir pour compenser un apport inattendu
- Substitutions de repas — Échange des ingrédients tout en maintenant les objectifs de macros
- Suivi d'activité — Estime la dépense calorique et ajuste le tampon nutritionnel
Chaque fonction utilise une base de données de macros avec des profils nutritionnels par aliment et effectue des calculs dynamiques avec une légère variation stochastique pour des réponses au rendu naturel.
Sécurité d'exécution
- L'entrée du microphone est mise en pause pendant l'exécution de la fonction pour éviter les chevauchements
- Les trames audio en attente sont ignorées pour éviter un contexte obsolète
- Les réponses d'erreur sont renvoyées avec élégance si l'exécution de la fonction échoue
- La diffusion normale reprend immédiatement après la fin de l'exécution de la fonction
Architecture Backend
Serveur WebSocket FastAPI
- Un seul point de terminaison WebSocket pour toutes les communications client
- Gestion du cycle de vie des sessions (démarrage, arrêt, vérifications d'état ping/pong)
- Une seule session active Ă la fois avec verrouillage de session
- Middleware CORS pour les environnements de développement
- Point de terminaison de vérification d'état pour la surveillance
Gestion des sessions
- Les sessions sont créées lors de la connexion du client avec sélection du mode (audio uniquement, caméra ou écran)
- Des tâches asynchrones en arrière-plan gèrent la capture, le traitement et la lecture audio simultanément
- Déconnexion élégante avec nettoyage des ressources
- Validation de clé API et propagation des erreurs
Entrée multimodale (optionnel)
Au-delà de la voix, le système prend en charge un contexte visuel optionnel :
- Mode Caméra — Diffuse des trames de webcam (1fps) pour le contexte visuel dans les conversations
- Mode Écran — Capture le contenu de l'écran pour discuter des informations affichées à l'écran
- Les images sont redimensionnées et compressées avant transmission
- Le contexte visuel améliore la capacité de l'AI à fournir des réponses pertinentes
Interface Frontend
- Contrôle de session — Démarrage/arrêt de l'écoute avec des indicateurs d'état clairs
- Affichage du statut — État de connexion et de session en temps réel (inactif, connexion, actif, erreur)
- Prise en charge des thèmes — Mode clair/sombre avec persistance
- Démonstration guidée — Démonstration étape par étape pour les nouveaux utilisateurs
- Gestion WebSocket — Logique de reconnexion automatique
Configuration du modèle AI
- Modalité audio native (pas de pipeline STT/TTS séparé)
- Sélection de voix configurable parmi plusieurs voix prédéfinies
- Instructions système définissant la personnalité de l'assistant, le style de réponse et la gestion des langues
- Définitions d'outils pour toutes les fonctions disponibles avec schémas de paramètres
- Détection automatique de la langue avec réponse dans la même langue
Fonctionnalités clés
- Latence inférieure à la seconde — Le modèle audio natif élimine la surcharge du pipeline STT/TTS
- Audio bidirectionnel en temps réel — Diffusion continue avec < 50ms par fragment
- Function Calling — Calculs spécifiques au domaine exécutés au milieu de la conversation
- Interruption naturelle — Les utilisateurs peuvent interrompre l'assistant naturellement sans commandes spéciales
- Multilingue — Détection automatique de la langue avec réponses dans la même langue
- Entrée multimodale — Contexte de caméra et d'écran optionnel pour une compréhension visuelle
- Gestion des sessions — Contrôle du cycle de vie des sessions avec verrouillage et nettoyage des ressources
- Calculs de macros — Ajustements nutritionnels dynamiques avec des profils de macros par aliment
- Récupération d'erreurs — Gestion élégante des échecs de fonction et des interruptions réseau
- Extensible — De nouvelles fonctions ajoutées en définissant le schéma et le gestionnaire — pas de modifications d'architecture
Résultats
Stack Technologique
caseStudyDetail.more Études de Cas
Découvrez plus de nos implémentations techniques
Traitement de factures assisté par l'IA avec OCR et intégration QuickBooks
Une entreprise de taille moyenne, traitant des centaines de factures fournisseurs chaque mois, devait éliminer la saisie manuelle des données en extrayant automatiquement les données des factures à l'aide de l'IA/OCR et en les synchronisant directement dans QuickBooks pour la tenue de livres et le suivi des paiements.
Insertion d'annonces côté client (CSAI) avec analyse des marqueurs SCTE-35 et intégration de lecteurs multiplateformes
Une plateforme de streaming vidéo devait implémenter l'insertion d'annonces côté client (CSAI) sur les applications web, mobiles et de télévision connectée — permettant des expériences publicitaires personnalisées au niveau de l'appareil avec un support complet d'interaction publicitaire (superpositions cliquables, bannières complémentaires, boutons de saut) que l'insertion côté serveur ne peut pas offrir.
PrĂŞt Ă Transformer Votre Entreprise ?
Discutons de la façon dont nous pouvons appliquer des solutions similaires à vos défis.