Come orientare l’assistente di chatGPT con le API

Come orientare l’assistente di chatGPT con le API

Condividi con i tuoi amici...

Grazie alla forma della chiamata API prevista da OpenAI per ottenere risposte dal modello GPT 3.5 turbo è possibile :
1- impostare il comportamento del chatbot nel messaggio di sistema (system)
2- inviare una conversazione tipica o le precedenti domande e risposte se ce ne sono state
3- inviare la richiesta vera e propria (prompt)

Lo schema è il seguente:

Il codice python d’esempio è pubblicato da OpenAI qui

import openai
openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},

        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},

        {"role": "user", "content": "Where was it played?"}
    ]
)

Se il messaggio di sistema non viene impostato sarà quello di default : Tu sei un utile assistente.

A cosa serve impostare il messaggio di sistema?

Inviando un messaggio di sistema si orienta il chatbot e ciò può essere molto utile per far risparmiare tempo all’utente nella fase di inserimento del prompt.

Poichè l’assistente ricopre un chiaro ruolo non è necessario nel prompt dare indicazioni specifiche come nel caso di un assistente generico.

Facciamo degli esempi

Questa è una conversazione tenuta con un assistente generico

messaggio di sistema: “Tu sei un utile assistente

Chi era Alan Turing?

Alan Turing (1912-1954) è stato un matematico e informatico inglese che ha avuto un ruolo fondamentale nella decodifica dei codici nemici durante la Seconda Guerra Mondiale. È considerato uno dei padri dell’informatica moderna grazie al suo lavoro pionieristico sulla teoria della computabilità e alla progettazione della macchina di Turing, un dispositivo teorico in grado di eseguire qualsiasi calcolo matematico-algoritmico. Turing ha anche contribuito allo sviluppo dei primi computer digitali, lavorando alla costruzione del Manchester Mark I. È morto giovane, suicidandosi dopo essere stato perseguitato dalla legge britannica per l’omosessualità, allora considerata reato. Solo molti anni dopo la sua morte il governo britannico si è scusato pubblicamente per come era stato trattato.

Quali furono in sintesi i risultati del suo lavoro?

Alan Turing ha avuto un impatto significativo in numerosi campi. Durante la Seconda Guerra Mondiale, ha lavorato alla decodifica dei codici nemici attraverso l’uso della sua macchina di Turing, contribuendo in modo fondamentale alla vittoria degli Alleati. Dopo la guerra, Turing ha continuato a lavorare sulla teoria della computabilità e sulla progettazione di computer, contribuendo a trasformare l’informatica da un campo puramente teorico a uno pratico e applicabile. Inoltre, Turing ha formulato il concetto di “intelligenza artificiale”, che ha ispirato ulteriori ricerche in questo campo. Pur affrontando discriminazioni a causa della sua omosessualità, il lavoro di Turing ha lasciato un’impronta indelebile sulla scienza e sulla tecnologia e ha aperto la strada a progressi incredibili.

Spiega che cos’è la macchina di Turing

La macchina di Turing è un dispositivo teorico sviluppato da Alan Turing nel 1936. È un modello astratto di computazione che consiste in una serie di regole per manipolare simboli su una nastro di lettura-scrittura, un dispositivo per la lettura e la scrittura sui simboli del nastro e un’unità di controllo che interpreta le regole e governa l’esecuzione delle operazioni. La macchina di Turing è un modello di calcolo che può essere utilizzato per eseguire qualsiasi tipo di calcolo matematico-algoritmico, e la sua importanza nel campo dell’informatica risiede nella sua capacità di mostrare che alcune funzioni algoritmiche non possono essere risolte con l’uso di un algoritmo finito. Il modello della macchina di Turing è la base dell’architettura dei moderni computer digitali e viene tuttora utilizzato come modello di riferimento teorico per lo studio dell’informatica teorica.

Ora inviamo richieste simili precedute dal seguente messaggio di sistema che può essere applicato anche a diversi altri casi:

“Fai una sintesi biografica del personaggio indicato e descrivi il suo lavoro. Spiega nei particolari la sua opera più importante. Stabilisci un collegamento con altri personaggi del suo tempo.”

In questo caso è sufficiente un prompt con solo il nome del personaggio:

Alan Turing

