Gå till innehåll

Möt KUBI – den samtalande robotbaristan

KUBI är en samtalande barista som använder ElevenLabs Conversational AI. Så här fungerar det.

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

KUBI är en samtalande robotbarista och receptionist på Second Space, ett modernt co-working space som är öppet dygnet runt i Kaohsiung, Taiwan. Eftersom arbetsplatsen är helt automatiserad är det extra viktigt att KUBI – som första kontaktpunkt för medlemmarna – bidrar med en personlig och vänlig känsla. Därför valde Second Space ElevenLabs Conversational AI för att skapa roliga och minnesvärda möten med medlemmarna. Nu kollar vi in KUBI i action.

Så fungerar KUBI

KUBI använder en avancerad multisensorisk arkitektur för att efterlikna mänsklig interaktion. Systemet bygger på en microservices-arkitektur där specialiserade tjänster körs parallellt och kommunicerar via en realtidsbaserad eventström. Dessa tjänster hanterar bland annat ansikts- och objektigenkänning med AI i realtid, koppdetektering och kontroller via kameror, kvittoutskrifter, säker ansiktsigenkänning för inpassering samt exakt styrning av mjölk- och bönbehållare.

Här är några av tjänsterna som körs samtidigt:

  • Miljö Kameratjänst: Använder AI i realtid (PyTorch i Python) för att hitta ansikten och objekt.
  • Surfplatta Kameratjänst: Liknande, men upptäcker koppar på bordet, främmande föremål och kontrollerar att t.ex. KUBI faktiskt håller i en kopp.
  • Kvittoutskriftstjänst: Enkel och pålitlig med Node + Typescript. Kommunicerar med en RS232-termisk skrivare.
  • Betaltjänst: Byggd med Kotlin JVM för bra samtidighet och typkontroll. Hanterar rapportering av kvitton till myndigheter och kommunikation med kortterminal, kryptobetalningar eller onlinebetalningar.
  • Mjölk- & bönbehållare: Separata precisionstjänster — Arduino. Tidskänsliga, låg latens.
  • Ansiktsigenkänning: Säker och strikt typad Kotlin-tjänst, används för inpassering.
  • Vattenstråletjänst: Rengör automatiskt mjölkkannor efter användning — Arduino.
  • Och flera andra tjänster, t.ex. för mobilapp-API, menyskärm osv…

Varför alla dessa microservices? Enkelt — vi kan hantera dem var för sig, skala upp enkelt och använda bästa verktyget för varje uppgift.

En central eventdriven kärna som håller ihop allt

För att samordna alla dessa microservices finns en central tjänst, skämtsamt kallad "BigBoy". Det är i princip en stor, icke-blockerande eventprocessor:

Så här fungerar BigBoy:

  1. Lyssnar på inkommande events från alla tjänster.
  2. Kollar scenarier för möjliga triggers.
  3. Väljer bästa scenariot.
  4. Schemalägger åtgärder för uppspelning.
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

Vad är scenarier?

Tänk på scenarier som icke-blockerande kompilatorer för robotens åtgärdshändelser. En åtgärdshändelse är oftast det sista steget i en kedja, som leder till en fysisk effekt, som rörelse eller tal. Till exempel kan ett hälsningsscenario trigga:

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

Eventgenerering med LLM: Vissa åtgärdshändelser genereras automatiskt av en LLM, till exempel withAutoMotion som väljer bästa rörelsen från en fördefinierad lista utifrån sammanhanget. Medan withAutoGif använder en LLM för att ta fram den mest passande taggen för frasen. Taggen används för att hämta en GIF från Giphy, som sedan visas på KUBIs ansikte tillsammans med frasen.

Synkronisering av åtgärdshändelser: Dessa händelser går sedan genom en schemaläggare som ser till att tal, ansiktsuttryck och rörelser är synkade. Synkroniseringen gör att KUBIs tal matchar gesterna perfekt.

Flexibelt och utbyggbart

