Come Costruire un'azione GPT Personalizzata per Comunicare con il Tuo Hardware

Ari Mahpour
|  Creato: marzo 25, 2024  |  Aggiornato: luglio 1, 2024
Come Costruire un'azione GPT Personalizzata per Comunicare con il Tuo Hardware

Negli albori di ChatGPT (che in realtà non è molto tempo fa), OpenAI si è evoluta trovando diversi modi per raggiungere internet attraverso l'uso del loro LLM. Con Code Interpreter, si poteva usare Curl per un sito web e tirarne fuori i contenuti. Anche gli add-on personalizzati permettevano di accedere a siti web esterni, ma richiedevano permessi speciali da OpenAI. OpenAI ha aggiunto anche capacità di navigazione con Microsoft Bing che poteva accedere a internet. Tuttavia, tutte queste opzioni non si sono rivelate molto sostenibili per la crescita e la domanda che utenti e sviluppatori esigevano dai sistemi di OpenAI. Di recente, OpenAI ha quindi introdotto una nuova piattaforma chiamata GPT Actions. GPT Actions ti permette di creare "GPT" personalizzati che possono collegarsi a diversi server per fornire motori abilitati all'IA su un servizio web esistente.

Cosa significa tutto questo per un ingegnere hardware che finge di capire cosa sia l'IA? Come ti suona l'hardware controllato dall'IA? Suona minaccioso, potenzialmente pericoloso e incredibilmente eccitante, tutto allo stesso tempo! In questo articolo ci immergeremo su come configurare un webserver che si collegherà alla tua GPT Action. Esamineremo anche come abilitare ChatGPT a controllare gli IO sul tuo Raspberry Pi, aprendo la possibilità a molti nuovi ed entusiasmanti progetti guidati dall'IA a cui l'ingegnere medio non aveva accesso... fino ad ora.

Come Funziona

Prima di immergerci nel codice è importante notare che questo è un campo in evoluzione e che sta cambiando rapidamente. È anche una tecnologia dipendente da OpenAI e richiede un abbonamento alla versione a pagamento di ChatGPT. È quasi certo che i concorrenti stiano lanciando le loro versioni di "GPT Actions", ma, al momento della scrittura di questo articolo, GPT Actions (a mio parere) era il modo più semplice per collegare un Modello di Linguaggio Grande (LLM) completamente funzionante al tuo servizio web.

Il concetto dietro un servizio GPT Action è piuttosto semplice. Puntiamo il nostro GPT personalizzato a un webservice, gli diciamo quali sono gli input e gli output, e lo lasciamo funzionare. L'implementazione, tuttavia, si è rivelata molto più complicata di quanto immaginassi (che è stato lo spunto per scrivere questo articolo). Ecco un diagramma di come funziona il servizio:

Figura 1: Interazioni Server

Figura 1: Interazioni Server

Come puoi vedere, forniamo a OpenAI un webservice e un documento di interfaccia (OpenAPI) che ci dice come interagire con il nostro hardware. Inizieremo con un esempio molto banale che non coinvolge hardware e poi passeremo a un semplice esempio di commutazione di un LED.

Configurazione del Server Sicuro

Per gli ingegneri hardware che sono, nella migliore delle ipotesi, familiari con il software embedded, questa sezione potrebbe non essere così banale per loro come lo sarebbe per qualcuno che lavora in IT o nell'infrastruttura cloud. Essendo sia un ingegnere elettrico che software, configurare un server completamente crittografato SSL è stato un po' un rompicapo per me - principalmente perché ci sono molti modi per farlo. Sfortunatamente, questa è una prerequisito da OpenAI quindi dovremo farcela. Se hai già un modo sicuro di ospitare un server web (ad es. terminazione TLS al tuo bilanciatore di carico) puoi saltare questa sezione. Come me, la maggior parte delle persone che leggeranno questo articolo vorranno sperimentare con il loro server domestico. Tieni presente che devi comunque aprire le porte 80 e 443 al mondo esterno tramite le impostazioni del tuo router. Le istruzioni su come configurare il firewall del router e l'inoltro delle porte sono al di fuori dell'ambito di questo articolo ma ci sono molte risorse online che puoi trovare per aiutarti.

