Principi fondamentali del Prompt Engineering
Alla base del prompt engineering ci sono dei principi essenziali che costituiscono la base per progettare prompt chiari ed efficaci. Anche se queste linee guida possono sembrare intuitive, applicarle sistematicamente non è sempre facile... ma è cruciale conoscerle e applicarle correttamente per ottenere risultati ottimali dai modelli AI.
Chiarezza e specificità
Un prompt deve essere chiaro, specifico e il più possibile dettagliato. Evitare formulazioni vaghe o generiche è fondamentale: istruzioni poco precise portano a risposte altrettanto imprecise.
Ad esempio, invece di chiedere "Scrivi un articolo su tecnologia" è molto meglio specificare: "Scrivi un articolo di 3 paragrafi sulle ultime innovazioni nella tecnologia dei veicoli elettrici, adottando un tono divulgativo."
Più dettagli forniamo sul contesto, sullo scopo, sulla lunghezza e sullo stile desiderati, più il modello sarà in grado di orientare la sua risposta di conseguenza. In pratica, conviene esplicitare ciò che vogliamo: se chiediamo "Fai qualcosa" otterremo un output arbitrario, mentre se diciamo "Esegui questa azione in questo modo" avremo un output mirato.
- Evitare l’ambiguità: controllare che ogni frase del prompt abbia un solo possibile significato interpretativo. Ad esempio, la richiesta "Lista libri recenti" può essere ambigua (lista di libri pubblicati di recente? O libri ambientati in tempi moderni?). Meglio riformulare in modo univoco, ad esempio: "Elenca 5 libri pubblicati nel 2023 nel genere fantascienza, fornendo titolo e autore."
- Quantificare quando possibile: se l’output desiderato ha una certa lunghezza o numero di punti, dichiararlo esplicitamente. Ad esempio: "Fornisci 3 possibili soluzioni al problema X, ciascuna in 2-3 frasi.". Questo riduce l’incertezza sul formato della risposta.
Contesto e dettagli rilevanti
Un modello di linguaggio genera la miglior risposta in base alle informazioni di cui dispone nel prompt e alla sua conoscenza addestrata. Perciò è importante fornire tutto il contesto necessario direttamente nel prompt, soprattutto se la richiesta riguarda un argomento specifico che il modello potrebbe non conoscere a fondo o disambiguare correttamente.
Ad esempio, se chiediamo di scrivere un tweet promozionale su un prodotto fittizio, dovremmo prima fornire i dettagli chiave di tale prodotto. Un caso emblematico: un LLM ha generato un tweet inesatto su un prodotto perché non sapeva di cosa si trattasse; solo aggiungendo nel prompt i dettagli sul prodotto, il tweet generato è diventato accurato.
Quindi non dare per scontato ciò che il modello non può sapere. Se la domanda richiede conoscenze al di fuori del suo addestramento, devi inserirle nell’input oppure ricorrere a tecniche di recupero informazioni esterne, se disponibili. Ad esempio, puoi chiedere al modello di fare una ricerca online prima di rispondere.
Alcuni modi per aggiungere contesto utile:
- Premessa esplicativa: iniziare il prompt con una o due frasi che inquadrano il problema o forniscono dati pertinenti. Ad esempio, scrivi "Supponi che la temperatura globale sia aumentata di 1,5°C rispetto all’era preindustriale. Considera questo scenario e descrivi le possibili conseguenze sull’innalzamento del livello del mare". Qui forniamo un dato reale per inquadrare la risposta.
- Definizione di termini: se nel prompt compaiono termini tecnici o sigle che potrebbero essere fraintesi, spiegarli brevemente. Ad esempio, "Spiega il concetto di computazione quantistica (cioè l’uso di qubit e sovrapposizione per effettuare calcoli) in termini semplici...".
- Contestualizzare la richiesta: se stiamo chiedendo un’analisi o un riepilogo basato su un documento specifico, possiamo includere quella informazione con un’etichetta. Ad esempio: "In base al report finanziario allegato, analizza la redditività dell’azienda negli ultimi 5 anni" fornendo poi i dati chiave del report o allegando il testo.
Un principio correlato è quello di separare le istruzioni dal contenuto grezzo di input. Ad esempio, se stiamo passando al modello un articolo da riassumere, conviene chiaramente distinguere l’istruzione "Riassumi il seguente testo..." dal testo stesso, magari usando separatori come `"""` o `###`. Questo aiuta l’AI a non confondere la consegna con il contenuto da elaborare (tecnica nota anche come instructional prompting). In pratica possiamo fare così:
Riassumi il testo seguente in forma di elenco puntato dei punti chiave.
Testo: """
[contenuto dell’articolo]
"""
Notare come l'istruzione è all'inizio, e il testo da elaborare è racchiuso tra delimitatori chiari. Questo schema di formattazione evita equivoci e spesso migliora la qualità della risposta.
Guidare il modello con istruzioni positive
Per massimizzare l’efficacia, un prompt dovrebbe enfatizzare "cosa fare" piuttosto che cosa non fare. È dimostrato che limitarsi a dire al modello cosa evitare può portare a risultati poco focalizzati o addirittura paradossalmente invitarlo a menzionare proprio l’argomento proibito, perché lo si è introdotto.
Ad esempio, invece di scrivere "Non divagare e non usare un tono informale" è meglio specificare cosa si vuole "Fornisci una risposta concisa (massimo 3 frasi) e mantieni un tono formale e diretto.". In questo modo diamo al modello un'indicazione chiara del comportamento desiderato, anziché lasciarlo dedurre dal solo divieto.
Allo stesso modo, se vogliamo prevenire contenuti indesiderati, è utile offrire un’alternativa corretta. Ad esempio, dire a un assistente: "Non fornire consigli medici" è meno efficace rispetto a "Se ti vengono chieste informazioni di tipo medico, rispondi sempre che non sei un dottore e che il consulto di un medico professionista è necessario". In questo secondo caso, il modello riceve sia il divieto che l’istruzione su cosa fare al suo posto.
Formattazione e struttura dell’output
Un aspetto spesso trascurato è indicare esplicitamente il formato dell’output desiderato. I modelli LLM sono in grado di adattare il loro stile di risposta se glielo chiediamo con precisione. Dunque, nel prompt è buona pratica specificare la forma in cui vogliamo la risposta: elenco puntato, tabella, codice, linguaggio naturale continuo, stile particolare, lunghezza approssimativa e così via. Ecco alcuni esempi:
- "Rispondi con un elenco puntato di 5 elementi."
- "Fornisci la risposta in formato JSON, con le chiavi 'titolo', 'autore', 'anno'."
- "Scrivi un paragrafo di circa 100 parole che riassuma quanto sopra, usando un tono colloquiale."
- "Genera la tua risposta esclusivamente in Markdown."
Mostrare al modello uno schema di output può essere ancora più efficace. Ad esempio, se vogliamo estrarre entità da un testo, potremmo includere un esempio di formato atteso:
```
Formato desiderato:
- Nomi di persone: ...
- Nomi di aziende: ...
- Argomenti specifici: ...
- Temi generali: ...
```
In questo modo l’AI saprà esattamente come organizzare la risposta. Questo principio “show, don’t just tell è molto potente: fornire un esempio di output formattato funge da guida concreta per il modello, riducendo l’interpretazione libera.
Esempi nel Prompt (Few-Shot)
Fornire esempi di input-output direttamente nel prompt è un metodo fondamentale per “insegnare” al volo al modello cosa ci si aspetta (tecnica del few-shot prompting). Possiamo immaginare questi esempi come casi di addestramento intratestuali: il modello li utilizza per inferire il pattern di soluzione e lo applica poi al nuovo input richiesto.
Ad esempio, se vogliamo che il modello traduca frasi in gergo giovanile, potremmo inserire nel prompt un paio di frasi con la relativa traduzione in gergo, prima di fargli tradurre una nuova frase.
Questo si rivela utile specialmente in compiti di classificazione, conversione di formato o stile, dove mostrando alcuni esempi corretti riduciamo l'ambiguità.
Consideriamo il caso di una definizione di termini: potremmo strutturare il prompt così:
```
Esempi:
- Input: "gatto" -> Output: "Un piccolo mammifero peloso con i baffi."
- Input: "cane" -> Output: "Un canide domestico noto per la sua lealtà."
Ora forniscimi una definizione per:
- Input: "elefante" -> Output:
```
In tal modo il modello comprenderà il tipo di output atteso (una definizione concisa) e continuerà nello stesso formato per "elefante".
Un altro uso è mostrare esempi di tono o stile. Se desideriamo un certo registro (umoristico, formale, tecnico, semplicissimo, ecc.), possiamo includere piccoli esempi di frasi nel tono X contrapposte a frasi nel tono Y, e poi richiedere di produrre un testo nel tono X. Questo aiuta l'AI a catturare sottili differenze di stile.
Si noti che aggiungere esempi (few-shot) allunga il prompt e consuma token, quindi va fatto solo se necessario. Spesso conviene iniziare con approccio zero-shot (nessun esempio, solo istruzioni) e vedere se il risultato è soddisfacente, e solo in caso aggiungere esempi per colmare le lacune. I modelli più recenti sono sorprendentemente bravi a generalizzare, quindi non sempre servono esempi, ma quando si punta alla massima precisione il few-shot può fare la differenza.
Uso di ruoli e persone
Un principio fondamentale per ottenere risposte con un certo taglio consiste nel definire un ruolo che il modello deve assumere. I prompt possono istruire l’AI a “parlare” da una specifica prospettiva o con le competenze di un dato esperto, influenzando sia il contenuto che il tono della risposta. Ad esempio:
- "Immagina di essere un medico esperto in dermatologia: " (segue la domanda su un sintomo cutaneo)
- "Sei un assistente finanziario AI. Fornisci consigli in modo chiaro e prudente..."
- "Rispondi come se fossi un insegnante di storia dell’arte del Rinascimento:"
Tali role prompting aiutano a contestualizzare le conoscenze che il modello dovrebbe usare. Un modello di base sa tante cose, ma indicando un ruolo gli facciamo filtrare e presentare le informazioni più pertinenti a quel ruolo. Questo spesso si traduce in risposte più coerenti e contestualizzate per il dominio di conoscenza richiesto.
Allo stesso modo, possiamo specificare un tono o stile di scrittura desiderato (tecnica dello style prompting).
Ad esempio: "Rispondi in tono formale e professionale," oppure "Adotta uno stile colloquiale, scherzoso," o ancora "Usa uno stile giornalistico asciutto." L’effetto è che il modello modellerà il registro linguistico secondo queste istruzioni. Si possono combinare ruolo e stile: "In qualità di esperto legale, spiega in tono semplice...," oppure "Sei un comico: rispondi in modo umoristico alla domanda...".
In letteratura, sono stati mostrati esempi di prompt identici nel contenuto ma variati nel tono (formale vs informale, tecnico vs narrativo, ecc.) per dimostrare come il modello possa adattarsi a richieste di stile diverse. Sfruttare questa flessibilità è essenziale per ottenere output adatti al contesto di utilizzo.