Cómo construir una acción GPT personalizada para comunicarte con tu hardware

Ari Mahpour
|  Creado: March 25, 2024  |  Actualizado: April 1, 2024
Cómo construir una acción GPT personalizada para comunicarte con tu hardware

En los primeros días de ChatGPT (que en realidad no fue hace mucho tiempo), OpenAI evolucionó con diferentes maneras de acceder al internet externo mediante el uso de su LLM. Con Code Interpreter, uno podría usar Curl para acceder a un sitio web y extraer su contenido. Los complementos personalizados también permitían acceder a sitios web externos, pero requerían permisos especiales de OpenAI. OpenAI también agregó capacidades de navegación con Microsoft Bing que podían acceder a internet también. Sin embargo, todas estas opciones no resultaron ser muy sostenibles para el crecimiento y la demanda que los usuarios y desarrolladores exigían en los sistemas de OpenAI. Por lo tanto, OpenAI ha presentado recientemente una nueva plataforma llamada GPT Actions. GPT Actions te permite crear “GPTs” personalizados que pueden conectarse a diferentes servidores para proporcionar motores habilitados por IA sobre un servicio web existente.

Entonces, ¿qué significa todo esto para un ingeniero de hardware que pretende entender qué es la IA? ¿Cómo te suena el hardware controlado por IA? ¡Suena ominoso, potencialmente peligroso e increíblemente emocionante todo al mismo tiempo! En este artículo vamos a sumergirnos en cómo configurar un servidor web que se conectará a tu GPT Action. Incluso veremos cómo habilitar a ChatGPT para controlar los IOs en tu Raspberry Pi, abriendo la capacidad a muchos proyectos nuevos y emocionantes impulsados por IA a los que el ingeniero promedio nunca tuvo acceso... hasta ahora.

Cómo Funciona

Antes de sumergirnos en el código, es importante señalar que este es un campo en evolución y está cambiando rápidamente. También es una tecnología dependiente de OpenAI y requiere una suscripción a la versión de pago de ChatGPT. Es casi seguro que los competidores estarán lanzando sus versiones de “GPT Actions”, pero, en el momento de escribir este artículo, GPT Actions (en mi opinión) era la manera más sencilla de conectar un Modelo de Lenguaje Grande (LLM) completamente funcional a tu servicio web.

El concepto detrás de un servicio GPT Action es bastante sencillo. Apuntamos nuestro GPT personalizado a un servicio web, le decimos cuáles son las entradas y salidas, y lo dejamos correr. Sin embargo, la implementación resultó ser mucho más complicada de lo que había imaginado (lo que fue el impulso para escribir este artículo). Aquí hay un diagrama de cómo funciona el servicio:

Figura 1: Interacciones del Servidor

Figura 1: Interacciones del Servidor

Como puedes ver, proporcionamos a OpenAI un servicio web y un documento de interfaz (OpenAPI) que nos dice cómo interactuar con nuestro hardware. Comenzaremos con un ejemplo muy trivial que no involucra hardware y luego pasaremos a un simple ejemplo de conmutación de un LED.

Configuración de Servidor Seguro

Para los ingenieros de hardware que, en el mejor de los casos, están familiarizados con el software embebido, esta sección puede no ser tan trivial para ellos como lo sería para alguien que trabaja en TI o Infraestructura en la Nube. Como ingeniero tanto Eléctrico como de Software, configurar un servidor completamente encriptado con SSL fue un poco complicado para mí, principalmente porque hay muchas maneras de hacerlo. Desafortunadamente, esto es un requisito previo de OpenAI, así que vamos a tener que esforzarnos en ello. Si ya tienes una forma segura de alojar un servidor web (por ejemplo, terminación TLS en tu balanceador de carga) puedes saltarte esta sección. Como yo, la mayoría de las personas que leen este artículo querrán experimentar con su servidor doméstico. Ten en cuenta que aún necesitas abrir los puertos 80 y 443 al mundo exterior a través de la configuración de tu router. Las instrucciones sobre cómo configurar el firewall de tu router y el reenvío de puertos están fuera del alcance de este artículo, pero hay muchos recursos en línea que puedes encontrar para ayudarte con ello. Para comenzar necesitamos solicitar un certificado SSL. Esto se puede hacer usando servicios pagos (por ejemplo, Cloudfare), servicios de terceros gratuitos (por ejemplo, ZeroSSL), o un mecanismo directo usando Let’s Encrypt. En este tutorial vamos a usar Let’s Encrypt a través de certbot. También necesitarás un nombre de dominio que apunte a la dirección IP de tu servidor. Puedes comprar uno o conseguir un nombre DNS dinámico usando Cloudfare (pago) o No-IP (gratis). Ten en cuenta que reenviar tu nombre DNS dinámico a tu IP requiere un tipo de registro “A” y no redirección de URL. Para solicitar un certificado SSL de 90 días de Let’s Encrypt necesitaremos utilizar Certbot. Tienen ejecutables que pueden correr en cualquier sistema operativo. Vamos a ejecutar el comando más simple para adquirir los certificados. Aquí está el comando para adquirir el certificado:

