Salta al contenido

Conoce a KUBI, el robot barista conversacional

KUBI es un barista conversacional que funciona con la Conversational AI de ElevenLabs. Descubre cómo.

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

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 Conversational AI 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:

  1. Escucha los eventos que llegan de todos los servicios.
  2. Comprueba escenarios para ver si hay desencadenantes válidos.
  3. Selecciona el mejor escenario.
  4. Programa acciones para ejecutarlas.
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

¿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:

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

Generación de eventos con LLM: Algunos eventos de acción se generan automáticamente con un LLM, por ejemplo, withAutoMotion selecciona el mejor movimiento de una lista predefinida según el contexto. Mientras que withAutoGif 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 200ms, 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 language_detection 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:

  • make_order: Reconoce pedidos y envía eventos directamente a BigBoy.
  • make_payment: 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 intents 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

ElevenLabs

Crea con audio con IA de la más alta calidad

Empieza gratis

¿Ya tienes una cuenta? Inicia sesión