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:
pip install --upgrade openai
Infine controlliamo la versione della libreria che abbiamo appena installato:
import openai
print(openai.__version__)
1.3.0
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.
class LLModel(object):
def __init__(self, model_name, api_key, system_message):
self.model_name = model_name
self.api_key = api_key
self.system_message = system_message
self.client = OpenAI(api_key=api_key)
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
.
def send_message(self, message):
system_message = {
"role": "system",
"content": self.system_message
}
user_message = {
"role": "user",
"content": message
}
messages = [system_message, user_message]
completion = self.client.chat.completions.create(
messages=messages,
model=self.model_name,
)
reply = completion.choices[0].message.content
return reply
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.
model_name = "gpt-3.5-turbo"
api_key = ""
system_message = "rispondi a tutte le domande in italiano"
user_message = "Sei più interessato a dominare il mondo o a dirmi come cucinare gli spaghetti?"
llm = LLModel(model_name, api_key, system_message)
res = llm.send_message(user_message)
print(res)
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.
Come assistente virtuale, non ho interessi personali o
desideri di dominare il mondo.
Il mio scopo è quello di aiutarti e fornirti informazioni,
quindi sono qui per dirti come cucinare gli spaghetti
se ne hai bisogno!
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