Maak kennis met Eleven v4Maak kennis met Eleven v4, ons meest expressieve model tot nu toe.

Naar content

Maak kennis met KUBI, de conversationele robotbarista

Geschreven door
Thor Schaeff
Gepubliceerd
Laatst bijgewerkt

LuisterenLuister naar dit artikel

KUBI is een conversationele robotbarista en receptionist bij Second Space, een next-gen coworkingruimte die 24/7 geopend is in Kaohsiung, Taiwan. Omdat de workspace volledig geautomatiseerd wordt beheerd, is het belangrijk dat KUBI — als eerste contactpunt voor leden — een uniek, vriendelijk tintje toevoegt. Daarom koos Second Space voor Conversational AI van ElevenLabs om leuke, gedenkwaardige interacties met leden te creëren. Laten we KUBI in actie zien.

Zo werkt KUBI

KUBI gebruikt een geavanceerde multisensorische architectuur om mensachtige interactie te simuleren. Het systeem is gebaseerd op een microservicesarchitectuur, waarin gespecialiseerde services gelijktijdig werken en communiceren via een realtime-eventstream. Deze services voeren uiteenlopende taken uit, waaronder gezichts- en objectherkenning met realtime AI-inference, detectie van bekers en plausibiliteitscontroles via camera's, het printen van bonnetjes, veilige gezichtsherkenning voor toegangscontrole en nauwkeurige bediening van melk- en bonendispenser.

Dit zijn enkele services die gelijktijdig actief zijn:

  • Omgevings cameraservice: gebruikt realtime AI-inference (PyTorch in Python) om gezichten en objecten te herkennen.
  • Tablet cameraservice: lijkt hier sterk op, maar detecteert bekers op tafel en vreemde objecten, en voert plausibiliteitscontroles uit — bijvoorbeeld of de KUBI-robot daadwerkelijk een beker vasthoudt.
  • Bonnenprintservice: eenvoudig en betrouwbaar met Node + Typescript. Communiceert met een RS232-thermische printer.
  • Betalingsservice: gebouwd met Kotlin JVM voor betrouwbare concurrency en typeveiligheid. Verwerkt rapportage van overheidsbonnen en communicatie met een creditcardterminal, gateway voor cryptobetalingen of online betaalproviders. 
  • Melk- en bonendispenser: afzonderlijke precisieservices — Arduino. Tijdkritisch, met lage latency.
  • Gezichtsherkenning: veilige Kotlin-service met sterke typering, gebruikt voor toegangscontrole.
  • Waterstraalservice: reinigt melkkannetjes na gebruik automatisch — Arduino.
  • En diverse andere services, bijvoorbeeld voor de mobiele app-API, de menuweergave enzovoort…

Waarom al deze microservices? Simpel — we beheren ze onafhankelijk van elkaar, kunnen eenvoudig opschalen en gebruiken voor elke taak de beste tools.

Een centrale eventgestuurde kern die alles samenbrengt

Al deze microservices worden gecoördineerd door een centrale service die met een knipoog "BigBoy" heet. Het is in essentie een enorme, niet-blokkerende eventprocessor:

Zo werkt BigBoy:

  1. Luistert naar binnenkomende events van alle services.
  2. Controleert scenario's op geldige triggers.
  3. Selecteert het beste scenario.
  4. Plant acties in voor afspelen.

internal object WeatherIdleScenario: SingleTaskScenario(scenario){
   
    importance = Importance.Medium
    compilationTimeout = Time.ThreeSeconds
    interruptable = false
    exeutionExpiration = = Time.TenSeconds
   
    override fun isEligible(event: Event, environment: Environment): Maybe<Boolean> = withEnvironment(environment) {
        just {
            (event is IdleEvent 
                    && !triggeredInLast(40.minutes) 
                    && (personPresent() || hasActiveSessions) 
                    && environment.weatherService.lastReportWithin(10.minutes))
        }
    }
}

private val scenario = ScenarioRecipe { event, env, session ->


    invokeOneOf(
       
        phrase {
              sayWith { 
                "Rainy day today, isn't it? That's why I have my little umbrella! Look!".asEnglish
              }.withAutoGift().withAutoMotion()
        }.given { Weather.isRaining() },

        phrase {
            sayWith {
                "Friend, it's so cold outside! So sad for you... because you're a human. I don't really mind!".asEnglish
            }.withAutoMotion()

           sayWith {
                "Wait, that soudned a bit rude.".asEnglish
            }.withAutoMotion()

        }.given { Weather.isCold() },

    )


}

Wat zijn scenario's?

Zie scenario's als niet-blokkerende compilers voor robot action events. Een action event is doorgaans het meest downstream event: de laatste stap in een keten die leidt tot een fysiek effect, zoals beweging of spraak. Zo kan een begroetingsscenario het volgende activeren:

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

Eventgeneratie met LLM: Sommige action events worden automatisch door een LLM gegenereerd. Zo kiest withAutoMotion op basis van de gegeven context de beste beweging uit een vooraf gedefinieerde lijst. withAutoGif gebruikt een LLM om de meest geschikte tag voor de gegeven zin te genereren. De tag wordt gebruikt om een GIF op Giphy op te halen, die later samen met de zin op het gezicht van KUBI wordt weergegeven.

