
Revolut selects ElevenLabs Agents to bolster customer support
Reducing time to ticket resolution by 8x with multilingual conversational agents.
KUBI ist ein sprechender Barista, der mit der Konversations-KI von ElevenLabs arbeitet. So funktioniert es.
KUBI ist ein sprechender Roboter-Barista und Empfangsroboter bei Second Space, einem modernen 24/7 Co-Working-Space in Kaohsiung, Taiwan. Da der Betrieb vollständig automatisiert ist, ist es besonders wichtig, dass KUBI als erste Kontaktstelle für Mitglieder eine persönliche Note einbringt. Deshalb setzt Second Space auf die Konversations-KI von ElevenLabs, um unterhaltsame und einprägsame Interaktionen zu ermöglichen. Sehen wir uns KUBI in Aktion an.
KUBI nutzt eine ausgefeilte multisensorische Architektur, um menschliche Interaktion zu simulieren. Das System basiert auf einer Microservices-Architektur, in der spezialisierte Dienste parallel laufen und über einen Echtzeit-Event-Stream kommunizieren. Diese Dienste übernehmen Aufgaben wie Gesichts- und Objekterkennung per Echtzeit-KI, Tassen- und Fremdkörpererkennung per Kamera, Belegdruck, sichere Gesichtserkennung für Zugangskontrolle sowie die präzise Steuerung von Milch- und Bohnenausgabe.
Diese Dienste laufen parallel:
Warum so viele Microservices? Ganz einfach: Wir verwalten sie unabhängig, skalieren flexibel und nutzen für jede Aufgabe das beste Tool.
Die Koordination aller Microservices übernimmt ein zentraler Dienst, scherzhaft "BigBoy" genannt. Im Kern ist es ein großer, nicht-blockierender Event-Prozessor:
| 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 |
Was sind Szenarien?
Szenarien sind wie nicht-blockierende Compiler für Roboter-Aktions-Events. Ein Aktions-Event ist meist das letzte Glied in einer Kette und führt zu einer physischen Aktion, etwa Bewegung oder Sprache. Ein Begrüßungsszenario könnte zum Beispiel Folgendes auslösen:
Event-Generierung mit LLM: Manche Aktions-Events werden automatisch von einem LLM erzeugt, zum Beispiel withAutoMotion wählt anhand des Kontexts die passende Bewegung aus einer vordefinierten Liste. Während withAutoGif ein LLM nutzt, um das passende Tag für eine Phrase zu generieren. Das Tag wird verwendet, um ein GIF bei Giphy abzurufen, das dann zusammen mit der Phrase auf KUBIs Gesicht angezeigt wird.
Synchronisierung von Aktions-Events: Diese Events laufen durch einen Scheduler, der sicherstellt, dass Sprache, Mimik und Bewegungen synchron bleiben. So passt KUBIs Sprache immer zu seinen Gesten.
Das Besondere: Szenarien können auch auf Aktions-Events reagieren und neue Aktions-Events dynamisch auslösen. Zum Beispiel:
BigBoy hat den kompletten Überblick über alles, was passiert.
Die meisten Dienste laufen lokal in Docker-Containern. Innerhalb des Containers steuert Supervisor den Lebenszyklus. Fehlerprotokolle werden in Sentry gesammelt und in eine eigene Admin-App eingespeist, um Ausnahmen, Echtzeitstatus der Dienste und Sensoren sowie Latenzberichte zu überwachen. Interessant: Die Flutter-App wurde zu 90 % von KI generiert.
Second Space hatte eine klare Persönlichkeit für KUBI im Kopf – eine Mischung aus Deadpool, Wheatley (Portal) und etwas Pathfinder (Apex Legends). Sie haben es geschafft, die Stimme zu gestalten – in nur 15 Minuten, inklusive Emotionen und Pausen, die die Stimme noch menschlicher machen.
ElevenLabs liefert KUBIs Sprachfähigkeiten über zwei zentrale APIs:
Wird aktiviert, wenn ein Kunde sagt: "Hey KUBI!". Die Konversations-KI von ElevenLabs antwortet in 200 ms, wodurch die Interaktion sehr natürlich wirkt.
Über die WebSocket-Verbindung zur Konversations-KI von ElevenLabs kann KUBI Funktionen aufrufen, zum Beispiel:
Das einfache Umschalten zwischen verschiedenen LLM-Modellen im ElevenLabs-Admin-Panel hilft Second Space, Verständnis und Genauigkeit zu optimieren, da verschiedene Modelle die Tool-Intents unterschiedlich gut erkennen. Aktuell nutzen sie Gemini 2.0 Flash als Kernmodell für Konversations-KI und ChatGPT 4o für statische Sprachgenerierung.
Die ersten GitHub-Commits von Second Space zu ElevenLabs stammen aus Januar 2023 – noch vor Veröffentlichung des mehrsprachigen Modells. Schon früh erkannten sie den Qualitätsanspruch von ElevenLabs und bauten eine Architektur, die zukünftige Mehrsprachigkeit berücksichtigt. Jetzt ist der Markteintritt in Länder wie Japan oder Südkorea nur noch eine Sache des Umschaltens – ohne zusätzlichen Entwicklungsaufwand.
Microservices, Echtzeit-Events und die leistungsstarke Sprachtechnologie von ElevenLabs machen KUBI lebendig – bereit, die Welt mit Kaffee und cleveren Interaktionen zu begeistern.

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.