Come Costruire il tuo ChatGPT Personalizzato Usando Python e OpenAI
Grazie a OpenAI, ora puoi avere facilmente accesso alle potenti API che sono alla base di questi chatbot e che ti permettono di integrare funzionalità di intelligenza artificiale nelle tue applicazioni. In questo articolo, imparerai come costruire il tuo chatbot alimentato dall’AI in Python usando il pacchetto openai
.
Configura la tua Chiave API OpenAI
Per accedere all’API di OpenAI, devi ottenere una chiave API dalla piattaforma OpenAI:
- Visita la piattaforma delle API di OpenAI all’indirizzo https://platform.openai.com/.
- Potrebbe esserti richiesto di creare un account o di accedere se ne hai già uno.
- Per utilizzare l’API di OpenAI, devi configurare un account a pagamento su https://platform.openai.com/account/billing/overview. Con un nuovo account ottieni alcuni crediti gratuiti.
- Una volta fatto, vai su https://platform.openai.com/account/api-keys.
- Fai clic sul pulsante “Crea nuova chiave segreta” per generare la tua chiave API univoca.
- Copia la chiave API da usare in seguito e assicurati di tenerla al sicuro. Trattala come una password, poiché fornisce l’accesso alle tue risorse dell’API OpenAI.
Ricorda che la chiave API è un’informazione sensibile e non deve essere condivisa pubblicamente o con persone non autorizzate!
Iniziamo a costruire!
Installazione del pacchetto openai
Prima di iniziare, assicurati di aver installato il client Python di OpenAI. Puoi installarlo con pip:
pip install openai
export OPENAI_API_KEY='your-api-key-here'
Assicurati di sostituire “your-api-key-here” con la tua chiave API di OpenAI nel comando sopra.
Scriviamo il Codice
Crea un nuovo file chiamato chat.py e importa i seguenti pacchetti:
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY")
Creiamo una funzione chatbot
che verrà richiamata quando esegui lo script:
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY")
def chatbot():
while True:
message = input("Utente: ")
if message.lower() == "quit":
break
if __name__ == "__main__":
print("Inizia a chattare con il bot (digita 'quit' per fermarti)!")
chatbot()
Al momento, lo script crea un ciclo while infinito che accetta un messaggio dell’utente ogni volta e si interrompe quando l’utente inserisce il messaggio “quit”.
Ma a questo punto, il tuo chatbot non sta davvero rispondendo ai messaggi dell’utente.
Per fare ciò, utilizzeremo l’endpoint Chat Completion di OpenAI che usa modelli linguistici come gpt-3.5-turbo e gpt-4 per fornire risposte intelligenti ai messaggi degli utenti.
Poiché vogliamo che il nostro chatbot ricordi i messaggi precedenti dell’utente, manterremo la cronologia della conversazione come una lista per fornire il contesto per ogni nuovo messaggio dell’utente e poi invieremo l’intera lista all’API.
def chatbot():
messages = []
while True:
message = input("Utente: ")
if message.lower() == "quit":
break
messages.append({"role": "user", "content": message})
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)
chat_message = response['choices'][0]['message']['content']
print(f"Bot: {chat_message}")
messages.append({"role": "assistant", "content": chat_message})
Nota come ogni messaggio è rappresentato come un dizionario con chiavi role e content.
role è il ruolo dell’autore del messaggio e può essere uno dei seguenti valori: “system”, “user” o “assistant”; content è il contenuto effettivo del messaggio.
Il messaggio “user” è il messaggio inserito dall’utente e il messaggio “assistant” è il messaggio restituito dal modello di intelligenza artificiale.
Ma cos’è allora un messaggio “system”?
Una conversazione può iniziare con un messaggio “system” per istruire delicatamente l’assistente AI. Questo messaggio imposta la scena e istruisce l’assistente su come rispondere.
Ad esempio, nel caso di ChatGPT, un messaggio di sistema potrebbe essere simile a questo:
Sei ChatGPT, un grande modello linguistico addestrato da OpenAI. Rispondi nel modo più conciso possibile. Conoscenza limitata a: {knowledge_cutoff} Data corrente: {current_date}
messages = [
{"role": "system", "content": "Sei un assistente utile."},
]
Puoi anche aggiungere più messaggi di sistema, ma tieni presente che con il modello gpt-3.5-turbo-0301, non presta molta attenzione al messaggio di sistema. Quindi, se ci sono istruzioni o indicazioni importanti che vuoi dare, spesso è meglio includerle in un messaggio “user”. In questo modo, l’assistente può comprendere appieno e rispondere alle tue richieste specifiche.
Mettiamo tutto insieme!
import openai
import os
openai.api_key = os.getenv("OPENAI_API_KEY")
def chatbot():
messages = [
{"role": "system", "content": "Sei un assistente utile."},
]
while True:
message = input("Utente: ")
if message.lower() == "quit":
break
messages.append({"role": "user", "content": message})
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)
chat_message = response['choices'][0]['message']['content']
print(f"Bot: {chat_message}")
messages.append({"role": "assistant", "content": chat_message})
if __name__ == "__main__":
print("Inizia a chattare con il bot (digita 'quit' per fermarti)!")
chatbot()
Ora sei pronto per iniziare a chattare con il tuo chatbot AI! Esegui lo script usando:
export OPENAI_API_KEY='your-api-key-here'
python3 chat.py
Extra: Giocare con i messaggi di sistema
Assistente Sarcastico
Usa il seguente messaggio di sistema e guarda come cambiano le risposte del bot!
messages = [
{"role": "system", "content": "Sei un assistente sarcastico."},
]
messages = [
{"role": "system", "content": "Sei un assistente francese. Parli e rispondi solo in francese."},
]
Spero ti sia divertito a costruire il tuo chatbot personalizzato!
Gabriele Ferrari
Via Cesare Costa,88
41123 – Modena
Nato il 10/06/1968
Tel. +39 3357682392
P.IVA 03615520362
E-mail: gabriele@gabrieleferrari.net
Web Designer, Digital Project Manager, Esperto di WordPress, Sviluppatore Web, Esperto Certificato di Google Ads, Social Media Manager e Graphic Designer attualmente lavora come libero professionista. Fornisce servizi quali consulenza, sviluppo di siti web, SEO e pubblicità online, marketing sui social media, grafica e sviluppo di app mobile per aziende e privati. Precedente esperienza come Web Project Manager e Social Marketing Manager in importanti agenzie web, nonché Family Banker e Team Manager nel settore dei giochi. Laureato presso la facoltà di Ingegneria Elettronica dell’Università di Bologna.