
Conoce a KUBI, el robot barista conversacional
KUBI es un barista conversacional que funciona con la Conversational AI de ElevenLabs. Descubre cómo.
KUBI es un robot barista y recepcionista conversacional en Second Space, un espacio de coworking de última generación abierto 24/7 en Kaohsiung, Taiwán. Como todo el funcionamiento del espacio es totalmente automático, es fundamental que KUBI — primer punto de contacto con miembros — aporte un toque único y cercano. Por eso Second Space eligió la IA conversacional de ElevenLabs para crear interacciones divertidas y memorables con miembros. Vamos a ver a KUBI en acción.
Cómo funciona KUBI
KUBI utiliza una arquitectura multisensorial avanzada para simular una interacción similar a la humana. El sistema se basa en una arquitectura de microservicios, donde servicios especializados funcionan en paralelo y se comunican a través de un flujo de eventos en tiempo real. Estos servicios gestionan tareas como reconocimiento facial y de objetos mediante inferencia de IA en tiempo real, detección de tazas y comprobaciones de seguridad con cámaras, impresión de recibos, reconocimiento facial seguro para el control de acceso y control preciso de dispensadores de leche y café.
Estos son algunos de los servicios que funcionan en paralelo:
- Entorno Servicio de cámara: Utiliza inferencia de IA en tiempo real (PyTorch en Python) para detectar caras y objetos.
- Tablet Servicio de cámara: Muy similar, pero detecta tazas en la mesa, objetos extraños y verifica la seguridad, por ejemplo, si el robot KUBI realmente sostiene una taza.
- Servicio de impresión de recibos: Sencillo y fiable con Node + Typescript. Se comunica con una impresora térmica RS232.
- Servicio de pagos: Desarrollado con Kotlin JVM para una concurrencia sólida y seguridad de tipos. Gestiona la notificación de recibos al gobierno y la comunicación con terminales de tarjeta, pasarelas de pago con criptomonedas o proveedores de pagos online.
- Dispensadores de leche y café: Servicios de precisión independientes — Arduino. Sensibles al tiempo, baja latencia.
- Reconocimiento facial: Servicio seguro y fuertemente tipado en Kotlin, utilizado para el control de acceso.
- Servicio de chorro de agua: Limpia automáticamente las jarras de vapor de leche después de cada uso — Arduino.
- Y otros servicios, por ejemplo, para la API de la app móvil, visualización de menús, etc.
¿Por qué tantos microservicios? Muy sencillo: los gestionamos de forma independiente, escalamos fácilmente y usamos las mejores herramientas para cada tarea.
Un núcleo central basado en eventos para coordinarlo todo
Para coordinar todos estos microservicios hay un servicio central, llamado con humor "BigBoy". Es básicamente un procesador de eventos gigante y no bloqueante:
Así funciona BigBoy:
- Escucha los eventos que llegan de todos los servicios.
- Comprueba escenarios para ver si hay desencadenantes válidos.
- Selecciona el mejor escenario.
- Programa acciones para ejecutarlas.
| 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 |
¿Qué son los escenarios?
Piensa en los escenarios como compiladores no bloqueantes para eventos de acción del robot. Un evento de acción suele ser el evento más final, el último paso de una cadena, que produce un efecto físico, como un movimiento o una frase. Por ejemplo, un escenario de saludo podría activar:
MotionEvent(HelloMotion)
Generación de eventos con LLM: Algunos eventos de acción se generan automáticamente con un LLM, por ejemplo, con AutoMotion selecciona el mejor movimiento de una lista predefinida según el contexto. Mientras que con AutoGif usa un LLM para generar la etiqueta más adecuada para la frase. Esa etiqueta se utiliza para buscar un GIF en Giphy, que luego se muestra en la cara de KUBI junto con la frase.
Sincronización de eventos de acción: Estos eventos pasan por un planificador que asegura que el habla, las expresiones faciales y los movimientos estén sincronizados. Así, el habla de KUBI siempre coincide con sus gestos.
Flexible y ampliable
Lo interesante es que los escenarios pueden incluso escuchar eventos de acción y activar nuevos eventos de acción de forma dinámica. Por ejemplo:
- Si BigBoy detecta SayEvent("Feliz Navidad"), puede activar automáticamente luces festivas y efectos especiales en la sala.
- Otro ejemplo interesante: si el usuario utiliza nuestra app móvil para hacer un pedido, todas las interacciones (clic en un producto, pago, etc.) se convierten en eventos y BigBoy puede reaccionar en tiempo real. Por ejemplo, si el usuario pasa de largo el “Oatmilk Latte”, KUBI podría decir: “¿Seguro que no quieres ese Oatmilk Latte? ¡Está buenísimo!”
BigBoy literalmente ve y sabe todo lo que ocurre. Bastante curioso, ¿verdad?
DevOps y observabilidad
La mayoría de los servicios están alojados localmente y encapsulados en un contenedor docker. Dentro del contenedor, su ciclo de vida lo gestiona el sistema Supervisor. Los registros de errores se recogen en Sentry y se envían a una app de administración personalizada para monitorizar excepciones, estado en tiempo real de servicios y sensores, y latencia. Lo curioso es que el 90% de la app Flutter fue generada por IA.
Cómo usamos ElevenLabs para crear interacciones memorables
Second Space tenía una personalidad muy concreta en mente para KUBI: una mezcla de Deadpool, Wheatley del juego Portal y un toque de Pathfinder de Apex Legends. Consiguieron diseñar la voz en solo 15 minutos, con emociones y pausas que la hacen aún más humana.
ElevenLabs impulsa la capacidad de habla de KUBI a través de dos APIs principales:
Texto a Voz (TTS)
- Gestiona aproximadamente el 90% de nuestras interacciones.
- Utiliza escenarios predefinidos para lograr el ambiente perfecto.
- Los mensajes generados por LLM pueden personalizarse, con audio de alta calidad, la mejor pronunciación y sin ser críticos en tiempo.
- Ofrece voces multilingües increíblemente naturales en inglés, chino, español, japonés e incluso letón (¿alguien quiere un Deadpool letón?).
Modo conversacional (en tiempo real)
Se activa cuando un cliente dice "¡Hey KUBI!", la Conversational AI de ElevenLabs responde en 200 ms, haciendo que la interacción sea realmente natural.
- Prioridad: Baja latencia.
- Sacrifica algo de calidad de audio para ganar en rapidez.
- Utiliza la nueva herramienta de detección de idioma de ElevenLabs, que gestiona diferentes idiomas al instante.
- La sesión de Conversational AI se inicia bajo demanda cuando un miembro entra en el espacio o dice “Hey, KUBI!”
Herramientas conversacionales personalizadas
Usando la Conversational AI de ElevenLabs por WebSocket, KUBI puede aprovechar llamadas a funciones, por ejemplo:
- realizar pedido: Reconoce pedidos y envía eventos directamente a BigBoy.
- realizar pago: Notifica inmediatamente a nuestro PaymentService para activar el terminal de pago.
Cambiar entre diferentes modelos LLM fácilmente desde el panel de administración de ElevenLabs ayuda a Second Space a optimizar la comprensión y precisión, ya que hemos visto que distintos modelos reconocen las intenciones de las herramientas mejor que otros. Actualmente usan Gemini 2.0 Flash como modelo principal para Conversational AI y ChatGPT 4o para las locuciones estáticas.
Llevando KUBI a nuevos mercados
Los primeros commits de Second Space en GitHub mencionando ElevenLabs son de enero de 2023, incluso antes de que saliera el modelo multilingüe. Desde el principio vieron el compromiso de ElevenLabs con la calidad y crearon una arquitectura preparada para el soporte multilingüe futuro. Ahora, entrar en mercados como Japón o Corea del Sur es tan fácil como activar un interruptor — ¡sin trabajo extra de desarrollo!
Conclusión
Microservicios, eventos en tiempo real y la potente tecnología de voz de ElevenLabs hacen que KUBI parezca realmente vivo y listo para sorprender al mundo, un café y una conversación ingeniosa a la vez.
Descubre artículos del equipo de ElevenLabs


Introducing Experiments in ElevenAgents
The most data-driven way to improve real-world agent performance.

