Tecniche Avanzate di Prompt Engineering

Negli ultimi anni, l’elaborazione del linguaggio naturale ha visto una notevole spinta in avanti, grazie soprattutto ai modelli di linguaggio di grandi dimensioni o LLM.
La progettazione di questi modelli si basa tipicamente su un obiettivo di auto apprendimento, che si focalizza sulla previsione della parola successiva in frasi incomplete. L’abilità di questi modelli di generare risposte coerenti e contestualmente rilevanti è il risultato del processo di addestramento, durante il quale i modelli imparano ad associare parole e frasi con al contesto di riferimento. La qualità della risposta può venire influenzata da vari fattori, ad esempio il prompt fornito al modello, gli iperparametri del modello e la varietà dei dati di addestramento.

> Scopri il corso: Large Language Models (LLM): Implementazione e Applicazioni Avanzate

Modelli come GPT-3, GPT-4, Gemini, Claude e LlaMA-2 vengono ormai utilizzati tutti i giorni per portare a termini compiti come l’estrazione di informazioni, la creazione di contenuto di testo, analisi di dati, riassunti e generazione di strategie di apprendimento.

> Scopri il corso: Strumenti di Conversational AI con LLaMA-index e OLaMA library

La selezione del prossimo token

Prima di entrare nel vivo dell’argomento e capire come ottimizzare i prompt, è necessario fare un passo indietro e comprendere prima di tutto che cos’è un token e quali sono le tecniche di selezione del prossimo token.

> Leggi anche: Prompt Engineering: risorse e best practice

Al centro di un modello di linguaggio di grandi dimensioni (LLM) c’è infatti la capacità di generare una lista di probabilità per ogni token del vocabolario di essere il prossimo token. Queste probabilità vengono poi utilizzate dal meccanismo di ricerca scelto. Possiamo pensare al token come all’unità di base che un LLM utilizza per processare e generare testo. I token possono essere assemblati per formare parole, frasi e interi testi.

In altre parole, il modello calcola continuamente la probabilità di ogni possibile parola o frammento di parola (token) del suo vocabolario di essere il prossimo nella sequenza. Questa distribuzione di probabilità è alla base di tutti i metodi di selezione del token, tra cui:

  • Greedy search: sceglie sempre il token con la probabilità più alta. È un metodo semplice e veloce, adatto per compiti che richiedono risposte deterministiche, che tuttavia può mancare di creatività.
  • Beam search: mantiene più sequenze candidate (beam) simultaneamente e ad ogni passo, espande tutti i beam con i token più probabili e mantiene solo i migliori. Richiede più sforzo a livello computazionale, ma può portare a risultati più raffinati.
  • Il campionamento top-k e top-p sono tecniche che introducono un po’ di casualità controllata. Invece di scegliere sempre la parola più ovvia, il modello seleziona tra le opzioni più probabili, rendendo il testo più vario e interessante, pur mantenendo un senso generale.
  • Infine, il campionamento con temperatura è come regolare la “creatività” del modello. Questo metodo modifica la distribuzione di probabilità dei token, permettendo di ottenere risposte più o meno creative.

La variazione dei parametri top-p e temperatura, è la prima delle tecniche avanzate di prompt engineering che andiamo a discutere.

Temperatura e Top P

Un modello di linguaggio di grandi dimensioni (LLM) possiede numerosi parametri che devono essere attentamente considerati per ottimizzare le performance, tra cui temperatura, top-p, top-k, repetition penalty, length penalty, max tokens, stop sequences e molti altri.

> Leggi anche: Che cosa sono e come funzionano i Large Language Model

Quando si progettano e si testano i prompt, si interagisce direttamente con l’LLM oppure tramite un’API. In questo secondo caso è possibile configurare i parametri temperatura e top-p per ottenere risultati migliori per i propri prompt.

La temperatura, come già accennato, può anche essere descritta come il livello di creatività di un modello di linguaggio, cioè controlla il livello di randomizzazione dell’output generato: una temperatura più bassa produce output più deterministici, mentre una temperatura più alta genera risultati più creativi. Ad esempio, l’API di OpenAI consente di sperimentare con la temperatura, che può variare da 0 a 2.

Il parametro top-p, invece, controlla il livello di determinismo ed è espresso da un valore compreso tra 0 e 1. Valori tipici di top-p variano tra 0.9 e 0.95: un top-p più basso genera testo più conservativo, mentre un top-p più alto produce output più creativi, ma potenzialmente meno coerenti.

Diversi strumenti e applicazioni permettono di modificare questi parametri, tra cui l’API di OpenAI, LlamaIndex, Hugging Face Transformers e FastChat. In ogni caso, è sconsigliato modificare contemporaneamente sia la temperatura, sia il top-p, poiché entrambi i parametri influenzano significativamente l’output e potrebbero annullarsi o amplificarsi a vicenda, rendendo praticamente impossibile ottenere un risultato significativo.

Tecniche avanzate di Prompt Engineering

Vediamo ora quali sono alcune delle più utilizzate (e più accessibili) tecniche di Prompt Engineering

Chain of Thought (CoT)

