[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-\u002Fblog\u002Fvoix-temps-reel-vs-batch":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"author":10,"date":11,"tags":12,"body":16,"_type":523,"_id":524,"_source":525,"_file":526,"_stem":527,"_extension":528},"\u002Fblog\u002Fvoix-temps-reel-vs-batch","blog",false,"","Voix IA au téléphone : temps réel ou batch ?","Pourquoi un assistant vocal exige une tout autre architecture qu'un chatbot écrit, et ce que ça change pour la latence, le barge-in et le choix du modèle.","Équipe betool","2026-04-28",[13,14,15],"voix","architecture","latence",{"type":17,"children":18,"toc":514},"root",[19,40,45,52,71,84,89,95,105,124,129,200,205,210,244,250,262,274,286,309,314,320,325,330,383,389,394,443,448,454,459,502],{"type":20,"tag":21,"props":22,"children":23},"element","p",{},[24,27,33,35],{"type":25,"value":26},"text","Quand un éditeur propose un ",{"type":20,"tag":28,"props":29,"children":30},"em",{},[31],{"type":25,"value":32},"« agent IA téléphonique »",{"type":25,"value":34},", posez-lui une question : ",{"type":20,"tag":28,"props":36,"children":37},{},[38],{"type":25,"value":39},"« Quelle est votre latence end-to-end entre la fin de la parole utilisateur et le début de la réponse ? »",{"type":20,"tag":21,"props":41,"children":42},{},[43],{"type":25,"value":44},"Si la réponse dépasse 1,5 seconde, ce n'est pas un agent téléphonique. C'est un chatbot avec un module ASR \u002F TTS collé devant.",{"type":20,"tag":46,"props":47,"children":49},"h2",{"id":48},"la-règle-des-800-ms",[50],{"type":25,"value":51},"La règle des 800 ms",{"type":20,"tag":21,"props":53,"children":54},{},[55,57,62,64,69],{"type":25,"value":56},"Un humain au téléphone tolère un silence après sa question. Mais ce silence a un seuil : au-delà de 800 ms, l'autre côté semble ",{"type":20,"tag":28,"props":58,"children":59},{},[60],{"type":25,"value":61},"« figé »",{"type":25,"value":63},". À 1 500 ms, l'interlocuteur dit ",{"type":20,"tag":28,"props":65,"children":66},{},[67],{"type":25,"value":68},"« allô ? »",{"type":25,"value":70},". À 3 000 ms, il raccroche en pensant à un problème de ligne.",{"type":20,"tag":21,"props":72,"children":73},{},[74,76,82],{"type":25,"value":75},"L'objectif d'un agent vocal sérieux est donc : ",{"type":20,"tag":77,"props":78,"children":79},"strong",{},[80],{"type":25,"value":81},"moins de 800 ms",{"type":25,"value":83}," entre la fin de la parole et le début audible de la réponse.",{"type":20,"tag":21,"props":85,"children":86},{},[87],{"type":25,"value":88},"Décomposons.",{"type":20,"tag":46,"props":90,"children":92},{"id":91},"le-budget-temps-en-détail",[93],{"type":25,"value":94},"Le budget temps en détail",{"type":20,"tag":96,"props":97,"children":99},"pre",{"code":98},"[parole user]──▶[ASR streaming]──▶[LLM]──▶[TTS streaming]──▶[audio out]\n       ~150ms          ~80ms       ~?      ~250ms             ~50ms\n",[100],{"type":20,"tag":101,"props":102,"children":103},"code",{"__ignoreMap":7},[104],{"type":25,"value":98},{"type":20,"tag":21,"props":106,"children":107},{},[108,110,115,117,122],{"type":25,"value":109},"Sur les ~800 ms disponibles, ",{"type":20,"tag":77,"props":111,"children":112},{},[113],{"type":25,"value":114},"environ 270 ms partent dans ASR + TTS + transport",{"type":25,"value":116},". Reste ",{"type":20,"tag":77,"props":118,"children":119},{},[120],{"type":25,"value":121},"530 ms pour le LLM",{"type":25,"value":123}," — incluant son temps de prefill, de réflexion, et la génération du premier token.",{"type":20,"tag":21,"props":125,"children":126},{},[127],{"type":25,"value":128},"Conséquences :",{"type":20,"tag":130,"props":131,"children":132},"ul",{},[133,151,167,183],{"type":20,"tag":134,"props":135,"children":136},"li",{},[137,142,144,149],{"type":20,"tag":77,"props":138,"children":139},{},[140],{"type":25,"value":141},"Un grand modèle de raisonnement, en non-streaming",{"type":25,"value":143}," : plusieurs secondes avant le premier mot audible. ",{"type":20,"tag":77,"props":145,"children":146},{},[147],{"type":25,"value":148},"Hors-jeu",{"type":25,"value":150},".",{"type":20,"tag":134,"props":152,"children":153},{},[154,159,161,166],{"type":20,"tag":77,"props":155,"children":156},{},[157],{"type":25,"value":158},"Un modèle haut de gamme en streaming",{"type":25,"value":160}," : premier token rapide les bons jours, beaucoup moins les mauvais. ",{"type":20,"tag":77,"props":162,"children":163},{},[164],{"type":25,"value":165},"Acceptable mais tendu",{"type":25,"value":150},{"type":20,"tag":134,"props":168,"children":169},{},[170,175,177,182],{"type":20,"tag":77,"props":171,"children":172},{},[173],{"type":25,"value":174},"Un modèle rapide en streaming",{"type":25,"value":176}," (gammes « légères » de Claude, GPT et Gemini) : ",{"type":20,"tag":77,"props":178,"children":179},{},[180],{"type":25,"value":181},"Confortable",{"type":25,"value":150},{"type":20,"tag":134,"props":184,"children":185},{},[186,191,193,198],{"type":20,"tag":77,"props":187,"children":188},{},[189],{"type":25,"value":190},"Un petit modèle open-weight servi sur votre GPU (vLLM)",{"type":25,"value":192}," : ",{"type":20,"tag":77,"props":194,"children":195},{},[196],{"type":25,"value":197},"Excellent",{"type":25,"value":199}," (et privé).",{"type":20,"tag":21,"props":201,"children":202},{},[203],{"type":25,"value":204},"Mesurez le TTFT sur votre propre trafic : il varie selon le fournisseur, la région et l'heure.",{"type":20,"tag":21,"props":206,"children":207},{},[208],{"type":25,"value":209},"Une architecture voix sérieuse impose donc :",{"type":20,"tag":211,"props":212,"children":213},"ol",{},[214,224,234],{"type":20,"tag":134,"props":215,"children":216},{},[217,222],{"type":20,"tag":77,"props":218,"children":219},{},[220],{"type":25,"value":221},"Tout est en streaming",{"type":25,"value":223}," — ASR, LLM, TTS. Pas un seul maillon en batch.",{"type":20,"tag":134,"props":225,"children":226},{},[227,232],{"type":20,"tag":77,"props":228,"children":229},{},[230],{"type":25,"value":231},"Le modèle LLM est choisi pour le TTFT",{"type":25,"value":233}," (time to first token), pas pour le score MMLU.",{"type":20,"tag":134,"props":235,"children":236},{},[237,242],{"type":20,"tag":77,"props":238,"children":239},{},[240],{"type":25,"value":241},"Le TTS commence à parler dès le premier token reçu",{"type":25,"value":243},", pas à la fin de la réponse complète.",{"type":20,"tag":46,"props":245,"children":247},{"id":246},"le-barge-in",[248],{"type":25,"value":249},"Le barge-in",{"type":20,"tag":21,"props":251,"children":252},{},[253,255,260],{"type":25,"value":254},"Sur un canal écrit, l'utilisateur attend que le bot ait fini. Au téléphone, ",{"type":20,"tag":77,"props":256,"children":257},{},[258],{"type":25,"value":259},"il coupe",{"type":25,"value":261},". Trois fois sur cinq, dans les conversations naturelles.",{"type":20,"tag":21,"props":263,"children":264},{},[265,267,272],{"type":25,"value":266},"Un agent vocal qui ne sait pas se faire couper paraît ",{"type":20,"tag":28,"props":268,"children":269},{},[270],{"type":25,"value":271},"« autiste »",{"type":25,"value":273}," — il continue à dérouler sa phrase pendant que l'utilisateur essaie de l'interrompre. C'est insupportable et signe immédiatement qu'on parle à un robot mal foutu.",{"type":20,"tag":21,"props":275,"children":276},{},[277,279,284],{"type":25,"value":278},"Le ",{"type":20,"tag":77,"props":280,"children":281},{},[282],{"type":25,"value":283},"barge-in",{"type":25,"value":285}," technique demande :",{"type":20,"tag":130,"props":287,"children":288},{},[289,294,299,304],{"type":20,"tag":134,"props":290,"children":291},{},[292],{"type":25,"value":293},"Le TTS s'arrête immédiatement quand l'ASR détecte du signal vocal sortant utilisateur.",{"type":20,"tag":134,"props":295,"children":296},{},[297],{"type":25,"value":298},"Le LLM jette la complétion en cours (sans rancune).",{"type":20,"tag":134,"props":300,"children":301},{},[302],{"type":25,"value":303},"Le buffer audio sortant est purgé instantanément (sinon on entend une demi-syllabe résiduelle).",{"type":20,"tag":134,"props":305,"children":306},{},[307],{"type":25,"value":308},"L'historique de conversation note que la réponse n'a pas été entendue en totalité — pour ne pas la répéter par erreur.",{"type":20,"tag":21,"props":310,"children":311},{},[312],{"type":25,"value":313},"C'est un détail technique qui change tout dans le ressenti.",{"type":20,"tag":46,"props":315,"children":317},{"id":316},"la-gestion-dincertitude",[318],{"type":25,"value":319},"La gestion d'incertitude",{"type":20,"tag":21,"props":321,"children":322},{},[323],{"type":25,"value":324},"Au téléphone, l'ASR se trompe régulièrement. Là où un chatbot écrit dispose toujours du texte exact tapé par l'utilisateur, l'agent vocal reçoit une transcription souvent imparfaite.",{"type":20,"tag":21,"props":326,"children":327},{},[328],{"type":25,"value":329},"Stratégies qui marchent :",{"type":20,"tag":130,"props":331,"children":332},{},[333,343,367],{"type":20,"tag":134,"props":334,"children":335},{},[336,341],{"type":20,"tag":77,"props":337,"children":338},{},[339],{"type":25,"value":340},"Demander confirmation",{"type":25,"value":342}," sur les éléments à forte conséquence (numéro de dossier, montant, nom de famille rare). Pas systématiquement — sinon insupportable.",{"type":20,"tag":134,"props":344,"children":345},{},[346,351,353,358,360,365],{"type":20,"tag":77,"props":347,"children":348},{},[349],{"type":25,"value":350},"Ne pas faire confiance aveugle au LLM",{"type":25,"value":352}," quand l'ASR est ambigu. Si la phrase reçue est ",{"type":20,"tag":28,"props":354,"children":355},{},[356],{"type":25,"value":357},"« je veux annuler mon contrat »",{"type":25,"value":359}," avec un score de confiance bas, mieux vaut demander ",{"type":20,"tag":28,"props":361,"children":362},{},[363],{"type":25,"value":364},"« vous voulez bien dire annuler votre contrat ? »",{"type":25,"value":366}," que de lancer la procédure d'annulation.",{"type":20,"tag":134,"props":368,"children":369},{},[370,375,377,382],{"type":20,"tag":77,"props":371,"children":372},{},[373],{"type":25,"value":374},"Couper court aux dérapages",{"type":25,"value":376}," — un agent qui s'éloigne du script doit être ramené par un nœud condition \u002F opérateur, pas par un prompt qui ",{"type":20,"tag":28,"props":378,"children":379},{},[380],{"type":25,"value":381},"« devrait suffire »",{"type":25,"value":150},{"type":20,"tag":46,"props":384,"children":386},{"id":385},"le-téléphone-cest-aussi-une-stack",[387],{"type":25,"value":388},"Le téléphone, c'est aussi une stack",{"type":20,"tag":21,"props":390,"children":391},{},[392],{"type":25,"value":393},"Au-delà de l'IA, un agent téléphonique exige :",{"type":20,"tag":130,"props":395,"children":396},{},[397,409,421,432],{"type":20,"tag":134,"props":398,"children":399},{},[400,402,407],{"type":25,"value":401},"Un ",{"type":20,"tag":77,"props":403,"children":404},{},[405],{"type":25,"value":406},"trunk SIP",{"type":25,"value":408}," auprès d'un opérateur (Twilio, Voxbone, OVH, Sewan…).",{"type":20,"tag":134,"props":410,"children":411},{},[412,414,419],{"type":25,"value":413},"Une ",{"type":20,"tag":77,"props":415,"children":416},{},[417],{"type":25,"value":418},"gateway média",{"type":25,"value":420}," (LiveKit-SIP, FreeSWITCH, Asterisk) qui parle SIP côté opérateur et WebRTC côté plateforme.",{"type":20,"tag":134,"props":422,"children":423},{},[424,425,430],{"type":25,"value":401},{"type":20,"tag":77,"props":426,"children":427},{},[428],{"type":25,"value":429},"transcripteur",{"type":25,"value":431}," robuste au bruit, aux accents, aux superpositions de voix.",{"type":20,"tag":134,"props":433,"children":434},{},[435,436,441],{"type":25,"value":401},{"type":20,"tag":77,"props":437,"children":438},{},[439],{"type":25,"value":440},"synthétiseur",{"type":25,"value":442}," qui prononce correctement les noms propres, les nombres, les dates.",{"type":20,"tag":21,"props":444,"children":445},{},[446],{"type":25,"value":447},"Aucun de ces éléments n'est trivial. Tous interagissent.",{"type":20,"tag":46,"props":449,"children":451},{"id":450},"ce-que-betool-prend-en-charge",[452],{"type":25,"value":453},"Ce que betool prend en charge",{"type":20,"tag":21,"props":455,"children":456},{},[457],{"type":25,"value":458},"L'architecture voix de betool — LiveKit + LiveKit-SIP + worker dédié + LLM en streaming vers la synthèse vocale — couvre les besoins ci-dessus en standard. Vous restez maître :",{"type":20,"tag":130,"props":460,"children":461},{},[462,473,491],{"type":20,"tag":134,"props":463,"children":464},{},[465,467,471],{"type":25,"value":466},"Du ",{"type":20,"tag":77,"props":468,"children":469},{},[470],{"type":25,"value":406},{"type":25,"value":472}," (votre opérateur, vos numéros).",{"type":20,"tag":134,"props":474,"children":475},{},[476,478,483,485,489],{"type":25,"value":477},"Des ",{"type":20,"tag":77,"props":479,"children":480},{},[481],{"type":25,"value":482},"modèles",{"type":25,"value":484}," (modèles managés, BYOK ou modèles privés) et des ",{"type":20,"tag":77,"props":486,"children":487},{},[488],{"type":25,"value":13},{"type":25,"value":490}," (transcription Deepgram ou faster-whisper ; synthèse ElevenLabs, Cartesia, OpenAI ou Deepgram Aura).",{"type":20,"tag":134,"props":492,"children":493},{},[494,495,500],{"type":25,"value":477},{"type":20,"tag":77,"props":496,"children":497},{},[498],{"type":25,"value":499},"paramètres",{"type":25,"value":501}," (sensibilité du barge-in, détection de fin de tour, phrases d'attente, transfert vers un humain).",{"type":20,"tag":21,"props":503,"children":504},{},[505,507,512],{"type":25,"value":506},"Vous ne configurez pas la plomberie temps-réel — c'est le travail de la plateforme. Vous concevez la ",{"type":20,"tag":77,"props":508,"children":509},{},[510],{"type":25,"value":511},"conversation",{"type":25,"value":513},", qui est le vrai sujet métier.",{"title":7,"searchDepth":515,"depth":515,"links":516},2,[517,518,519,520,521,522],{"id":48,"depth":515,"text":51},{"id":91,"depth":515,"text":94},{"id":246,"depth":515,"text":249},{"id":316,"depth":515,"text":319},{"id":385,"depth":515,"text":388},{"id":450,"depth":515,"text":453},"markdown","content:blog:2.voix-temps-reel-vs-batch.md","content","blog\u002F2.voix-temps-reel-vs-batch.md","blog\u002F2.voix-temps-reel-vs-batch","md"]