
Revolut selects ElevenLabs Agents to bolster customer support
Reducing time to ticket resolution by 8x with multilingual conversational agents.
KUBI to barista, który rozmawia z tobą dzięki Conversational AI od ElevenLabs. Zobacz, jak to działa.
KUBI to konwersacyjny robot-barista i recepcjonista w Second Space, nowoczesnej przestrzeni coworkingowej 24/7 w Kaohsiung na Tajwanie. Ponieważ wszystko działa tu automatycznie, KUBI — jako pierwszy kontakt z członkiem — musi dodać trochę ludzkiego ciepła. Dlatego Second Space wybrało nasze Conversational AI, żeby rozmowy z KUBI były fajne i zapadały w pamięć. Zobacz, jak działa KUBI.
KUBI korzysta z zaawansowanej, wielozmysłowej architektury, żeby naśladować ludzką rozmowę. Całość opiera się na architekturze mikroserwisów — każdy z nich działa osobno i komunikuje się przez strumień zdarzeń w czasie rzeczywistym. Serwisy odpowiadają m.in. za rozpoznawanie twarzy i obiektów przez AI, wykrywanie kubków i sprawdzanie poprawności przez kamery, drukowanie paragonów, bezpieczne rozpoznawanie twarzy do kontroli dostępu oraz precyzyjne sterowanie dozownikami mleka i ziaren.
Oto niektóre z serwisów, które działają jednocześnie:
Po co tyle mikroserwisów? Proste — każdy ogarniamy osobno, łatwo je skalować i możemy dobrać najlepsze narzędzia do każdego zadania.
Wszystkimi mikroserwisami zarządza centralny serwis, żartobliwie nazwany "BigBoy". To po prostu ogromny, nieblokujący procesor zdarzeń:
| 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 |
Czym są scenariusze?
Wyobraź sobie scenariusze jako nieblokujące kompilatory dla zdarzeń akcji. Zdarzenie akcji to zwykle ostatni krok w łańcuchu, który wywołuje fizyczny efekt, np. ruch lub mowę. Przykładowo, scenariusz powitania może wywołać:
Generowanie zdarzeń przez LLM: Niektóre zdarzenia akcji są generowane automatycznie przez LLM, np. withAutoMotion wybiera najlepszy ruch z listy na podstawie kontekstu. Z kolei withAutoGif używa LLM do wygenerowania najlepszego taga do danej frazy. Tag służy do pobrania GIF-a z Giphy, który pojawia się na twarzy KUBI razem z tekstem.
Synchronizacja zdarzeń akcji: Te zdarzenia trafiają do planera, który pilnuje, żeby mowa, mimika i ruchy były zsynchronizowane. Dzięki temu to, co mówi KUBI, idealnie pasuje do jego gestów.
Fajne jest to, że scenariusze mogą nawet nasłuchiwać zdarzeń akcji i wywoływać nowe zdarzenia akcji dynamicznie. Przykład:
BigBoy dosłownie widzi i wie wszystko, co się dzieje. Fajne, prawda?
Większość serwisów działa lokalnie w kontenerach dockera. Ich cyklem życia zarządza Supervisor. Logi błędów trafiają do Sentry i do naszej aplikacji admina, gdzie monitorujemy wyjątki, status serwisów i sensorów oraz opóźnienia. Co ciekawe, 90% aplikacji Flutter napisała AI.
Second Space miało konkretną wizję osobowości KUBI — trochę Deadpoola, Wheatleya z gry Portal i Pathfindera z Apex Legends. Udało im się zaprojektować głos w 15 minut — z emocjami i pauzami, które sprawiają, że brzmi bardzo ludzko.
KUBI mówi dzięki dwóm naszym API:
Włącza się, gdy klient powie "Hej KUBI!", Conversational AI od ElevenLabs odpowiada w 200 ms, więc rozmowa jest naprawdę naturalna.
Dzięki połączeniu WebSocket z Conversational AI od ElevenLabs, KUBI może korzystać z wywołań funkcji, np.:
Łatwe przełączanie modeli LLM przez panel admina ElevenLabs pozwala Second Space lepiej dopasować rozumienie i dokładność — zauważyliśmy, że różne modele lepiej rozpoznają intencje niż inne. Teraz używają Gemini 2.0 Flash jako głównego modelu do Conversational AI, a ChatGPT 4o do generowania statycznych wypowiedzi.
Pierwsze commity Second Space na GitHubie z ElevenLabs są z stycznia 2023 — zanim pojawił się model wielojęzyczny. Od początku docenili jakość ElevenLabs i zbudowali architekturę gotową na obsługę wielu języków. Teraz wejście na rynek Japonii czy Korei to kwestia jednego kliknięcia — bez dodatkowej pracy deweloperskiej!
Mikroserwisy, zdarzenia w czasie rzeczywistym i technologia głosu od ElevenLabs sprawiają, że KUBI naprawdę żyje i jest gotowy zachwycać świat — kawa po kawie, rozmowa po rozmowie.

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.