sudo certbot certonly --standalone --agree-tos -v --preferred-challenges http -d tu_dominio.com

Si estás en Windows no usarás la parte del sudo. Asegúrate de reemplazar tu_dominio.com con el nombre de dominio comprado o el que recibiste del servicio de DNS dinámico (por ejemplo, No-IP). Se generará una carpeta que contiene una serie de archivos de certificado. En este punto es hora de clonar la plantilla del repositorio: https://gitlab.com/ai-examples/gpt-actions-webserver/. Mueve la carpeta generada por certbot al repositorio una vez que lo hayas clonado. Para que las redirecciones SSL funcionen correctamente (es decir, asegurando que todo el tráfico esté encriptado) querrás configurar Nginx. Crea una carpeta dentro de tu repositorio llamada nginx y un nuevo archivo llamado default.conf. Usando esta plantilla, reemplaza tu_dominio.com con el nombre de dominio que se usó cuando solicitaste tu certificado SSL usando certbot:


servidor {
    escucha 80;
    nombre_del_servidor tu_dominio.com;
    devuelve 301 https://$host$request_uri;
}

servidor {
    escucha 443 ssl;
    nombre_del_servidor tu_dominio.com;
 
    certificado_ssl /etc/ssl/certs/fullchain.pem;
    clave_certificado_ssl /etc/ssl/private/privkey.pem;
 
    ubicación / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Ejecutando la Aplicación

En este punto deberías tener la encriptación SSL correctamente configurada y lista para usar. Ahora vamos a centrarnos en la aplicación web básica que puede comunicarse con nuestro GPT personalizado. Puedes encontrar todo el código en el repositorio, así que solo destacaremos cómo ejecutarlo en lugar de los detalles minuciosos de lo que implica la aplicación.

Dada la naturaleza de un servicio web encriptado con SSL, he abstraído la aplicación web de la encriptación SSL real. Para hacer eso necesitamos Nginx, que redirige el tráfico y sirve los certificados que recibimos de Let’s Encrypt a través de Certbot. Para encapsular todo completamente en un paquete ordenado, lo he envuelto en un Docker Compose. Esto significa que necesitarás Docker para ejecutar este ejemplo. Es un poco engorroso y tedioso configurarlo inicialmente, pero hacia allí se dirige el software estos días, por lo tanto, un proyecto como este es un gran lugar para familiarizarse con Docker. Como nota al margen, todas las descripciones e instrucciones se han colocado en el archivo README.md dentro del repositorio. Siempre que hayas seguido los pasos anteriores deberías poder ejecutar docker compose up y todos los componentes (es decir, Nginx y la aplicación web) deberían construirse y comenzar a ejecutarse. Recuerda que esta aplicación es solo un simple ejemplo tipo "Hola Mundo" y se puede ejecutar desde cualquier lugar.

Después de ejecutar el comando docker compose up deberías ver una salida como esta:

Figura 2: Salida del Terminal

Figura 2: Salida del Terminal

Deberías probar tu aplicación navegando a http://localhost:8000. Verás una salida de prueba que dice {"status":"OK"}. También deberías ver el mismo resultado navegando a http://tu_dominio.com donde “tu_dominio.com” es el nombre de dominio que configuraste en el paso anterior. Para validar realmente que tus ajustes de router y dominio son correctos deberías probar esto fuera de tu red (por ejemplo, en tu teléfono celular con el WiFi apagado).

Configurando la Acción GPT

Ahora que hemos validado que nuestro servidor web básico está funcionando, necesitamos conectarlo a nuestra Acción GPT Personalizada. OpenAI requiere un documento llamado OpenAPI que indica a sus servidores cómo interactuar con los tuyos. Ya existe un openapi.json que puedes copiar y pegar directamente en la configuración de Acciones GPT. Para acceder a tu configuración, haz clic en tu nombre en la esquina inferior izquierda y luego haz clic en “Mis GPTs”:

Figura 3: Configuración de ChatGPT

Figura 3: Configuración de ChatGPT

Haz clic en Crear un GPT, luego en Crear nueva Acción en la parte inferior:

Figura 4: Configuración de Acción GPT

Figura 4: Configuración de Acción GPT

Después de eso, puedes copiar y pegar el contenido de openapi.json en el cuadro de Esquema:

Figura 5: Configuración del Esquema de Acción GPT

Figura 5: Configuración del Esquema de Acción GPT

Necesitarás reemplazar “https://your_doman.com” con la dirección de tu dominio real. En ese punto, aparecerán algunos botones de prueba. Suponiendo que tu servidor web esté funcionando, puedes hacer clic en un botón de prueba y ver si OpenAI puede comunicarse con tu servidor web. Si todo está correcto, entonces puedes guardar/publicar el GPT (en la esquina superior derecha) y comenzar a jugar con él. Asegúrate de publicar esto solo para ti, ya que esto se está conectando a una red privada (presumiblemente en casa).

Ejecutando el GPT

Si lograste superar todas las secciones anteriores y probaste con éxito tu acción GPT, ¡felicidades! Ahora es el momento de probarlo todo realmente. Comencé una nueva conversación en ChatGPT pero esta vez usando mi GPT Personalizado que llamo “Controlador de Instrumentos”. Para simplificar, pedí el estado de mi servidor:

Figura 6: Estado del Servidor usando Acciones GPT

Figura 6: Estado del Servidor usando Acciones GPT

Y mis registros de Nginx (desde la línea de comandos donde ejecuté Docker Compose) también confirman el tráfico:


"GET / HTTP/1.1" 200 15 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot" "-"

También tenemos un generador de números aleatorios:

Figura 7: Obtención de Números Aleatorios del Servidor usando Acciones de GPT

Figura 7: Obtención de Números Aleatorios del Servidor usando Acciones de GPT

Y el tráfico desde Nginx también confirma que hemos recibido 5 solicitudes de nuestro servidor.

Conmutación de LED en Raspberry Pi

En este punto hemos demostrado cómo realizar acciones de software usando GPT, pero ¿qué pasa con el control de hardware? En este artículo ya hemos abordado bastante, así que solo veremos un ejemplo básico de un LED parpadeante.

Para comenzar, ejecute el mismo proceso que arriba en una Raspberry Pi. Note que puede usar el mismo certificado SSL y código de repositorio que usó en su computadora personal (asumiendo que todos los dispositivos están en la misma red). Una vez que tenga todo listo para funcionar, ejecute el siguiente comando:

BUILD_TYPE=rpi docker compose up --build

Este ejemplo ahora contiene la capacidad de conmutar un LED a bordo en el pin 26 (GPIO7). Puede modificar el número de pin en app/RPiDemoApp.py. También necesitará actualizar el esquema OpenAPI de GPT personalizado con el esquema opeanapi-rpi.json proporcionado en el repositorio también (ya que hemos agregado una nueva función).

En este punto, debería poder conmutar el LED usando la interfaz de chat con ChatGPT:

Figura 8: Conmutación de un LED en la Raspberry Pi usando Acciones de GPT

Figura 8: Conmutación de un LED en la Raspberry Pi usando Acciones de GPT

¡Felicidades por haber llegado tan lejos! Este fue un tutorial complejo y, sin duda, tendrá preguntas y/o desafíos. ChatGPT está haciendo cambios en esta característica a diario y encontrando maneras más simples de guiar a los principiantes a través del proceso. Esté atento a la documentación actualizada e incluso a bots asistentes de IA que pueden ayudarlo a través del proceso.

Conclusión

En este artículo, echamos un vistazo a las Acciones GPT personalizadas, cómo crearlas y construir todo el andamiaje alrededor de ello para servir un servicio web encriptado SSL desde nuestra computadora en casa. Además de construir un servicio web básico, pudimos extender este código para controlar un LED desde la Raspberry Pi. Esto abre la posibilidad de controlar y comunicarse con hardware mucho más complejo mientras se utiliza "IA en el bucle" (juego de palabras con "hardware en el bucle"). En futuros artículos exploraremos tales temas y conceptos, aprovechando este ejemplo como fundamento.

Sobre el autor / Sobre la autora

Sobre el autor / Sobre la autora

Ari es un ingeniero con una amplia experiencia en diseño, fabricación, pruebas e integración de sistemas eléctricos, mecánicos y de software. Le apasiona integrar a los ingenieros de diseño, de verificación y de pruebas para que trabajen juntos como una unidad cohesiva.

Recursos Relacionados

Documentación técnica relacionada

Volver a la Pàgina de Inicio
Thank you, you are now subscribed to updates.