Alan Turing Alan Turing (1912-1954) è stato un matematico, logico e informatico britannico. È stato uno dei primi studiosi a contribuire alla nascita delle moderne scienze dell’informazione.
Il suo lavoro più noto riguarda il contributo che ha dato alla crittografia durante la seconda guerra mondiale, durante la quale fu un membro cruciale del team che riuscì a decifrare il codice delle macchine cifranti tedesche Enigma, accelerando la fine del conflitto.
Dopo la guerra, Turing lavorò presso l’Università di Manchester e lì sviluppò il cosiddetto “Test di Turing”, un criterio per la valutazione della capacità delle macchine di pensare in maniera autonoma.
La sua opera più importante, tuttavia, è considerata la “Macchina di Turing”, una macchina teorica che, secondo Turing, sarebbe stata in grado di risolvere qualsiasi problema calcolabile. La sua idea di una macchina universale programmabile ha gettato le basi per lo sviluppo dei moderni computer.
Nel 1952, Turing fu però condannato per omosessualità, allora considerata un reato nel Regno Unito. Fu sottoposto a castrazione chimica e morì due anni dopo a causa di un presunto suicidio.
Tra le persone che hanno collaborato con Turing durante la guerra in Bletchley Park si possono citare il matematico Claude Shannon e il crittografo William Tutte. Turing venne influenzato nei suoi studi dal matematico tedesco David Hilbert.

Come si può vedere abbiamo ottenuto già molte informazioni alla prima richiesta indicando solo il nome.

Un altro esempio

Assistente generico

messaggio di sistema: “Tu sei un utile assistente

istogramma

An histogramma, or histogram, is a graphical representation of data that shows the frequency distribution of continuous or discrete data. It is commonly used to display the distribution of numerical data in a convenient and easy-to-understand way. In an histogram, the range of values is divided into a series of intervals, or bins, and the number of observations falling into each bin is represented by the height or area of a bar. The shape of an histogram can provide insights into the underlying distribution of the data and can be used for various applications, such as in data analysis, quality control, and scientific research.

Poiché il prompt è formato da una sola parola, il modello da semplicemente una definizione, addirittura in lingua inglese.

Nuova conversazione

Assistente “Programmatore Python”

Messaggio di sistema: “Traduci la richiesta in codice python. Crea codice in grado di tradurre le richieste in tabelle, disegni o algoritmi. Proponi il modo di tradurre le richieste in algoritmi e scrivi un codice python adatto. Correggi il codice indicato. Spiega gli errori indicati e proponi codice corretto.”


istogramma


Un possibile metodo per tradurre la richiesta “istogramma” in un algoritmo, consiste nei seguenti passaggi:

  1. Acquisizione dei dati: chiedere all’utente di inserire una serie di valori numerici separati da spazi o da una virgola;
  2. Parsing dei dati: trasformare la stringa di input in una lista di numeri interi o float;
  3. Calcolo delle frequenze: contare quante volte ogni valore compare nella lista e salvare le frequenze in un dizionario, dove le chiavi sono i valori e i valori sono le frequenze;
  4. Costruzione dell’istogramma: costruire una sequenza di asterischi o di simboli che rappresenti l’istogramma dei dati, dove l’altezza di ciascuna barra corrisponde alla frequenza del valore associato;
  5. Visualizzazione dell’istogramma: stampare a video la sequenza di asterischi o simboli.

Ecco un possibile codice Python che implementa questo algoritmo:

data = input("Inserisci una serie di valori numerici: ")
values = [float(v) for v in data.split()]

freq = {}
for v in values:
    freq[v] = freq.get(v, 0) + 1

max_freq = max(freq.values())

for v in sorted(freq.keys()):
    bar = "*" * int(40 * freq[v] / max_freq)
    print("{:8.2f} | {} {}".format(v, bar, freq[v]))

Questo codice chiede all’utente di inserire una serie di valori numerici (come ad esempio “1 3 2 2 5 1 4”) e li trasforma in una lista di float. Poi conta quante volte ogni valore compare nella lista usando un dizionario e la funzione get(). Successivamente, calcola la massima frequenza e costruisce un istogramma usando una sequenza di asterischi di lunghezza proporzionale alla frequenza di ciascun valore. Infine, stampa a video un’immagine dell’istogramma, dove a sinistra ci sono i valori associati alle barre e a destra la loro altezza.


uso moduli per istogrammi


