TARDÍGRADOS

Ciencia en español -ʟᴀ ʀᴀᴢóɴ ᴇsᴛá ᴀʜí ғᴜᴇʀᴀ-

Inteligencia Artificial Generativa (AGI)

Posted by Albert Zotkin on April 26, 2023

Estos días está de actualidad hablar de Inteligencia Artificial, a raíz del lanzamiento mundial de los chat GPT de la Compañía OpenAI. Aproveché la ocasión para saber un poco más sobre en qué consisten esas aplicaciones, y si las puedo usar en mis paginas web. Así fue como descargué la APi de OpenAI para Node.js, adapté sus módulos al lenguaje JHS (desarrollado por mí) para escribir páginas web dinámicas, estilo PHP. La primera aplicación que encontré fue DALL-E, que es una GPT (Generative Pre-trained Transformer), subconjunto de AGI (Artificial Generative Intelligence), capaz de generar imágenes basadas en los textos que le entregues. Por ejemplo, le puedo dar un texto en inglés, o en cualquier otro idioma, y lo entenderá. Y le digo: “portrait of Dali like a van Gogh”, y esto es lo que te ofrece:

Por cierto, el nombre DALL-E, elegido por OpenAI para esta app GPT, está basado en el nombre Dalí, precisamente (Pues así es como se pronuncia en inglés). Veamos ahora algunos detalles técnicos de cómo hacer una ‘request’ por el método GET desde la página cliente al servidor. La app Dall-E está implementada en el módulo OpenAI para Node.js mediante una función asincrónica. Supongamos que mi servidor web lo pongo a la escucha en la URL https://localhost:8000, y la página cliente desde la que se hacen requests a DALL-E es la ‘openai/gen-img.jhs´. Necesitaremos una ‘query string’ con dos variables: una será la variable ‘prompt’, donde enviamos nuestro texto, y la otra la variable ‘size’, donde le diremos de qué tamaño queremos la imagen. Así, nuestra ‘request’ completa del ejemplo, suponiendo que queremos un tamaño mediano de imagen, será está:

'https://localhost:8000/openai/gen-img.jhs?prompt=portrait of Dali like a van Gogh& size=medium'

O si codificamos convemientemente la URl, lo cual sería bastante correcto:

https://localhost:8000/openai/gen-img.jhs?prompt=portrait%20of%20Dali%20like%20a%20van%20Gogh&%20size=medium

Cuando la request sea procesada por nuestro servidor con el método GET, generará el objeto queryobject = {prompt:’portrait of Dali like a van Gogh’, size:’medium’}, el cual es enviado como argumento a la función asincrónica

const response = await openai.createImage({prompt:queryobject.prompt, n: 1, size: queryobject.size});

donde el parámetro adicional n:1, lo dejamos constante, porque sólo queremos una copia de la imagen. Cuando DALL-E termina la tarea que le hemos pedido, nos devuelve el resultado de esta forma:

const result = response.data.data[0].url

es decir, nos envía una url de la imagen generada que tiene almacenada en la nube OpenAI (no nos envía todos los bytes en crudo de la imagen).
Si le volviéramos a enviar la misma request (mismo texto) el resultado sería distinto, pero siempre en contexto.

Otra de las aplicaciones de OpenAI que estuve viendo es la de chat. Más exactamente el modelo para chat ‘gpt-3.5-turbo’. En este caso la función asincrónica es

const response = await openai.createChatCompletion({model, messages});

. Es decir, que en la request de la pagina cliente enviamos dos variables, una será ‘messages’, para los mensajes de texto y nombre de usuario, y otra será ‘model’ para el modelo de GPT que estemos solicitando. El objeto ‘messages’ es un array de objetos compuesto cada uno por dos variables de cadena. Es decir,

messages =[
{role:'albert' , content:'hi assistant, how big is our universe?'},
{role:'albert' , content:'are black holes real?'},
{role:'albert' , content:'Does dark matter exist?'},
{role:'albert' , content:'is our universe a simulation?'},
...
]

. Esto lo hacen asi, para poder chatear con el usuario, poder mantener una conversación con él. La respuesta a cada mensaje que enviemos se extrae así:

 const result = response.data.choices[0].message.content;

Y para finalizar esta breve incursión en la AGI (Inteligencia Artificial Generativa) de OpenAI, combinemos ambas aplicaciones, que sucintamente he presentado, la DALL-E y el modelo GPT 3.5-turbo. A GPT 3.5-turbo le solicito lo siguiente:

 
messages =[
{role:'albert' , content:'hi assistant, can you write a short tale of a rabbit?'},
]

Una vez que leo ese breve cuento, sé que al propagonista le llama Benny, por lo tanto, propongo a DALL-E lo siguiente:

 
prompt:'draw a colorful young and curious rabbit eating a carrot style alice in wonderland'

Y El resultado combinado de ambas consultas es este:

Benny The Rabbit

Once upon a time, there was a young and curious rabbit named Benny. He had soft and white fur and big floppy ears that would bounce as he hopped around the meadow. Benny loved exploring and discovering new things.

One day, while venturing far away from his burrow, Benny found a patch of the sweetest and juiciest carrots he had ever seen. Excitedly, he began to munch on them, savoring their delicious taste.
However, Benny soon realized that he had wandered quite far from home and was now lost in a vast and unfamiliar landscape. The sun began to set, and Benny’s fear grew as the darkness enveloped him.
Just when Benny was about to give up hope, he heard a familiar voice calling his name – it was his mother! She had been searching for him and finally found him just in time.
Benny felt comforted and relieved, knowing that his mother cared for him and would always be there to guide him back home. From then on, Benny always remembered to stay close to his burrow and never venture too far away.

Authors:
script: ‘GPT-3.5-turbo’
illustrations: ‘DALL-E’

Leave a comment