CoT è una tecnica che simula il pensare passo per passo, mostrando i passaggi intermedi del ragionamento. Viene utilizzata per migliorare la trasparenza del modello e per identificare eventuali errori o aree di miglioramento. Questa tecnica è particolarmente utile per risolvere problemi matematici complessi e compiti che richiedono ragionamento logico, come il debugging del codice.

CoT può essere combinata con few shot learning, una tecnica di base di prompt engingeering che introduce degli esempi nel prompt.

Esempio di prompt: “Calcola 23 x 7. Mostra il tuo ragionamento passo per passo.

Self-consistency

Questa tecnica genera multiple risposte e sceglie quella più coerente. Viene utilizzata principalmente in compiti di traduzione, riassunti, risposte a domande aperte e risoluzione di problemi con molteplici soluzioni possibili.

Esempio di prompt: “Traduci in italiano It’s raining cats and dogs. Utilizza tre traduzioni indipendenti

Traduzione 1: “Sta piovendo a catinelle.”
Traduzione 2: “Piove così forte che sembra che cadano gatti e cani dal cielo.”
Traduzione 3: “Sta diluviando.”
La traduzione più appropriata in generale sarebbe “Sta piovendo a catinelle”, ma la nostra scelta finale potrebbe dipendere dal contesto specifico di utilizzo.

Prompt Generate Knowledge

Questa tecnica usa il modello per generare informazioni aggiuntive prima di rispondere alla domanda principale. Migliora la qualità e la precisione delle risposte e è utile per espandere la “conoscenza” del modello su un argomento specifico.
Questa tecnica è particolarmente utile nella ricerca di sintesi e informazioni, nella scrittura di articoli, nell’analisi di scenari complessi e nella generazione di idee creative.

Esempio di prompt: “Prima di rispondere, genera tre fatti sulla fotosintesi. Poi spiega perché le piante sono verdi.”

Tree of Thoughts (ToT)

ToT esplora multiple linee di ragionamento simultaneamente, come un albero decisionale. È particolarmente utile per problemi che richiedono considerazioni a lungo termine, come la pianificazione strategica, l’analisi di scenari what-if, la risoluzione di puzzle logici e problemi multi-step.

Esempio di prompt: “Risolvi il problema: Se hai 5 mele e ne dai 2 a un amico, quante ne rimangono? Esplora due possibili interpretazioni.

Retrieval Augmented Generation (RAG)

RAG combina l’accesso a una base di conoscenza esterna con le capacità generative del modello. Questa tecnica sfrutta la flessibilità dei modelli generativi con l’accuratezza delle informazioni recuperate e può essere aggiornato più facilmente.
La tecnica è particolarmente adatta alla risposta di domande fattuali, alla generazione di contenuti basati sui fatti e all’assistenza clienti con accesso a knowledge base.

> Scopri il corso Retrieval-Augmented Generation (RAG)

Scenario: Un cliente sta chiedendo informazioni sulle politiche di bagaglio per un volo internazionale.
Prompt del cliente: “Quali sono le regole per il bagaglio a mano sui voli internazionali della vostra compagnia?”

Il sistema accede al database della compagnia aerea e recupera le seguenti informazioni e l’’LLM utilizza queste informazioni per generare una risposta completa e coerente. Se ci fossero state modifiche recenti alle politiche, il sistema RAG avrebbe potuto accedere agli aggiornamenti più recenti e includerli nella risposta. Allo stesso modo, se il sistema avesse accesso alle informazioni sul volo specifico del cliente (ad esempio: classe di viaggio o destinazione), potrebbe ulteriormente personalizzare la risposta.

Le tecniche avanzate di prompt engineering che abbiamo esaminato offrono enormi potenzialità per migliorare le performance dei modelli di linguaggio di grandi dimensioni.
L’utilizzo combinato di queste tecniche può portare a risultati notevolmente migliori, sebbene sia importante considerare il costo computazionale: metodi come Self-consistency e Tree of Thoughts richiedono infatti risorse significative.
La personalizzazione è inoltre un fattore determinante: l’efficacia di ciascuna tecnica dipende dal modello specifico e dal contesto del problema, per cui è essenziale sperimentare e adattare l’approccio alle proprie esigenze.
Il prompt engineering è in continua evoluzione e nuove metodologie emergono costantemente, ma i modelli possono ancora commettere errori o produrre risultati incoerenti: è indispensabile verificare le informazioni.

Chen, B., Zhang, Z., Langrené, N., & Zhu, S. (2023). Unleashing the potential of prompt engineering in Large Language Models: a comprehensive review. arXiv preprint arXiv:2310.14735.

Guida al Prompt Engineering: https://www.promptingguide.ai/it

Hyrkas, E. (2023). How to Tune LLM Parameters for Top Performance: Understanding Temperature, Top K, and Top P. PhData. https://www.phdata.io/blog/how-to-tune-llm-parameters-for-top-performance-understanding-temperature-top-k-and-top-p/

Sahoo, P., Singh, A. K., Saha, S., Jain, V., Mondal, S., & Chadha, A. (2024). A systematic survey of prompt engineering in large language models: Techniques and applications. arXiv preprint arXiv:2402.07927.