OpenAI: Python API

Il 30 novembre 2022, ChatGPT è stato reso disponibile al pubblico, e a marzo del 2023, OpenAI ha annunciato che i modelli ChatGPT sarebbero stati accessibili anche tramite API. Ma cosa esattamente è ChatGPT? E com’è possibile che funzioni? Sono domande a cui ho iniziato a dare risposta in un articolo precedente: “LSTM è morto. Lunga vita ai Transformer!” (15/06/2023),  invece in questo articolo, procederemo a implementare una classe in Python che ci consentirà di interagire con i servizi di OpenAI in modo semplice ed efficace.

ChatGPT

I modelli GPT vengono pre-addestrati su grandi quantità di dati testuali provenienti da diverse fonti, come Wikipedia, Books1 e Books2, WebText2, Stack Overflow, e dati estratti dal progetto Common Crawl, che raccoglie informazioni da pagine web. Attraverso l’apprendimento su questi vasti dataset, GPT è in grado di eseguire diverse attività tra cui generazione di testi, traduzione automatica, risposta a domande, sintesi del testo e creazione di chatbot.

Creazione di un’account

Il primo passo è crearci un account OpenAi e dopo esserci registrati saremo in grado di creare nella dashboard una API key

Per iniziare a lavorare con l’API dobbiamo prima di tutto installare la libreria di OpenAi eseguendo il seguente comando:

Infine controlliamo la versione della libreria che abbiamo appena installato:

Costruttore della classe

Adesso creiamo una classe che ha come costruttore gli attributi del nome del modello che utilizzeremo, la API key e il messaggio di sistema iniziale (system_message) per impostare il comportamento del chatbot.

Send message

Il metodo send_message invia un messaggio al modello che abbiamo scelto e restituisce la risposta generata. Prende in input un parametro message che rappresenta il messaggio dell’utente. All’interno del metodo send_message, viene creato un messaggio di sistema e un messaggio dell’utente basati sul markup del bot fornito e sul messaggio di input dell’utente, rispettivamente.

Questi messaggi vengono memorizzati in una lista chiamata messages.

Adesso effettuiamo la richiesta API utilizzando il metodo self.client.chat.completions.create, passando il nome del modello e i messaggi come parametri. La risposta dell’API viene memorizzata nella variabile completion. Infine il messaggio di risposta viene estratto dalla risposta dell’API e memorizzato nella variabile reply.

Sei Skynet?

Adesso non ci resta che testare la nostra classe,  magari chiedendo se ChatGPT come AI è interessata a dominare il mondo.

Dalla risposta che ci viene data capiamo che ChatGPT non è Skynet di Terminator perché, a differenza di Skynet, ChatGPT è più interessato a fornire ricette per cucinare il miglior piatto di spaghetti piuttosto che a dominare il mondo. E anche se talvolta può confondere un gatto con un alpaca nelle sue immagini generate, non sta cercando di inviare cyborg assassini nel passato.

Quindi, per ora, possiamo stare tranquilli e gustare i nostri spaghetti senza preoccupazioni!

Sitografia

[0] Jay Alammar, “The Ilustrated Transformer” blog post, 2018
[1] Lilian Weng, “Attention? Attention!!” blog post, 2018
[2] Peter Bloem, “Transformers from scratch” blog post, 2019
[3] Eduardo Muñoz, Attention is all you need: Discovering the Transformer paper, Medium, 2/11/2020
[4] , L’intelligenza artificiale trasformerà i motori di ricerca?,
[5] Dario D’Elia, Tutto su ChatGPT: che cos’è, come si usa e cosa permette di fare, Wired, 2023