
Revolut selects ElevenLabs Agents to bolster customer support
Reducing time to ticket resolution by 8x with multilingual conversational agents.
KUBI är en samtalande barista som använder ElevenLabs Conversational AI. Så här fungerar det.
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.
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:
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.
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:
| 1 | |
| 2 | internal 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 | |
| 19 | private 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:
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.
Det häftiga är att scenarier till och med kan lyssna på åtgärdshändelser och trigga nya åtgärdshändelser dynamiskt. Till exempel:
BigBoy har full koll på allt som händer. Rätt coolt, eller hur?
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.
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:
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.
Med ElevenLabs Conversational AI via WebSocket kan KUBI använda funktioner, till exempel:
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.
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!
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.

Reducing time to ticket resolution by 8x with multilingual conversational agents.
.webp&w=3840&q=95)
Yampa leverages ElevenLabs Flash V2.5 to scale human-like outbound voice agents with ultra-low latency and massive concurrency.