Presentamos Eleven v4Conoce Eleven v4, nuestro modelo más expresivo hasta la fecha.

Ir al contenido

Conoce a KUBI, el robot barista conversacional

Escrito por
Thor Schaeff
Publicado
Última actualización

EscucharEscucha este artículo

KUBI es un robot barista y recepcionista conversacional en Second Space, un espacio de coworking de nueva generación abierto 24/7 en Kaohsiung, Taiwán. Como el funcionamiento del espacio está totalmente automatizado, es muy importante que KUBI —como primer punto de contacto con miembros— aporte un toque cercano y único. Por eso, Second Space eligió la IA Conversacional de ElevenLabs para crear interacciones divertidas y memorables con miembros. Veamos a KUBI en acción.

Cómo funciona KUBI

KUBI utiliza una sofisticada arquitectura multisensorial para simular una interacción similar a la humana. El sistema se basa en una arquitectura de microservicios, en la que servicios especializados funcionan simultáneamente y se comunican mediante un flujo de eventos en tiempo real. Estos servicios gestionan diversas tareas, como el reconocimiento facial y de objetos mediante inferencia de IA en tiempo real, la detección de vasos y comprobaciones de coherencia con cámaras, la impresión de recibos, el reconocimiento facial seguro para el control de acceso y el control preciso de los dispensadores de leche y café en grano.

Estos son algunos de los servicios que se ejecutan simultáneamente:

  • Servicio de cámara del entorno: utiliza inferencia de IA en tiempo real (PyTorch en Python) para detectar rostros y objetos.
  • Servicio de cámara de la tablet: muy similar, pero detecta tazas sobre la mesa y objetos extraños, y verifica que todo sea coherente; por ejemplo, que el robot KUBI esté sujetando una taza de verdad.
  • Servicio de impresión de recibos: Simple y fiable, con Node + Typescript. Se comunica con una impresora térmica RS232.
  • Servicio de pagos: Creado con Kotlin JVM para ofrecer una concurrencia sólida y seguridad de tipos. Gestiona la declaración de recibos ante organismos públicos y las comunicaciones con un terminal de tarjetas de crédito, una pasarela de pagos con criptomonedas o proveedores de pagos online. 
  • Dispensadores de leche y café en grano: Servicios independientes de precisión — Arduino. Sensibles al tiempo y de baja latencia.
  • Reconocimiento facial: Servicio de Kotlin seguro y con tipado fuerte, utilizado para el control de acceso.
  • Servicio de chorro de agua: Limpia automáticamente las jarras para espumar leche después de usarlas — Arduino.
  • Y otros servicios, por ejemplo, para la API de la app móvil, la visualización del menú, etc.…

¿Por qué tantos microservicios? Fácil: los gestionamos de forma independiente, escalamos con facilidad y usamos las mejores herramientas para cada tarea.

Un núcleo central basado en eventos para unirlo todo

Un servicio central, llamado humorísticamente "BigBoy", coordina todos estos microservicios. Es, en esencia, un enorme procesador de eventos sin bloqueos:

Así funciona BigBoy:

  1. Escucha los eventos entrantes de todos los servicios.
  2. Comprueba los escenarios para detectar activadores válidos.
  3. Selecciona el mejor escenario.
  4. Programa las acciones para su ejecución.

internal object WeatherIdleScenario: SingleTaskScenario(scenario){
   
    importance = Importance.Medium
    compilationTimeout = Time.ThreeSeconds
    interruptable = false
    exeutionExpiration = = Time.TenSeconds
   
    override fun isEligible(event: Event, environment: Environment): Maybe<Boolean> = withEnvironment(environment) {
        just {
            (event is IdleEvent 
                    && !triggeredInLast(40.minutes) 
                    && (personPresent() || hasActiveSessions) 
                    && environment.weatherService.lastReportWithin(10.minutes))
        }
    }
}

private val scenario = ScenarioRecipe { event, env, session ->


    invokeOneOf(
       
        phrase {
              sayWith { 
                "Rainy day today, isn't it? That's why I have my little umbrella! Look!".asEnglish
              }.withAutoGift().withAutoMotion()
        }.given { Weather.isRaining() },

        phrase {
            sayWith {
                "Friend, it's so cold outside! So sad for you... because you're a human. I don't really mind!".asEnglish
            }.withAutoMotion()

           sayWith {
                "Wait, that soudned a bit rude.".asEnglish
            }.withAutoMotion()

        }.given { Weather.isCold() },

    )


}

¿Qué son los escenarios?

Piensa en los escenarios como compiladores sin bloqueos para los eventos de acción del robot. Un evento de acción suele ser el evento más final, es decir, el último paso de una cadena que produce un efecto físico, como un movimiento o una intervención hablada. 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 mediante un LLM. Por ejemplo, withAutoMotion elegiría el mejor movimiento de una lista predefinida según el contexto. Por su parte, withAutoGif utiliza un LLM para generar la etiqueta más adecuada para la frase. La etiqueta se usa para obtener un GIF de Giphy, que más tarde se mostrará en la cara de KUBI junto con la frase.

