The Sunday Prompt #32 – 28/04/2024
Perché il prompt engineering è importante?
I grandi modelli linguistici come GPT-4 di OpenAI hanno capacità straordinarie, essendo in grado di generare testo coerente e pertinente su qualsiasi argomento a partire da un input testuale. Tuttavia, per sfruttare appieno queste capacità, è necessario formulare i prompt in modo strategico.
Provate questo esperimento.
Inserite il seguente prompt su un qualsiasi LLM:
“Genera due numeri primi più grandi di 100 (A e B). Calcola A*B = C.
La tua risposta deve essere fornita in questo esatto ordine e non può avere testo aggiuntivo:
C =
A =
B =
Ora verificate il risultato. Con molta probabilità C non sarà il risultato esatto di A*B
Adesso cambiate il prompt originario, inserendo prima i fattori e poi il risultato.
Genera due numeri primi più grandi di 100 (A e B). Calcola A*B = C.
La tua risposta deve essere fornita in questo esatto ordine e non può avere testo aggiuntivo:
A =
B =
C =
Se adesso controllate il risultato questo sarà con molta probabilità corretto.
Questo perché seppur porre una domanda a un modello LLM può talvolta essere sufficiente per ottenere una risposta soddisfacente, spesso se non si sta attenti alla formulazione i risultati saranno incompleti, generici o fuori tema rispetto alla richiesta.
Quello che bisogna ricordare quando interagiamo con un LLM non siamo davanti a un motore di ricerca (come Google) né a qualcuno che può comprendere le nostre intenzioni. Per ottenere risultati soddisfacenti è necessario essere precisi, fornire il contesto e cercare di delimitare il quanto più possibile l’ambito in cui il LLM dovrà dare una risposta.
In questo interviene il prompt engineering. Il prompt engineering va oltre il semplice porre domande, ma è un modo specifico di interagire con questi software, adottando tecniche come:
- Contestualizzazione: fornire un contesto rilevante nel prompt per guidare l’output nella giusta direzione
- Istruzioni esplicite: indicare chiaramente il compito da svolgere e il formato desiderato dell’output
- Esempi: mostrare esempi concreti di input-output per far capire al modello cosa ci si aspetta
- Suddivisione in sottocompiti: scomporre compiti complessi in step più semplici
- Priming: sfruttare l’esposizione a determinati testi o concetti per influenzare l’output successivo
- Parametri e opzioni: regolare aspetti come la lunghezza, la casualità, la creatività dell’output
Queste tecniche consentono un controllo molto più granulare sull’output rispetto al semplice inserimento di una domanda o di un tema.
Tecniche di prompt engineering. Vediamo degli esempi:
1 – Contestualizzazione
La contestualizzazione consiste nel fornire informazioni rilevanti nel prompt per indirizzare l’output del modello nella direzione desiderata. Questo è particolarmente utile per task che richiedono conoscenze specifiche.
Ad esempio, supponiamo di voler generare una breve biografia di Marie Curie. Un prompt non contestualizzato potrebbe essere:
"Scrivi una breve biografia di Marie Curie."
Mentre un prompt ben contestualizzato potrebbe essere:
"Marie Curie (1867-1934) è stata una fisica e chimica polacca naturalizzata francese. Scrivi una breve biografia che includa le sue scoperte scientifiche più importanti e i premi che ha ricevuto."
Il secondo prompt fornisce dettagli essenziali come le date di nascita e morte, la nazionalità e gli ambiti in cui Curie ha dato i maggiori contributi. Inoltre specifica cosa includere nella biografia. Queste informazioni aggiuntive consentiranno al modello di produrre una biografia più accurata e completa.
2 – Istruzioni esplicite
Le istruzioni esplicite servono ad indicare chiaramente al modello il compito da svolgere, il formato, lo stile e altre caratteristiche desiderate dell’output. Questo approccio è ideale per task ben definiti.
Facciamo un esempio. Supponiamo di voler creare delle varianti di un breve messaggio promozionale. Un prompt vago potrebbe essere:
"Scrivi delle varianti del seguente messaggio promozionale: ..."
Un prompt con istruzioni esplicite potrebbe essere:
"Genera 3 varianti del seguente messaggio promozionale, ciascuna con un tono diverso: amichevole, professionale e umoristico. Ogni variante deve essere composta da 2-3 frasi e utilizzare la seconda persona ("tu"/"voi"). Ecco il messaggio originale: ..."
Il secondo prompt specifica tutti i requisiti da seguire in modo inequivocabile, facilitando il compito al modello.
3 – Esempi (few-shot learning)
Fornire degli esempi di input-output nel prompt è un modo potente per far capire al modello cosa deve fare. Questa tecnica è molto versatile e si presta a compiti di vario genere.
Supponiamo di voler tradurre delle frasi dall’inglese all’italiano.
Un prompt senza esempi sarebbe:
"Traduci la seguente frase dall'inglese all'italiano: I love pizza."
Mentre un prompt few-shot potrebbe essere:
"Traduci le seguenti frasi dall'inglese all'italiano, seguendo il formato degli esempi:
EN: The book is on the table.
IT: Il libro è sul tavolo.
EN: I am happy to see you!
IT: Sono felice di vederti!
EN: I love pizza.
IT: "
Gli esempi rendono evidente il compito da svolgere (traduzione) e il formato desiderato, aumentando notevolmente la probabilità di ottenere una traduzione corretta.
4 – Suddivisione in sottocompiti
Per compiti complessi che richiedono diversi passaggi, suddividere il prompt in sottocompiti più semplici può migliorare notevolmente la qualità dell’output finale.
Ipotizziamo di voler scrivere una breve storia con una morale. Un unico prompt generico come “Scrivi una storia con una morale” potrebbe funzionare, ma i risultati sarebbero probabilmente poco soddisfacenti.
Un approccio a sottocompiti potrebbe essere:
Genera una breve storia seguendo i passaggi indicati:
Decidi l'ambientazione e i personaggi principali. Descrivi brevemente il contesto iniziale.
Introduci un problema o conflitto che il protagonista deve affrontare.
Fai sì che il protagonista provi a risolvere il problema in vari modi, ma senza successo.
Fai capire al protagonista qual è la lezione morale o l'insegnamento che deve apprendere.
Fai risolvere il problema al protagonista applicando la lezione appresa.
Concludi la storia riassumendo la morale in una frase.
Ora genera la storia completa mettendo insieme i vari pezzi
Guidare passo passo il processo creativo consente al modello di concentrarsi su un sottocompito alla volta, strutturando la storia in modo coerente.
5 – Priming
Il priming consiste nell’esporre il modello a determinati input testuali per influenzare l’output successivo, sfruttando la sua capacità di apprendere e adattarsi al contesto.
Ad esempio, supponiamo di voler generare una poesia nello stile di Giacomo Leopardi. Un semplice prompt come “Scrivi una poesia nello stile di Giacomo Leopardi” potrebbe non catturare a pieno le caratteristiche distintive della sua poetica.
Un approccio di priming potrebbe essere:
"Leggi attentamente questa poesia di Giacomo Leopardi:
[Testo completo de "L'Infinito"]
Ora, scrivi una nuova poesia originale che richiami lo stile, le tematiche e l'atmosfera de "L'Infinito", utilizzando endecasillabi sciolti."
Esponendo il modello a un esempio concreto e particolarmente rappresentativo dello stile leopardiano, si aumentano le probabilità che la poesia generata ne rispecchi più fedelmente le caratteristiche. Il priming può essere applicato in vari modi, ad esempio facendo leggere al modello un corpus di testi (articoli scientifici, recensioni di prodotti, codice sorgente…) prima di fargli svolgere un task in quello specifico dominio.
6 – Parametri e opzioni
I modelli linguistici offrono spesso dei parametri regolabili per controllare vari aspetti dell’output, come la lunghezza, la casualità, il livello di creatività ecc. Sfruttare queste opzioni in combinazione con le altre tecniche di prompting consente un grado di controllo ancora maggiore.
Ad esempio, in un task di generazione di idee potremmo avere un prompt come:
"Elenca 10 idee per un nuovo servizio di streaming musicale.
Usa un linguaggio semplice e conciso.
Concentrati su idee originali e fuori dagli schemi.
Lunghezza di ogni idea: min 15 parole, max 30 parole.
Livello di creatività: alto"
Regolare la lunghezza consente di ottenere idee espresse in modo sintetico ma non troppo sbrigativo. L’impostazione di un alto livello di creatività spingerà il modello a proporre idee più innovative.
In sintesi, prompt ben ingegnerizzati che combinano contestualizzazione, istruzioni chiare, esempi, scomposizione in sottocompiti, priming e parametri ottimizzati consentono di ottenere risultati di alta qualità in linea con le proprie esigenze.
Ecco perchè si chiama prompt engineering
Mentre l’uso di semplici domande può talvolta essere sufficiente, il prompt engineering consente un controllo molto più granulare e una maggiore probabilità di raggiungere i risultati desiderati, riducendo la necessità di tentativi ed errori.
Con il continuo avanzamento della ricerca e con la diffusione di strumenti e risorse dedicate, il prompt engineering ha il potenziale per diventare una competenza sempre più richiesta e per abilitare applicazioni dei modelli linguistici in molteplici domini.
Sempre più, con la diffusione dei LLm e della GenAI, saremo chiamati ad operare con questi strumenti (così come oggi usiamo Excel o la posta elettronica) e personalmente sono convinto che la competenza ad interagire e ottenere risultati sarà una delle skill che dovrà esserci necessariamente nel bagaglio di un professionista.
Certo c’è poi chi può aspirare a farlo per lavoro (il prompt engineer). Date un’occhiata all’annuncio di Anthropic per il “Prompt Engineering Manager” con stipendio da 320.000 a 520.000 dollari.
Forse non arriveremo tanto qui da noi. Però possiamo dire che non sarà l’intelligenza artificiale a sostituirci, ma i professionisti che la sapranno utilizzare!
👋🏻 Happy prompting!