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:
1 |
pip install —upgrade openai |
Infine controlliamo la versione della libreria che abbiamo appena installato:
1 2 3 |
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.
1 2 3 4 5 6 7 |
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
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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.
1 2 3 4 5 6 7 8 |
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.
1 2 3 4 5 |
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