Synchronisatie van action events: Deze events gaan vervolgens door een scheduler die ervoor zorgt dat spraak, gezichtsuitdrukkingen en bewegingen gesynchroniseerd blijven. Dankzij de synchronisatie sluit KUBI's spraak perfect aan op zijn gebaren.

Flexibel en uitbreidbaar

Het mooie is dat scenario's zelfs kunnen luisteren naar action events en dynamisch nieuwe action events kunnen activeren. Bijvoorbeeld:

  • Als BigBoy SayEvent("Merry Christmas") detecteert, kan het automatisch feestverlichting en speciale effecten in de ruimte activeren.
  • Nog een mooi voorbeeld: als de gebruiker onze Mobiele app kiest om een bestelling te plaatsen, worden alle gebruikersinteracties (op een product klikken, betalen enzovoort) omgezet in events en kan BigBoy ook realtime reageren. Als de gebruiker bijvoorbeeld langs “Oatmilk Latte” scrolt, kan KUBI zeggen: “Weet je zeker dat je die Oatmilk Latte niet wilt? Hij is echt lekker!”

BigBoy ziet en weet letterlijk alles wat er gebeurt. Best cool, toch?

DevOps en observability

De meeste services worden lokaal gehost en draaien in een Docker-container. In de container wordt hun levenscyclus beheerd door het procesbeheersysteem Supervisor. Error logs worden verzameld in Sentry en doorgegeven aan een aangepaste admin app om uitzonderingen, de realtime status van services en sensoren, en latencyrapportages te monitoren. Het mooie is dat de Flutter-app voor 90% met AI is gegenereerd.

ElevenLabs gebruiken voor gedenkwaardige interacties

Second Space had een heel specifieke persoonlijkheid voor KUBI in gedachten: een mix van Deadpool, Wheatley uit de game Portal en een beetje Pathfinder uit Apex Legends. Ze slaagden erin om de stem te ontwerpen in 15 minuten, inclusief emoties en pauzes die de stem nog menselijker maken. 

ElevenLabs ondersteunt KUBI's spraakmogelijkheden met twee kern-API's:

Text-To-Speech (TTS)

  • Verwerkt ongeveer 90% van onze interacties.
  • Gebruikt vooraf ontworpen scenario's voor de juiste sfeer.
  • Berichten die door LLM's worden gegenereerd, kunnen worden gepersonaliseerd, met audio van hoge kwaliteit en de beste uitspraak, en zijn niet tijdkritisch.
  • Biedt bijzonder natuurlijke meertalige spraak in het Engels, Chinees, Spaans, Japans en zelfs Lets (Letse Deadpool, iemand?).

Conversational Mode (realtime)

Wanneer een klant zegt: "Hé KUBI!", kan Conversational AI van ElevenLabs binnen 200 ms reageren, waardoor de interactie echt menselijk aanvoelt.

  • Prioriteit: lage latency.
  • Ruilt een deel van de audiokwaliteit in voor reactiesnelheid.
  • Gebruikt de nieuwe realtime language_detection-tool van ElevenLabs om verschillende talen direct dynamisch te verwerken.
  • Een Conversational AI-sessie wordt op aanvraag gestart wanneer een lid de locatie binnenkomt of “Hé KUBI!” zegt.

Aangepaste Conversational Tools

Via een WebSocket-verbinding met Conversational AI van ElevenLabs kan KUBI function calling gebruiken, bijvoorbeeld: 

  • make_order: herkent bestellingen en stuurt events rechtstreeks naar BigBoy.
  • make_payment: brengt onze PaymentService direct op de hoogte om de creditcardautomaat voor betalingen te activeren.

Eenvoudig schakelen tussen verschillende LLM-modellen via het admin panel van ElevenLabs helpt Second Space het begrip en de nauwkeurigheid te optimaliseren, omdat we merkten dat verschillende modellen de tool-intents beter herkennen dan andere. Momenteel gebruiken ze Gemini 2.0 Flash als kernmodel voor Conversational AI en ChatGPT 4o voor statische spraakgeneraties.

KUBI uitbreiden naar extra markten

De eerste GitHub-commits van Second Space die naar ElevenLabs verwijzen, dateren uit januari 2023 — nog voordat het meertalige model werd uitgebracht. Ze herkenden al vroeg de toewijding van ElevenLabs aan kwaliteit en bouwden vol vertrouwen een architectuur die anticipeerde op toekomstige meertalige ondersteuning. Nu is toetreden tot markten zoals Japan en Zuid-Korea zo eenvoudig als een schakelaar omzetten — zonder extra ontwikkelwerk! 

Conclusie

Microservices, realtime events en de krachtige stemtechnologie van ElevenLabs laten KUBI echt tot leven komen en klaar zijn om de wereld te veroveren en te verrassen, één koffie en geestige interactie tegelijk. 

Geschreven door

A smiling man in a blue polo shirt and black cap standing outdoors in front of a modern building.

Thor Schaeff

Developer Experience

Vergelijkbare artikelen

Creëer met AI-audio van de hoogste kwaliteit