Det häftiga är att scenarier till och med kan lyssna på åtgärdshändelser och trigga nya åtgärdshändelser dynamiskt. Till exempel:

  • Om BigBoy upptäcker SayEvent("God Jul"), kan den automatiskt tända julbelysning och specialeffekter i rummet.
  • Ett annat exempel: om användaren väljer att beställa via vår mobilapp, omvandlas alla interaktioner (klick på produkt, betalning osv) till events och BigBoy kan reagera direkt. Om användaren till exempel scrollar förbi “Oatmilk Latte” kan KUBI säga “Är du säker på att du inte vill ha en Oatmilk Latte? Den är riktigt god!”

BigBoy har full koll på allt som händer. Rätt coolt, eller hur?

DevOps och övervakning

De flesta tjänster körs lokalt och ligger i en docker-container. I containern hanteras deras livscykel av Supervisor-processkontroll. Felflöden samlas i Sentry och skickas till en egen adminapp för att övervaka undantag, tjänsternas och sensorernas status i realtid samt latensrapporter. Det roliga är att Flutter-appen är 90% AI-genererad.

Så använder vi ElevenLabs för minnesvärda möten

Second Space hade en tydlig personlighet för KUBI i åtanke – en mix av Deadpool, Wheatley från Portal och lite Pathfinder från Apex Legends. De lyckades designa rösten på 15 minuter, komplett med känslor och pauser som gör rösten ännu mer mänsklig.

ElevenLabs driver KUBIs talfunktioner med två centrala API:er:

Text-To-Speech (TTS)

  • Hantera cirka 90% av våra interaktioner.
  • Använder fördesignade scenarier för rätt känsla.
  • Meddelanden från LLM kan anpassas, med högkvalitativt ljud och bästa uttal, inte tidskritiskt.
  • Erbjuder otroligt naturligt flerspråkigt tal på engelska, kinesiska, spanska, japanska och till och med lettiska (lettisk Deadpool, någon?).

Samtalsläge (realtid)

Aktiveras när en kund säger "Hej KUBI!", Conversational AI från ElevenLabs kan svara på 200ms, vilket gör att samtalet känns riktigt mänskligt.

  • Prioritet: Låg latens.
  • Byter ut lite ljudkvalitet mot snabb respons.
  • Använder ElevenLabs nya realtidsverktyg language_detection, som hanterar olika språk direkt.
  • Conversational AI-session startas vid behov när en medlem går in eller säger “Hej, KUBI!”

Egna samtalsverktyg

Med ElevenLabs Conversational AI via WebSocket kan KUBI använda funktioner, till exempel:

  • make_order: Känner igen beställningar och skickar events direkt till BigBoy.
  • make_payment: Meddelar direkt vår PaymentService att starta kortterminalen för betalning.

Att enkelt kunna byta mellan olika LLM-modeller i ElevenLabs adminpanel hjälper Second Space att optimera förståelse och träffsäkerhet, eftersom vi märkt att olika modeller tolkar verktygets intents bättre än andra. Just nu använder de Gemini 2.0 Flash som huvudmodell för Conversational AI och ChatGPT 4o för statiskt tal.

KUBI expanderar till fler marknader

Second Spaces första GitHub-commits med ElevenLabs är från januari 2023 – redan innan flerspråksmodellen släpptes. De såg ElevenLabs fokus på kvalitet tidigt och byggde ett system redo för framtida flerspråksstöd. Nu är det lika enkelt att gå in på marknader som Japan och Sydkorea som att trycka på en knapp – ingen extra utveckling krävs!

Sammanfattning

Microservices, realtidsevents och ElevenLabs kraftfulla röstteknik gör att KUBI känns levande och redo att sprida glädje och kaffe – en kopp och ett skämt i taget.

Utforska artiklar av ElevenLabs-teamet

ElevenLabs

Skapa ljud och röster som imponerar med de bästa AI-verktygen

Kom igång gratis

Har du redan ett konto? Logga in