Agents vocaux en temps réel avec l'intelligence de pointe — Bohan Li, EliseAI
AAI Engineer
컴퓨터/소프트웨어AI/미래기술
스크립트
00:00:00Je m'appelle Bo. Je vais vous présenter les agents vocaux en temps réel avec une intelligence
00:00:18de pointe. Nous allons voir comment nous, chez
00:00:22Elise AI, avons conçu notre architecture d'agent vocal pour obtenir du temps réel avec le
00:00:28niveau d'intelligence de pointe dont nous avons besoin. Donc, avant de commencer, je voulais
00:00:36établir des parallèles sur les raisons pour lesquelles nous avons opté pour des agents vocaux en cascade
00:00:42et surtout comparer cela aux voitures autonomes sur lesquelles je travaillais
00:00:48auparavant. Pour moi, les agents vocaux en cascade prennent tout leur sens lorsqu'on les analyse
00:00:53sous l'angle de la perception, qui, pour les voitures autonomes,
00:00:59correspond aux boîtes englobantes, à la caméra, au lidar. Pour la voix, il s'agit de
00:01:05la transcription, c'est-à-dire transformer efficacement ces signaux du monde réel
00:01:09en éléments de données que le modèle de langage ou le cerveau que vous utilisez peut
00:01:17traiter. La deuxième étape est la pile de planification, ce qui est assez direct.
00:01:23C'est ici que le modèle de langage prend les résultats de l'étape de perception pour produire
00:01:29les réponses que vous souhaitez renvoyer dans le monde réel. Enfin, il y a la couche de contrôle
00:01:36où, en conduite autonome, vous prenez la trajectoire produite par le planificateur pour
00:01:43la convertir en commandes réelles afin de piloter la voiture. Ici, nous transformons le texte en
00:01:50audio pour exprimer les pensées de nos agents vocaux. Et donc, je vais maintenant me pencher sur
00:02:00chacun de ces éléments. Nous avons développé quelques astuces intéressantes dans chacun de ces domaines pour
00:02:08améliorer la vitesse de nos agents vocaux sans sacrifier l'intelligence.
00:02:13La première partie concerne la couche de transcription. Nous avons inventé ce concept que nous appelons
00:02:19le transcripteur spéculatif en flux continu, où nous superposons efficacement un transcripteur
00:02:24rapide en flux continu comme Flux au-dessus (ou plutôt en dessous) de Scribe v2, une transcription
00:02:33par lots plus précise qui intègre davantage de contexte. C'est un peu plus lent, mais cela offre des détections plus exactes.
00:02:39Examinons un scénario. Dans ce cas, l'agent vient de demander :
00:02:44« Pouvez-vous donner votre nom et votre date de naissance ? » L'utilisateur va répondre et nous allons voir le déroulement
00:02:49au niveau du timing. D'abord, nous obtenons une première détection provenant de la couche de diffusion en continu.
00:02:57La couche précise, la couche corrective, ne se déclenche pas car le texte est identique.
00:03:05Nous recevons d'autres détections de texte en streaming, et dans ce cas, la couche corrective est en fait
00:03:11annulée car nous avons du nouveau texte. Donc, plus de contexte et plus d'audio l'emportent sur l'ancienne version précise.
00:03:21C'est ici qu'intervient la première correction. Comme la couche Scribe v2 comprend
00:03:27le contexte de la question, elle est capable de saisir qu'il s'agit d'un nom et d'une date de naissance.
00:03:34Ensuite, quelques détections supplémentaires. Ce ne sont que des ponctuations, on s'en fiche.
00:03:37Finalement, nous transmettons ce texte à l'agent.
00:03:44Passons maintenant à la couche du modèle de langage. Vu que nous utilisons des LLM lents mais
00:03:52intelligents, nous voulons vraiment réduire les allers-retours. Ce qui nous amène à effectuer
00:03:58beaucoup d'inférences, c'est l'appel d'outils. Une façon d'éviter cela est de confier les appels d'outils à des agents
00:04:05en arrière-plan et de réinjecter ces outils dans le contexte de l'agent principal pour qu'il croie
00:04:13avoir effectué l'appel lui-même, alors que ce n'est pas le cas. Rappelez-vous de la détection précédente : chacune de ces détections va déclencher
00:04:26une génération précoce de la part de l'agent, mais nous ne l'émettrons pas tant que nous n'aurons pas la confirmation que
00:04:38l'utilisateur a fini de parler. Dans ce cas, l'utilisateur dit « bien sûr ». L'agent sait que l'utilisateur va probablement ajouter quelque chose.
00:04:45Notre appel d'outil en arrière-plan, qui nous aide à identifier le nom et la date de naissance à partir de la détection utilisateur,
00:04:51ne se déclenche pas, donc rien de spécial. La détection instantanée suivante arrive, indiquant toujours pas vraiment de nom.
00:05:02Notre agent joue le jeu et continue.
00:05:06Ensuite, davantage de contexte revient. L'agent estime qu'il devrait y avoir un nom.
00:05:11Il va demander de l'épeler car il soupçonne une erreur de transcription.
00:05:16Toujours pas de nom ni de date de naissance. Puis enfin, rappelez-vous qu'il s'agit de notre détection
00:05:22instantanée finale corrigée par le transcripteur Scribe v2.
00:05:27Ici, la génération hâtive de l'agent qui avait été effectuée sans aucun appel d'outil va être annulée
00:05:34parce que l'agent en arrière-plan a enfin réussi à trouver le nom et la date de naissance recherchés.
00:05:38Il se relance et l'agent dispose désormais du contexte nécessaire.
00:05:45Vous voyez que nous faisons cela ici. L'appel d'outil comporte un peu
00:05:49d'intelligence. Nous allons par exemple corriger les erreurs de transcription des noms
00:05:53et effectuer une correspondance phonétique.
00:05:57Et une fois que nous avons compris qu'il s'agit de la fin de la prise de parole de l'utilisateur,
00:06:02nous l'émettons. C'est assez classique.
00:06:06Bien, la couche suivante est la synthèse vocale (TTS). Avec la synthèse vocale, l'objectif
00:06:12est de prendre ce qu'a dit l'agent, qui l'émet de manière
00:06:16continue. Nous devons donc produire l'audio aussi vite que possible. Idéalement, il est possible
00:06:24de diffuser l'audio avant même que l'agent n'ait fini de générer tout le texte. Cela permet de
00:06:31masquer la latence de la fin de la génération. Je vais donc lancer le flux
00:06:39de l'agent. Cela commence par U. Et avant d'aller plus loin, il y a
00:06:46ce nouveau concept que nous introduisons appelé le cache de préfixe. Le cache de préfixe
00:06:52analyse le flux de l'agent pour voir si nous avons déjà généré de l'audio pour cette séquence de mots
00:07:02lors d'une génération précédente ou peut-être lors de la même génération dans cet appel.
00:07:10Il voit le mot U. Pour ce cache de préfixe, nous ne voulons pas
00:07:17obtenir une correspondance immédiate sur chaque mot. Nous attendons d'avoir un peu plus de mots. Donc après
00:07:24trois mots, le cache de préfixe réalise sa première correspondance. Sur la droite, voici notre
00:07:31fournisseur standard de synthèse vocale, Cartesia, un moteur TTS avec prise en charge des WebSockets.
00:07:36Nous faisons donc passer l'agent par le cache et également par WebSocket.
00:07:45D'autres jetons arrivent, plus de cache, plus d'envois au WebSocket. Rien de spécial à ajouter.
00:07:51Et voici notre premier cas unique : nous trouvons un jeton qui provoque
00:07:59un échec du cache. C'est logique si l'on met en cache les générations précédentes. « You said your name
00:08:05is » est une phrase fréquente, mais une fois qu'on ajoute le nom, cela provoque un échec du cache.
00:08:12À ce stade, nous restituons notre audio mis en cache. « You said your name is » va donc
00:08:19être émis pendant que le reste du texte en streaming arrive. À ce moment-là, l'utilisateur entend l'agent.
00:08:25Il ne se rend compte de rien, il a juste l'impression d'avoir des temps de réponse très rapides.
00:08:32Le reste du texte s'écoule ensuite. À ce stade, nous avons déjà émis depuis le cache.
00:08:38Le cache a fait son travail. Nous pouvons envoyer le reste à Cartesia. Et voici l'astuce :
00:08:46Cartesia a vu toute la transcription jusqu'à présent. Pour Cartesia, elle ignore
00:08:56l'existence de ce cache de préfixe. Elle va simplement générer la phrase complète avec une
00:09:01prosodie naturelle standard. Mais ce que nous faisons, lorsque la génération revient, puisque nous avons déjà joué
00:09:08l'audio ici, c'est de supprimer la partie audio provenant de Cartesia à cet endroit
00:09:13pour ne jouer que la suite. L'utilisateur ressentira peut-être un tout petit hoquet. Je diffuserai de l'audio plus tard et
00:09:21vous verrez que vous ne le remarquerez probablement pas. Et nous prenons cette partie
00:09:28pour l'émettre directement après la fin de la lecture du premier audio. C'est donc fluide pour l'utilisateur.
00:09:35Voilà, c'était beaucoup de détails techniques. Je pense que le mieux est
00:09:43d'écouter un appel pour voir cela en action. J'ai donc enregistré un appel, écoutons le résultat.
00:09:53Bonjour, ici Bo, cabinet gynécologique Elise. Que puis-je pour vous ?
00:09:59Bonjour, je pense être enceinte et je voudrais planifier une échographie de confirmation.
00:10:03C'est une excellente nouvelle. Pouvez-vous me donner votre nom et votre date de naissance ?
00:10:08Bien sûr, c'est Elise Trial. Date de naissance, 2303.
00:10:15Merci. Êtes-vous une nouvelle patiente chez nous ?
00:10:24Oui. Bienvenue au cabinet gynécologique Bo. Puis-je vous envoyer un lien par SMS pour téléverser vos informations d'assurance ?
00:10:34D'accord. C'est envoyé. Prévenez-moi quand vous l'aurez reçu.
00:10:48J'ai bien reçu vos informations d'assurance. Le premier rendez-vous disponible est le jeudi
00:10:532 juillet à 10 h. Attendez, laissez-moi vérifier mon calendrier.
00:11:01Bien sûr, prenez votre temps. Avez-vous quelque chose pour la semaine prochaine ?
00:11:09Pour la semaine prochaine, je peux vous proposer une échographie avec le Dr Avery Stone à la clinique North le mardi
00:11:147 juillet à 14 h ou 15 h. L'un de ces créneaux vous convient-il ?
00:11:20Oui, 14 h me va. Parfait, votre rendez-vous est réservé. Nous avons hâte de vous voir.
00:11:29Merci, au revoir. Voilà, c'est à peu près tout.
00:11:35Vous pouvez voir que tout ce streaming et énormément de choses
00:11:43se produisent en arrière-plan. Et c'est précisément ce qui rend les agents vocaux passionnants.
00:11:48Il y a un travail considérable à fournir au niveau de la structure pour obtenir
00:11:55une conversation naturelle, ce que nous recherchons.
00:11:59Pour finir rapidement, je souhaite dire quelques mots sur Elise.
00:12:04Nos bureaux principaux sont à New York, et nous essayons d'étendre notre présence ici dans la Baie de San Francisco.
00:12:09C'est un style d'entreprise différent de ce que les gens s'imaginent lorsqu'ils pensent aux startups de l'IA à San Francisco,
00:12:23où nous sommes réellement très concentrés sur le simple fait d'aider les gens et de les aider là où ils en ont
00:12:31dans les domaines les plus critiques de la vie. Nous travaillons sur le logement, la santé, et nous réussissons très bien.
00:12:37Il y a un lien pour rejoindre notre équipe, et nous allons publier
00:12:45beaucoup de choses sur Twitter, vous pouvez donc nous suivre sur @Elyse.ai. Voilà, c'est tout.
00:12:57Nous allons publier un peu plus de contenus sur Twitter, et nous allons publier un peu plus de contenus sur Twitter.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기