Per iniziare dobbiamo richiedere un certificato SSL. Questo può essere fatto utilizzando servizi a pagamento (ad es. Cloudfare), servizi di terze parti gratuiti (ad es. ZeroSSL), o un meccanismo diretto utilizzando Let’s Encrypt. In questo tutorial useremo Let’s Encrypt tramite certbot. Avrai anche bisogno di un nome di dominio che punti all'indirizzo IP del tuo server. Puoi acquistarne uno o ottenere un nome DNS dinamico utilizzando Cloudfare (a pagamento) o No-IP (gratuito). Tieni presente che l'inoltro del tuo nome DNS dinamico al tuo IP richiede un tipo di record "A" e non un reindirizzamento URL.

Per richiedere un certificato SSL di 90 giorni da Let’s Encrypt dovremo utilizzare Certbot. Hanno eseguibili che possono essere eseguiti su qualsiasi sistema operativo. Eseguiamo il comando più semplice per acquisire i certificati. Ecco il comando per acquisire il certificato:

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

Se sei su Windows non userai la parte sudo. Assicurati di sostituire your_domain.com con il nome di dominio acquistato o quello che hai ricevuto dal servizio DNS dinamico (ad es. No-IP). Verrà generata una cartella contenente una serie di file di certificato. A questo punto è il momento di clonare il template del repository: https://gitlab.com/ai-examples/gpt-actions-webserver/. Sposta la cartella generata da certbot nel repository una volta che lo hai clonato.

Per far funzionare correttamente i reindirizzamenti SSL (cioè garantire che tutto il traffico sia crittografato) vorremo configurare Nginx. Crea una cartella all'interno del tuo repository chiamata nginx e un nuovo file chiamato default.conf. Utilizzando questo template, sostituisci your_domain.com con il nome di dominio che è stato utilizzato quando hai richiesto il certificato SSL usando certbot:


server {
    listen 80;
    server_name your_domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain.com;
 
    ssl_certificate /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;
 
    location / {
        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;
    }
}

Avviare l'Applicazione

A questo punto dovresti avere la crittografia SSL correttamente configurata e pronta all'uso. Ora ci concentreremo sull'applicazione web di base che può comunicare con il nostro GPT personalizzato. Puoi trovare tutto il codice nel repository quindi ci limiteremo a evidenziare come eseguirlo piuttosto che i dettagli tecnici di cosa comporta l'applicazione.