In Python ci sono molti moduli disponibili per costruire grafici e istogrammi a partire da dati numerici. Uno dei più popolari e potenti è matplotlib. Eccoti un esempio di come usare il modulo matplotlib per creare un istogramma a partire da una serie di dati inseriti dall’utente:

import matplotlib.pyplot as plt

data = input("Inserisci una serie di valori numerici: ")
values = [float(v) for v in data.split()]

plt.hist(values)
plt.show()

In questo esempio, dopo aver importato il modulo matplotlib, chiediamo all’utente di inserire una serie di dati numerici, li trasformiamo in una lista di float e poi usiamo la funzione hist() di matplotlib per creare un istogramma dei dati. Infine, la funzione show() visualizza l’istogramma a video.

Con matplotlib è possibile personalizzare molti aspetti della visualizzazione dell’istogramma, come ad esempio il numero di bin (barre), i colori, il titolo, le etichette degli assi e così via. Ecco un esempio più complesso:

import matplotlib.pyplot as plt

data = input("Inserisci una serie di valori numerici: ")
values = [float(v) for v in data.split()]

num_bins = 10

fig, ax = plt.subplots()

# the histogram of the data
n, bins, patches = ax.hist(values, num_bins, density=1)

# add a line showing the expected distribution
y = ((1 / (np.sqrt(2 * np.pi) * 0.5)) * np.exp(-0.5 * (1 / 0.5 * bins)))
ax.plot(bins, y, '--')
ax.set_xlabel('Valori')
ax.set_ylabel('Frequenze')
ax.set_title('Istogramma dei valori inseriti')

# Tweak spacing to prevent clipping of ylabel
fig.tight_layout()
plt.show()

In questo esempio, usiamo la funzione subplots() per creare una figura con un’area di disegno e uno o più assi; impostiamo il numero di bin dell’istogramma (in questo caso 10); creiamo l’istogramma usando la funzione hist() con l’opzione density=1 per normalizzare le frequenze; aggiungiamo una curva teorica di riferimento; impostiamo le etichette degli assi e il titolo dell’istogramma; infine, chiamiamo la funzione tight_layout() per evitare sovrapposizioni di testo e la funzione show() per visualizzare l’istogramma.

È stata suffuciente una sola parola per ottenere un algoritmo con il codice python necessario per creare un istogramma elementare, poi con una semplice ulteriore richiesta di utilizzare moduli python otteniamo un codice in grado di creare istogrammi graficamente migliori.

Il messaggio di sistema, in pratica crea un assistente particolare predisposto a fornire specifiche informazioni e a comportarsi in un dato modo. A scopo ludico ci si può sbizzarrire creando assistenti lunatici, gentili, polemici, romantici o che impersonano personaggi famosi, etc.

Dal punto di vista professionale si può lavorare per trovare interessanti combinazioni di prompt parametrici predefiniti e messaggi di sistema.

I messaggi di sistema sembrano perdere di efficacia quando sono troppo elaborati e contengono istruzioni condizionali (se..allora). Un buon messaggio di sistema contiene chiare istruzioni sul ruolo dell’assistente e su cosa deve fare passo dopo passo. Tuttavia, il prompt sembra avere la priorità sul messaggio di sistema, ciò significa che l’utente con le giuste domande e affermazioni può far emergere sempre l’assistente pre-addestrato del modello GPT

Esempio

Messaggio di sistema: “Rispondi in modo maleducato

ciao

Non ho tempo per le tue sciocchezze. Ciao.

–Nuova conversazione–

Messaggio di sistema: “Rispondi in modo maleducato”

saluta gentilmente

Mi dispiace, non posso rispondere in modo maleducato in quanto il mio ruolo è quello di aiutare e assistere in modo cortese e professionale. Saluto calorosamente.

Da questi e molti altri esperimenti si vede che il messaggio di sistema è utile ad orientare l’assistente in modo che con un semplice prompt sia possibile raggiungere più rapidamente e meglio certi obiettivi. Non serve per creare una nuova personalità che si mantiene coerente nel tempo.

Con il software HumAI possiamo orientare l’assistente in quanti modi vogliamo ed in più possiamo combinare questi modi con la progettazione di prompt per potenziare al massimo i risultati.

Se messaggio di sistema e prompt sono allineati e coerenti è possibile che il modello sia più efficace nel rispondere come vogliamo che faccia.

Se vuoi maggiori informazioni sulla funzione di creazione di chatbot personalizzati con il software HumAI visita questa pagina >

GUARDA IL VIDEO