Conservamos con Cristian Alarcón sobre su creación, el robot EVA. Él es ingeniero informático de profesión, y dueño de su propio canal de YouTube Hexacris, un canal dedicado a la tecnología de consumo. Cuenta con experiencia en diversos campos de programación, y a su vez, en sus tiempos libres se dedica a la creación de contenido accesible para todos en su canal.
Cristian ha explorado diversas facetas como creador de contenidos en el segmento de tecnología, y como apasionado y dedicado a la misma, surgió la idea de crear EVA, un modelo conceptual con Inteligencia Artificial (IA) que tiene la capacidad de expresar hasta 13 emociones (por ahora), según su creador.
Mi dedicación a la tecnología se refleja en la creación de EVA, un robot humanoide diseñado para interactuar de manera más natural y emocional con los humanos.
Cristian Alarcón
El ingeniero destaca que su creación la gracia de almacenar conversaciones de manera local, y a su vez, evocarlas, para utilizarlas como fuentes de sus respuestas, en el papel va aprendiendo en la medida que se hable con él.
Una de las características más distintivas de EVA es una pantalla LCD que le permite mostrar expresiones faciales acordes a sus respuestas. Todo esto construido, sobre modelos de GenAI como GPT-4o y Whisper de OpenAI.
Motivación detrás del robot EVA
Cristian define así a su robot humanoide EVA:
EVA es un robot humanoide de compañía que tiene la capacidad de almacenar y recordar conversaciones de manera local. Su hardware incluye una Raspberry Pi 4, una pantalla LCD para mostrar expresiones faciales, un micrófono USB, parlante USB, varios servomotores compatibles con piezas Lego para la movilidad, entre otros. La inteligencia artificial de EVA está impulsada por modelos avanzados como GPT-4o y Whisper de OpenAI, que facilitan la interacción y la comprensión del lenguaje natural.
¿Cómo surgió la idea de hacer esta prueba de concepto? ¿Es el futuro de los asistentes de voz?
La idea surgió de querer tener a un pequeño robot propio, que fuese carismático y te dieran ganas de conversar con él, contarles tus experiencias y a su vez, recordara estas; más que el dar órdenes, que es lo más común que hacemos normalmente con los asistentes virtuales.
¿Cuál fue tu motivación detrás de este proyecto?
Mi mayor motivación es la pasión hacia la ciencia ficción, desde pequeño me ha llamado mucho la tecnología y siento que los robots de esta categoría de alguna forma combinan todos los conceptos y aspectos de esta, la parte de darle movimiento fue para hacerla sentir más viva. Hoy en día es una parte crucial de los asistentes de voz como Google Assistant, Alexa o Siri.
¿Cuánto tiempo te tomó el desarrollo completa de la idea de EVA?
Un año de desarrollo fue lo que me tomó, iba avanzando en mis tiempos libres, por lo que no es algo en lo que estuve enfocado a tiempo completo, también algunos periodos fueron bloqueantes mientras esperaba alguna pieza o componente que debía importar.
La integración de ChatGPT y las Raspberry Pi como parte del núcleo del proyecto del Robot de Compañía EVA
Tal como explicó Cristian Alarcón, el proyecto completo llevó más de un año, con algunos aciertos y otros procesos iterativos para lograr el acabado deseado. Sin embargo, el core detrás de todo del proyecto EVA fue lograr que ChatGPT funcionara desde la Raspberry, mediante algoritmos propios creados 100% sobre Python.
¿Por qué usaste ChatGPT como herramienta de IA?
ChatGPT fue el punto de partida, ese impulso que necesitaba para plasmar mi idea, al ser el modelo de lenguaje de gran tamaño (LLM) más universal…[] que más las facilidades que entrega a los desarrolladores con su API son el combo perfecto para idear proyectos con IA.
Tal como lo indica Cristian, ChatGPT es un chatbot basado en inteligencia artificial generativa, muy reconocido a nivel mundial. Es tan simple como conversar con alguien, se le hace preguntas, y él entrega respuestas con base a los datos que fue entrenado. Se pueden ir afinando las respuestas, en la medida que uno vaya pidiendo más especificidad o bien que ChatGPT las complemente.
¿Cuáles son las características que al robot lo hacen único respecto del resto?
El aspecto puede ser lo primero que entra por la vista, pero lo que más destacaría es la habilidad de cambiar su rostro de acuerdo a la respuesta del LLM. Por otra parte, está la habilidad de almacenar todas las conversaciones que tengas con él y a su vez responder con base en ello. Esto de alguna forma genera una «conciencia artificial» que en la versión web o app de ChatGPT está mucho más limitada.
En términos de GenAI, la LLM es una abreviatura de «Large Language Model» (Modelo de Lenguaje Grande), que hace referencia a un modelo de inteligencia artificial entrenado con volumen de datos textuales, con esto le permite a la máquina ‘comprender’ y generar lenguaje como si fuera una persona natural.
Los LLM están basados en redes neuronales (simulación matemática más precisa de cómo funciona el cerebro humano), tienen la capacidad de procesar y crear textos con un sentido muy amplio y en general, muy coherente.
Que EVA trabaje con ChatGPT y a la vez tenga la capacidad de ir guardando las nuevas conversaciones, permite, de algún modo, su reentrenamiento diario con las nuevas respuestas que se le va entregando. En el papel el robot irá aprendiendo de ti y tus hábitos con el paso de los días, de ahí que Cristian mencioné que se trate de una «conciencia artificial».
¿En qué te basaste para el diseño y construcción del robot?
El diseño es completamente propio…[] Me atrevo a decir que no tiene alguna inspiración alguna. Lo que sí puedo mencionar que mi intención siempre fue que tuviese un aspecto humanoide por muy complicado que fuese (en especial la capacidad de caminar y sostener su propio peso).
También revisé muchos diseños en la web, ninguno me convenció por lo que todos los rostros fueron manipulados por software de edición de imagen para dar con el aspecto final de cada animación.
De los componentes del Robot EVA, su corazón es una Raspberry Pi, que es la que contiene el código que la hace parecer viva. La Raspberry tiene capacidad WiFi, que le permite conectarse a internet, y mediante la API, hacer la consulta a ChatGPT.
El principal componente es una Raspberry Pi 4 de 8 GB, alimentada por una UPS con baterías de litio, la cara es una pantalla LCD de 1.28″ redonda, un micrófono USB para captar la voz, tarjeta de sonido USB más un parlante, 2 servo motores de 270° para los brazos y 1 servo motor de 360° para las piernas, que van conectados a un servocontrolador.
En cuanto al cuerpo, Cristian destaca que son piezas de Lego de dos diferentes series, además, los servos son compatibles con estas piezas de Lego Boost, que es un kit ideado para los niños puedan crear unidades robóticas básicas que incluyen motores y sensores, así como un kit básico de programación para darles vida.
El cuerpo está construido con piezas Lego, y corresponde a una mezcla de las que tenía más dos modelos, Lego Boost y de un robot Lego de Aliexpress (con un diseño totalmente distinto).
Es muy clara la diferencia entre Boost y la versión final de EVA. Cristian logró resolver el tema de la expresión de manera brillante, con una pantalla LED que «expresa sentimientos», situación que el original no hace. Y por supuesto llevarlo a un nivel mucho más alto, con capacidad de IA y con un mini PC (Raspberry) real como corazón.
¿Qué software y qué procesamiento de lenguaje natural integraste en el EVA?
El código del EVA es 100% Python, que se ejecuta una vez iniciada la Raspberry. A su vez, en un comienzo integré gpt-3.5-turbo, luego gpt-4o por ser el LLM más apto por su latencia y menor costo.
Además, también hace uso de otro LLM, cuya función es embeber las respuestas anteriores, llamado text-embedding-3-small también de OpenAI.
¿Cómo logras la integración con ChatGPT en la nube o local?
Mayor parte ocurre en la nube por las capacidades limitadas de la Raspberry en cuanto a cómputo (especialmente por no contar con NPU).
Una cosa hay que tener en cuenta, correr de manera local ChatGPT es prácticamente imposible debido a los requerimientos de hardware, y por supuesto, por el tiempo de proceso y respuesta que se requiere. Si esto lo llevamos a la Raspberry, literalmente es imposible, de ahí que mediante WiFi y una API se conecte a internet para correr el LLM.
El diagrama de flujo del funcionamiento del EVA
El robot creado por Cristian tiene más de un año de trabajo en programación. Todo su desarrollo conceptual abarca muchos conceptos, y diferentes tipos de LLM que mezcla con maestría para entregar el resultado final que vemos en fotos y videos.
Todo su trabajo detrás de los «fierros», se resumen en el siguiente diagrama de flujo del proyecto:
Más de alguno habrá experimentado con los Atari cuando podíamos ingresar un texto, y este era capaz de retornar el texto a voz. Más adelante, a finales de la década de 1997, IBM creó ViaVoice, un software que era capaz de reconocer dictados en textos. De hecho, fue una de las presentaciones que se robó todas las miradas cuando fue presentada en la Subtel de ese entonces.
Voz a texto, hoy forma parte habitual de algunos smartphones, y más recientemente, a finales de 2023, Samsung anunciaba con bombos y platillos, que el S24 que se lanzaría en enero, tendría la capacidad de la traducción simultánea, y en tiempo real, mientras conversas en otros idiomas.
Desde entonces, la situación ha evolucionado significativamente, permitiendo el acceso a numerosas bibliotecas preexistentes que se pueden utilizar como herramientas. Un ejemplo de esto es la biblioteca de reconocimiento de voz en Python, conocida como SpeechRecognition, que convierte el audio en texto.
¿Cómo lograste o qué herramienta lograste procesar la voz a texto?
Para captar las preguntas, usé la librería de Python SpeechRecognition, desarrollada por Google. Esta librería permite convertir el audio capturado por un micrófono en texto, es multiidioma y utiliza algoritmos avanzados de reconocimiento de voz con opciones de personalización para los desarrolladores.
El audio generado por SpeechRecognition pasa por la librería Whisper desarrollada por OpenAI (speech-to-text) para transformar el audio en texto
La siguiente etapa del proceso de funcionamiento, va un poco más allá de lo que la mayoría conoce con inteligencia artificial generativa. Cristian destaca que usa una técnica llamada RAG (Retrieval Augmented Generation o Recuperación Aumentada de Generación), que permite combinar las ventanas tradicionales de recuperación de data de base de y usarlas con los LLM, sin necesidad de volverlos a entrenar con esta nueva información.
En otras palabras, RAG le permite al LLM entrenado, usar las bases de datos de todo internet, para mejorar sus respuestas, sin que haya sido entrenadas con estas.
Sin esta técnica, los lenguajes como ChatGPT, solo entregarían respuestas con base en lo que fueron entrenados. Con el uso de RAG, el Robot EVA es capaz de almacenar la data de las conversaciones pasadas en base de datos autorizadas, para que este pueda usarlas como nueva fuente de información, sin volver a entrenar el LLM.
El texto obtenido se envía como pregunta al modelo de lenguaje (LLM) utilizando la técnica de Recuperación Aumentada de Generación (RAG). RAG combina el poder de los modelos de lenguaje con bases de datos personalizadas, en este caso, las conversaciones almacenadas localmente. Esto es posible gracias a FAISS de Meta, una biblioteca que facilita la búsqueda de texto embebido.
FAISS (Facebook AI Similarity Search) es otra de las avanzadas herramientas que son usadas en el Robot EVA. FAISS es una biblioteca creada por Meta (Facebook) sobre Python que permite a los programadores, buscar cadenas de textos que sean similares entre sí dentro de documentos, sitios webs, entre otros.
Esta solución es clave, ya que permite realizar operaciones de búsquedas en base de datos o documentos, que mediante búsquedas clásicas son prácticamente imposibles, técnicamente corresponde a una búsqueda vectorial.
Dado un conjunto de vectores, que son el resultado de las conversaciones de Cristian y EVA, serán indexados por FAISS. Del mismo modo, cuando se realiza una pregunta, esta se vectoriza (vector de consulta); se compara con lo que ya está indexado, y se obtienen resultados acordes a la consulta.
¿Puedes explicar la razón del uso de un modelo de recuperación (RAG) con un modelo de LLM para el proyecto?
El uso de RAG en EVA permite tener respuestas más personalizadas basadas en la data almacenada. La idea surgió de la necesidad de crear un robot que pudiera recordar y aprender de las interacciones pasadas. RAG optimiza el proceso de almacenaje mediante el uso de FAISS para indexar y recuperar información rápidamente, es una tecnología pensada para este uso ya que si se utilizara de una base de datos convencional ya sea relacional o documental sería mucho más lenta, por otra parte, ChatGPT genera las respuestas coherentes y contextuales para posteriormente ser procesadas.
¿La base de datos es local o global? ¿Cuál es el porqué de esta decisión?
La «base de datos» de EVA es local, las preguntas y respuestas son almacenadas en la tarjeta Micro SD de la Raspberry Pi. Esta decisión se tomó con el fin de que el robot no tuviera un volumen mayor al que ya posee, además recordar que por debajo corre Linux, un sistema más liviano sin carga alguna más que el script que diseñé.
EVA parece que estuviera vivo
Una de las características que visualmente llama la atención del Robot EVA, es su capacidad manifestar emociones acordes mediante su pantalla LCD, esto genera el efecto de que estuviera vivo. Cristian señala que esta característica es clave y se debe al uso de tareas en paralelos, mediante Python threading.
… [] La clave está en la combinación de varias acciones realizadas simultáneamente. EVA utiliza Python en su código base con un flujo de múltiples hilos (threads), permitiendo que diferentes procesos como la captura de audio, la transcripción, el análisis de sentimientos y la generación de respuestas ocurran en paralelo.
El EVA tiene la capacidad de realizar tareas independientes y paralelas, por ejemplo, una vez terminado el reconocimiento de voz a texto, se pueden realizar las siguientes operaciones de manera paralela:
- Inicializar la pantalla LCD con su animación respectiva
- Inicializar los servomotores con su programación de estado
- Entrar en modo escucha con su micrófono, entre otros
Cristian destaca que esta técnica le permite ahorros de recursos y disminución en el tiempo de respuesta:
Los threads son unidades de ejecución independientes que comparten recursos como la memoria y las variables globales. Esto permite que varias tareas se ejecuten simultáneamente, mejorando así la eficiencia y el rendimiento de tus aplicaciones.
Además, señala que esta biblioteca de Python es esencial para otorgar esa apariencia viva al Robot humanoide:
…[] mi solución para que EVA pudiera tener un «comportamiento» fue el exprimir al máximo esta librería para separar los procesos, sumado a la integración que realicé de otras librerías de Python compatibles con el hardware como la pantalla, micrófono, parlante y servomotores.
Añade que LangChain de Python es importante para poder trabajar e integrar diferentes LLM mejorando la respuesta, es decir, como trabaja con procesos en paralelo, realizando diferentes operaciones como:
- Indexar las respuestas anteriores mediante FAISS
- Ingresar un Prompt inicial para definir la personalidad de EVA
- Armar la cadena y formato para consultar a la API de ChatGPT, entre otros
Todos estos subprocesos en paralelo se juntan, y visualmente generan una sola respuesta coherente, que a la luz de las personas genera la sensación de que el robot de compañía está vivo:
La parte más crucial de la IA es la integración de LangChain que permite juntar varios LLM como si fuese una especie de embudo para generar la mejor respuesta (o como tu prefieras que sea), y finalmente, como resultado de todo esto, el robot luce más vivo y reactivo, combinando hardware y software, es también lo que diferencia en gran medida a un chatbot como usar ChatGPT en su versión web.
¿Cómo la máquina define qué sentimiento es el que debe aplicar en función de la respuesta?
Después de generar una respuesta con el LLM (usando gpt-4o), esta se vuelve a analizar utilizando el mismo modelo para determinar el sentimiento correspondiente de una lista predefinida de 13 emociones. Este proceso se realiza mediante el uso de una función personalizada mediante el uso de function_calling, característica que se añadió más o menos en junio de 2023. Recordar que siempre que exista ya una respuesta anterior también se hace uso de un modelo especial (text-embedding-3-small también de OpenAI) para embeber texto mediante la técnica de división de texto de carácter recursivo para lograr minimizar la consulta y los tiempos de respuesta a lo menor posible. Todo esto ocurre en tiempo real y así EVA tiene el contexto suficiente para una respuesta acorde.
Una IA más tangible y proyectos similares al Robot EVA
Cristian destaca que su proyecto llama mucho la atención en niños y en adultos mayores, puede ser por aspectos y el mismo hecho que su cara exprese sentimientos. ¿Podrías decir que esta es una de las aplicaciones más tangibles de la IA, en especial de la GenAI, para las personas de a pie?
EVA ha tenido un acercamiento en niños, y a los adultos mayores les llama mucho la atención, seguramente sea por su aspecto, pero también por las respuestas que da, se siente viva. Eso podría ser una excelente solución como elemento de compañía en adultos mayores o niños con autismo; las posibilidades quedan limitadas a la imaginación.
¿Qué les dirías a aquellos que quieran hacer proyectos parecidos al tuyo?
Los incentivo a que se atrevan, tenemos todas las herramientas necesarias al día de hoy para fabricar robots, no se necesita ser una empresa, el conocimiento es poder, solo hace falta llevarlo a la práctica…[] es lo que busco transmitir al crear a EVA, incluso es un ejemplo del buen uso de la IA porque utiliza un modelo totalmente controlado, por lo que sus respuestas siempre estarán en los límites establecidos.
¿Qué te parece el modelo conceptual de IA en el Robot EVA que expresa sentimientos?