Passer au contenu

Découvrez KUBI, le robot barista conversationnel

KUBI est un barista conversationnel qui fonctionne avec la Conversational AI d’ElevenLabs. Voici comment.

A robotic arm holding a can of Red Bull energy drink against a blue background.

KUBI est un robot barista et réceptionniste conversationnel chez Second Space, un espace de coworking nouvelle génération ouvert 24h/24 à Kaohsiung, Taïwan. Comme tout fonctionne en autonomie, il est essentiel que KUBI — premier point de contact avec les membres — apporte une touche chaleureuse et unique. C’est pourquoi Second Space a choisi la Conversational AI d’ElevenLabs pour créer des échanges ludiques et mémorables avec les membres. Voyons KUBI en action.

Comment fonctionne KUBI

KUBI utilise une architecture multi-sensorielle avancée pour simuler une interaction humaine. Le système repose sur une architecture microservices, où chaque service spécialisé fonctionne en parallèle et communique via un flux d’événements en temps réel. Ces services gèrent différentes tâches : reconnaissance faciale et d’objets grâce à l’IA en temps réel, détection de tasses et vérifications via caméras, impression de reçus, reconnaissance faciale sécurisée pour le contrôle d’accès, et gestion précise des distributeurs de lait et de grains.

Voici quelques-uns des services qui tournent en parallèle :

  • Environnement Service Caméra : Utilise l’inférence IA en temps réel (PyTorch en Python) pour détecter visages et objets.
  • Tablette Service Caméra : Très similaire, mais détecte les tasses sur la table, les objets étrangers et vérifie que, par exemple, le robot KUBI tient bien une tasse.
  • Service Impression de Reçus : Simple et fiable avec Node + Typescript. Communique avec une imprimante thermique RS232.
  • Service Paiement : Développé en Kotlin JVM pour une bonne gestion de la concurrence et la sécurité des types. Gère la déclaration des reçus à l’administration et la communication avec un terminal de carte bancaire, une passerelle de paiement crypto ou des prestataires de paiement en ligne.
  • Distributeurs de lait & grains : Services de précision séparés — Arduino. Sensibles au temps, faible latence.
  • Reconnaissance Faciale : Service Kotlin sécurisé et fortement typé, utilisé pour le contrôle d’accès.
  • Service Jet d’Eau : Nettoie automatiquement les pichets à lait après usage — Arduino.
  • Et d’autres services, par exemple pour l’API de l’application mobile, l’affichage du menu, etc.

Pourquoi tous ces microservices ? Simple : on les gère séparément, on peut facilement les faire évoluer, et on utilise les meilleurs outils pour chaque tâche.

Un noyau central piloté par les événements pour tout coordonner

Pour coordonner tous ces microservices, un service central, surnommé avec humour "BigBoy", fait office de grand processeur d’événements non bloquant :

Voici comment fonctionne BigBoy :

  1. Écoute les événements entrants de tous les services.
  2. Vérifie les scénarios pour détecter les déclencheurs possibles.
  3. Sélectionne le meilleur scénario.
  4. Planifie les actions à exécuter.
1
2internal object WeatherIdleScenario: SingleTaskScenario(scenario){
3
4 importance = Importance.Medium
5 compilationTimeout = Time.ThreeSeconds
6 interruptable = false
7 exeutionExpiration = = Time.TenSeconds
8
9 override fun isEligible(event: Event, environment: Environment): Maybe<Boolean> = withEnvironment(environment) {
10 just {
11 (event is IdleEvent
12 && !triggeredInLast(40.minutes)
13 && (personPresent() || hasActiveSessions)
14 && environment.weatherService.lastReportWithin(10.minutes))
15 }
16 }
17}
18
19private val scenario = ScenarioRecipe { event, env, session ->
20
21
22 invokeOneOf(
23
24 phrase {
25 sayWith {
26 "Rainy day today, isn't it? That's why I have my little umbrella! Look!".asEnglish
27 }.withAutoGift().withAutoMotion()
28 }.given { Weather.isRaining() },
29
30 phrase {
31 sayWith {
32 "Friend, it's so cold outside! So sad for you... because you're a human. I don't really mind!".asEnglish
33 }.withAutoMotion()
34
35 sayWith {
36 "Wait, that soudned a bit rude.".asEnglish
37 }.withAutoMotion()
38
39 }.given { Weather.isCold() },
40
41 )
42
43
44}
45
46

Qu’est-ce qu’un scénario ?

Imaginez les scénarios comme des compilateurs non bloquants pour les événements d’action. Un événement d’action est généralement l’événement final d’une chaîne, qui provoque un effet physique, comme un mouvement ou une parole. Par exemple, un scénario de salutation peut déclencher :

SayEvent("Hello! Welcome!", wave.gif)
MotionEvent(HelloMotion)

