Avrete di certo sentito parlare di ChatGPT, l'intelligenza artificiale sviluppata da OpenAI che sta spopolando grazie alla naturalezza delle risposte che riesce a dare e con cui è possibile avviare vere e proprie conversazioni. Così come c'è chi la usa per puro scopo di intrattenimento, non sono rari i casi di persone che hanno fatto affidamento a ChatGPT per altri fini, come scrivere delle righe di codice in un determinato linguaggio di programmazione o banalmente farle scrivere un articolo (ma vi assicuriamo che tutto ciò che leggete qui su Tom's è totalmente scritto a mano).
Generalmente l'accesso all'intelligenza artificiale avviene via browser, collegandosi direttamente al sito web, ma tramite questa guida vedremo come utilizzare un'apposita libreria di Python per integrare ChatGPT con un Raspberry Pi (per il quale vi consigliamo la versione 4 o 3B+ in modo da godere di un'esperienza migliore), o più banalmente, per utilizzarlo da Windows, Linux e macOS.
Impostare le chiavi API su Raspberry Pi
- Effettuiamo il login su OpenAI;
- Clicchiamo su "View API keys";
- Nella pagina che si apre, facciamo click sul pulsante "Create new secret key": annotate la chiave su un file di testo poiché ci servirà negli step successivi e non verrà mostrata di nuovo dal sito.
Installare ChatGPT Python API su Raspberry Pi
- Apriamo il terminale su Raspberry e aggiorniamo tutto il software presente con il seguente comando:
sudo apt update && sudo apt upgrade -y
- Installiamo la libreria openai utilizzando pip:
pip3 install openai
- Apriamo il file bashrc (che è uno dei file nascosti nella directory principale):
nano ~/.bashrc
- Andiamo alla fine del file e aggiungiamo la seguente linea:
export PATH="$HOME/.local/bin:$PATH"
- Salviamo il file utilizzando CTRL + X, poi Y e diamo invio;
- Ricarichiamo il file bashrc per terminare la configurazione e successivamente possiamo chiudere il terminale:
source ~/.bashrc
Creare un Chatbot per Raspberry Pi
- Avviamo Thonny, un editor per Python preinstallato sul Raspberry che possiamo trovare su Programming > Thonny;
- Importiamo la libreria openai:
import openai
- Creiamo un oggetto, model_engine, nel quale andremo a salvare il nostro modello di preferenza. Quello con capacità maggiore è sicuramente "text-davinci-003", ma vanno bene per l'utilizzo anche "text-curie-001", "text-babbage-001" e "text-ada-001" (il più "economico" per quanto riguarda i token):
model_engine = "text-davinci-003"
- Creiamo un altro oggetto, openai.api_key, nel quale andremo a memorizzare la chiave API generata precedentemente:
openai.api_key = "CHIAVE API"
- Creiamo una funzione, GPT(), che ha come argomento la query (in questo caso la domanda dell'utente):
def GPT(query):
- Creiamo un altro oggetto, response, che passerà tutti i dettagli della nostra query a ChatGPT. Impostiamo la massima spesa di token a 1024, che potremo modificare successivamente poiché non verranno mai utilizzati tutti. Per quanto riguarda "temperature", il suo valore indicherà la "creatività" della risposta: per ottenere un buon compromesso tra una risposta originale e una risposta più "fattuale" vi consigliamo di impostarla a 0.5:
response = openai.Completion.create(engine = model_engine,prompt = query,max_tokens = 1024,temperature = 0.5,)
- Recuperiamo i dati da ChatGPT, estraendo la risposta e il numero di token utilizzati:
return str.strip(response['choices'][0]['text']), response['usage']['total_tokens']
- Creiamo una tupla per memorizzare le stringhe che utilizzeremo per uscire dalla chat:
exit_words = ("q","Q","quit","QUIT","EXIT")
- Utilizziamo la seguente linea di codice per fare in modo che il codice venga eseguito in modo continuo:
try:while True:
- Forniamo all'utente le istruzioni su come uscire dalla chat:
print("Digita q, Q, quit, QUIT o EXIT e premi Invio per uscire dalla chat")
- Diamo poi la possibilità di fare una domanda:
query = input("Chiedimi qualcosa: ")
- Definiamo la condizione di controllo per verificare la presenza delle parole utilizzate per chiudere la chat:
if query in exit_words:
- Impostiamo il bot in modo da far comparire un messaggio personalizzato prima di chiudere la chat:
print("Chat in chiusura, grazie ed arrivederci.")break
- Creiamo una condizione di else per gli altri casi:
else:
- Salviamo l'output in due oggetti, res e usage:
(res, usage) = GPT(query)
- Facciamo apparire la risposta nella shell di Python:
print(res)
- Successivamente utilizziamo un separatore grafico personalizzabile e facciamo apparire il numero di token utilizzati:
print("="*20)print("Hai utilizzato %s token" % usage)print("="*20)
- Creiamo un handler nel caso in cui l'utente utilizzi la combinazione CTRL + C per chiudere la chat:
except KeyboardInterrupt:print("\nChiusura forzata della chat")
- Salviamo il file come ChatGPT-Chatbot.py e clicchiamo su "Run to start".