Sincronización de eventos de acción: Estos eventos pasan después por un planificador que garantiza que la voz, las expresiones faciales y los movimientos permanezcan sincronizados. La sincronización hace que lo que dice KUBI encaje perfectamente con sus gestos.

Flexible y ampliable

Lo mejor 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 buen ejemplo: si el usuario elige nuestra app móvil para hacer un pedido, todas sus interacciones —hacer clic en un producto, realizar un pago, etc.— se convierten en eventos y BigBoy también puede reaccionar en tiempo real. Por ejemplo, si el usuario pasa de largo por «Oatmilk Latte», KUBI podría decir: «¿Seguro que no quieres ese Oatmilk Latte? ¡Está buenísimo!».

BigBoy literalmente ve y sabe todo lo que está pasando. Genial, ¿verdad?

DevOps y observabilidad

La mayoría de los servicios se alojan localmente y están encapsulados en un contenedor Docker. Dentro del contenedor, su ciclo de vida lo gestiona el sistema de control de procesos Supervisor. Los registros de errores se recopilan en Sentry y se envían a una aplicación de administración personalizada para supervisar excepciones, el estado en tiempo real de los servicios y sensores, así como los informes de latencia. Lo mejor es que el 90 % de la app de Flutter se generó con IA.

Usar ElevenLabs para crear interacciones memorables

Second Space tenía en mente una personalidad muy concreta para KUBI: una mezcla de Deadpool, Wheatley del juego Portal y un poco de Pathfinder de Apex Legends. Consiguieron diseñar la voz en 15 minutos, con emociones y pausas que la hacen aún más humana. 

ElevenLabs impulsa las capacidades de voz de KUBI mediante dos APIs principales:

Texto a Voz (TTS)

  • Gestiona aproximadamente el 90 % de nuestras interacciones.
  • Utiliza escenarios prediseñados para crear el ambiente perfecto.
  • Los mensajes generados por LLM pueden personalizarse, con audio de alta calidad y la mejor pronunciación, cuando el tiempo no es crítico.
  • Ofrece una voz multilingüe increíblemente natural en inglés, chino, español, japonés e incluso letón (¿Deadpool en letón, alguien?).

Modo conversacional (en tiempo real)

Cuando un cliente dice "¡Hola, KUBI!", la IA Conversacional de ElevenLabs puede responder en 200 ms, haciendo que la interacción se sienta realmente humana.

  • Prioridad: baja latencia.
  • Sacrifica algo de calidad de audio para ganar capacidad de respuesta.
  • Utiliza la nueva herramienta language_detection en tiempo real de ElevenLabs para gestionar dinámicamente distintos idiomas al instante.
  • La sesión de IA Conversacional se inicia bajo demanda cuando un miembro entra en las instalaciones o dice «¡Hola, KUBI!».

Herramientas conversacionales personalizadas

Al utilizar la IA Conversacional de ElevenLabs mediante una conexión WebSocket, KUBI puede aprovechar las llamadas a funciones, por ejemplo: 

  • make_order: Reconoce pedidos y envía eventos directamente a BigBoy.
  • make_payment: Avisa de inmediato a nuestro PaymentService para activar el terminal de tarjetas de crédito para los pagos.

Cambiar fácilmente entre distintos modelos de LLM desde el panel de administración de ElevenLabs ayuda a Second Space a optimizar la comprensión y la precisión, ya que hemos observado que algunos modelos reconocen mejor que otros las intenciones de las herramientas. Actualmente utilizan Gemini 2.0 Flash como modelo principal para la IA Conversacional y ChatGPT 4o para las generaciones de voz estáticas.

Expandir KUBI a nuevos mercados

Los primeros commits de GitHub de Second Space que hacen referencia a ElevenLabs se remontan a enero de 2023, incluso antes del lanzamiento del modelo multilingüe. Reconocieron pronto la dedicación de ElevenLabs a la calidad y desarrollaron con confianza una arquitectura que anticipaba una futura compatibilidad multilingüe. Ahora, entrar en mercados como Japón y Corea del Sur es tan sencillo como pulsar un interruptor: no hace falta trabajo de desarrollo adicional. 

Conclusión

Los microservicios, los eventos en tiempo real y la potente tecnología de voz de ElevenLabs hacen que KUBI parezca realmente vivo y esté listo para conquistar y deleitar al mundo, café a café e interacción ingeniosa a interacción ingeniosa. 

Escrito por

A smiling man in a blue polo shirt and black cap standing outdoors in front of a modern building.

Thor Schaeff

Developer Experience

Artículos relacionados

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