Génération d’événements avec LLM : Certains événements d’action sont générés automatiquement par un LLM, par exemple, withAutoMotion choisit le meilleur mouvement dans une liste prédéfinie selon le contexte. Tandis que withAutoGif utilise un LLM pour générer le tag le plus adapté à la phrase donnée. Ce tag permet de récupérer un GIF sur Giphy, qui sera ensuite affiché sur le visage de KUBI avec la phrase.

Synchronisation des événements d’action : Ces événements passent ensuite par un planificateur qui garantit la synchronisation entre la parole, les expressions faciales et les mouvements. Cela permet à la voix de KUBI de toujours correspondre à ses gestes.

Flexible et évolutif

Ce qui est génial, c’est que les scénarios peuvent même écouter les événements d’action et déclencher de nouveaux événements d’action dynamiquement. Par exemple :

  • Si BigBoy détecte SayEvent("Joyeux Noël"), il peut automatiquement activer les lumières festives et des effets spéciaux dans la pièce.
  • Autre exemple sympa : si l’utilisateur passe commande via notre application mobile, toutes ses actions (cliquer sur un produit, payer, etc.) sont converties en événements et BigBoy peut réagir en temps réel. Par exemple, si l’utilisateur fait défiler “Oatmilk Latte”, KUBI pourrait dire « Vous êtes sûr de ne pas vouloir ce Oatmilk Latte ? Il est vraiment bon ! »

BigBoy voit et sait littéralement tout ce qui se passe. Plutôt cool, non ?

DevOps et observabilité

La plupart des services sont hébergés localement dans des conteneurs Docker. Leur cycle de vie est géré par le système Supervisor. Les logs d’erreur sont collectés dans Sentry et remontés dans une application d’administration personnalisée pour surveiller les exceptions, l’état en temps réel des services et capteurs, ainsi que la latence. Le plus cool, c’est que l’application Flutter a été générée à 90% par l’IA.

Utiliser ElevenLabs pour créer des interactions mémorables

Second Space avait une personnalité bien précise en tête pour KUBI : un mélange de Deadpool, Wheatley du jeu Portal et un peu de Pathfinder d’Apex Legends. Ils ont réussi à concevoir la voix en 15 minutes, avec émotions et pauses pour la rendre encore plus humaine.

ElevenLabs alimente les capacités vocales de KUBI grâce à deux API principales :

Text-To-Speech (TTS)

  • Gère environ 90% de nos interactions.
  • Utilise des scénarios préconçus pour une ambiance parfaite.
  • Les messages générés par les LLM peuvent être personnalisés, avec un son de haute qualité, la meilleure prononciation, sans contrainte de temps.
  • Propose une voix multilingue incroyablement naturelle en anglais, chinois, espagnol, japonais, et même letton (un Deadpool letton, ça tente quelqu’un ?).

Mode conversationnel (temps réel)

Activé quand un client dit "Hey KUBI!", la Conversational AI d’ElevenLabs peut répondre en 200ms, rendant l’échange vraiment naturel.

  • Priorité : Faible latence.
  • Sacrifie un peu de qualité audio pour la réactivité.
  • Utilise le nouvel outil language_detection d’ElevenLabs en temps réel, pour gérer instantanément différentes langues.
  • Une session de Conversational AI démarre à la demande quand un membre entre ou dit « Hey, KUBI ! »

Outils conversationnels personnalisés

Grâce à la Conversational AI d’ElevenLabs via WebSocket, KUBI peut utiliser le function calling, par exemple :

  • make_order : Reconnaît les commandes et envoie les événements directement à BigBoy.
  • make_payment : Prévient immédiatement notre PaymentService pour déclencher le terminal de paiement.

Changer facilement de modèle LLM via le panneau d’administration ElevenLabs aide Second Space à optimiser la compréhension et la précision, car on a remarqué que certains modèles reconnaissent mieux les intents que d’autres. Ils utilisent actuellement Gemini 2.0 Flash comme modèle principal pour la Conversational AI et ChatGPT 4o pour la génération de discours statique.

Déployer KUBI sur de nouveaux marchés

Les premiers commits GitHub de Second Space mentionnant ElevenLabs datent de janvier 2023 — avant même la sortie du modèle multilingue. Ils ont très tôt reconnu l’engagement d’ElevenLabs pour la qualité et ont construit une architecture anticipant le support multilingue. Aujourd’hui, s’ouvrir à des marchés comme le Japon ou la Corée du Sud est aussi simple qu’actionner un interrupteur — sans travail de développement supplémentaire !

Conclusion

Microservices, événements en temps réel et la technologie vocale puissante d’ElevenLabs donnent à KUBI une vraie personnalité, prêt à conquérir et ravir le monde, un café et une réplique à la fois.

Découvrez les articles de l'équipe ElevenLabs

Company
Eleven Album on a multicoloured background

Introducing The Eleven Album

A landmark musical release created in collaboration with world-class artists and powered by Eleven Music.

ElevenLabs

Créez avec l'audio AI de la plus haute qualité.

Se lancer gratuitement

Vous avez déjà un compte ? Se connecter