Data la natura di un servizio web crittografato SSL, ho astratto l'applicazione web dalla vera e propria crittografia SSL. Per fare ciò abbiamo bisogno di Nginx, che reindirizza il traffico e serve i certificati che abbiamo ricevuto da Let's Encrypt tramite Certbot. Per incapsulare tutto in un pacchetto ordinato ho utilizzato un Docker Compose. Ciò significa che avrai bisogno di Docker per eseguire questo esempio. È un po' ingombrante e noioso da configurare inizialmente ma è verso questa direzione che si sta muovendo il software oggigiorno, quindi, un progetto come questo è un ottimo punto di partenza per familiarizzare con Docker. Come nota a margine, tutte le descrizioni e le istruzioni sono state inserite nel file README.md all'interno del repository. Finché hai seguito i passaggi precedenti sopra dovresti essere in grado di eseguire docker compose up e tutti i componenti (cioè Nginx e l'applicazione web) dovrebbero costruirsi e iniziare a funzionare. Ricorda che questa applicazione è solo un semplice esempio di tipo "Hello World" e può essere eseguito da qualsiasi parte.

Dopo aver eseguito il comando docker compose up dovresti vedere un output come questo:

Figura 2: Output del Terminale

Figura 2: Output del Terminale

Dovresti testare la tua applicazione navigando su http://localhost:8000. Vedrai un output di test che dice {"status":"OK"}. Dovresti vedere lo stesso risultato navigando su http://your_domain.com dove "your_domain.com" è il nome del dominio che hai impostato nel passaggio precedente. Per validare realmente che le impostazioni del tuo router e del dominio siano corrette dovresti testare questo al di fuori della tua rete (ad esempio sul tuo cellulare con il WiFi disattivato).

Configurare l'Azione GPT

Ora che abbiamo verificato che il nostro server web di base funziona dobbiamo collegarlo alla nostra Azione GPT Personalizzata. OpenAI richiede un documento chiamato OpenAPI che indica ai loro server come interagire con il tuo. Esiste già un openapi.json che puoi copiare e incollare direttamente nelle impostazioni delle Azioni GPT. Per accedere alle tue impostazioni clicca sul tuo nome nell'angolo in basso a sinistra e poi clicca su “I miei GPT”:

Figura 3: Impostazioni ChatGPT

Figura 3: Impostazioni ChatGPT

Clicca su Crea un GPT, poi su Crea nuova Azione in basso:

Figura 4: Impostazioni di Configurazione Azione GPT

Figura 4: Impostazioni di Configurazione Azione GPT

Dopo di che puoi copiare e incollare il contenuto di openapi.json nella casella Schema:

Figura 5: Impostazioni Schema Azione GPT

Figura 5: Impostazioni Schema Azione GPT

Dovrai sostituire “https://your_doman.com” con l'indirizzo del tuo dominio effettivo. A quel punto appariranno alcuni pulsanti di test. Supponendo che il tuo webserver sia in funzione, puoi cliccare su un pulsante di test e vedere se OpenAI può comunicare con il tuo webserver. Se tutto va bene, puoi salvare/pubblicare il GPT (nell'angolo in alto a destra) e iniziare a giocarci. Assicurati di pubblicarlo solo per te stesso poiché questo si sta collegando a una rete privata (presumibilmente a casa).

Avviare il GPT

Se sei riuscito a superare tutte le sezioni sopra e hai testato con successo la tua azione GPT, congratulazioni! Ora è il momento di testarlo davvero tutto. Ho iniziato una nuova conversazione ChatGPT ma questa volta usando il mio GPT Personalizzato che chiamo “Controllore di Strumenti”. Per semplificare ho chiesto lo stato del mio server:

Figura 6: Stato del Server usando Azioni GPT

Figura 6: Stato del Server usando Azioni GPT

E i miei log di Nginx (dalla riga di comando dove ho eseguito Docker Compose) confermano il traffico così:


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

Abbiamo anche un generatore di numeri casuali:

Figura 7: Ottenere Numeri Casuali dal Server usando le Azioni GPT

Figura 7: Ottenere Numeri Casuali dal Server usando le Azioni GPT

E il traffico da Nginx conferma anche che abbiamo ricevuto 5 richieste dal nostro server.

Interruttore LED su Raspberry Pi

A questo punto abbiamo dimostrato come eseguire azioni software usando GPT ma che dire del controllo dell'hardware? In questo articolo abbiamo già affrontato molto, quindi ci limiteremo a guardare un semplice esempio di LED lampeggiante.

Per iniziare, esegui lo stesso processo di cui sopra su un Raspberry Pi. Nota, puoi usare lo stesso certificato SSL e il codice del repository che hai usato sul tuo computer di casa (assumendo che tutti i dispositivi siano nella stessa rete). Una volta che hai tutto pronto per procedere, esegui il seguente comando:

BUILD_TYPE=rpi docker compose up --build

Questo esempio contiene ora la capacità di attivare o disattivare un LED integrato sul pin 26 (GPIO7). Puoi modificare il numero del pin in app/RPiDemoApp.py. Dovrai anche aggiornare lo schema OpenAPI del GPT personalizzato con lo schema opeanapi-rpi.json fornito nel repository (dato che abbiamo aggiunto una nuova funzione).

A questo punto dovresti essere in grado di attivare o disattivare il LED usando l'interfaccia di chat con ChatGPT:

Figura 8: Attivare o Disattivare un LED sul Raspberry Pi usando le Azioni GPT

Figura 8: Attivare o Disattivare un LED sul Raspberry Pi usando le Azioni GPT

Congratulazioni per essere arrivato fin qui! Questo era un tutorial complesso e avrai, senza dubbio, domande e/o sfide. ChatGPT sta apportando modifiche a questa funzionalità quotidianamente e sta trovando modi più semplici per guidare i principianti attraverso il processo. Tieni d'occhio la documentazione aggiornata e anche i bot assistenti AI che possono aiutarti nel processo.

Conclusione

In questo articolo abbiamo esaminato le Azioni GPT personalizzate, come crearle e costruire tutto il supporto intorno ad esse per servire un servizio web crittografato SSL dal nostro computer di casa. Oltre a costruire un servizio web di base, siamo stati in grado di estendere questo codice per controllare un LED da Raspberry Pi. Questo apre la possibilità di controllare e comunicare con hardware molto più complesso utilizzando "AI nel loop" (gioco di parole su "hardware nel loop"). In futuri articoli esploreremo tali argomenti e concetti, sfruttando questo esempio come fondamento.

Sull'Autore

Sull'Autore

Ari è un ingegnere con una solida esperienza nei campi di progettazione, produzione, collaudo e integrazione di sistemi elettrici, meccanici e software. Ama riunire gli ingegneri addetti alla progettazione, alla verifica e al collaudo e farli lavorare insieme come un'unità affiatata.

Risorse correlate

Documentazione Tecnica Correlata

Tornare alla Pagina Iniziale
Thank you, you are now subscribed to updates.