✔️✔️ Doppie Spunte Blu Cap. 11 · Prompt engineering decente

Puntata 113

Puntata 113 — Few-shot prompting

Livello: ✔️✔️ Doppie Spunte Blu · Capitolo 11 · Prompt engineering decente

Tre esempi valgono più di tre pagine di spiegazioni. Il modo più sottovalutato per portare un task dal 60% al 90% di accuratezza, senza fine-tuning.

una lavagna su cui sono scritti 3 esempi numerati con frecce input→output; sotto la lavagna, un robottino che osserva e impara la regola implicita

La logica fondamentale

Spiegare a parole come un task vada fatto è spesso più difficile che mostrarlo. Pensa a quando insegni a un bambino a “fare la bici” — non con un manuale, con la spinta e la dimostrazione.

Il few-shot prompting è esattamente questo: dai al modello 1-5 esempi input → output, e lui estrae il pattern per applicarlo a input nuovi.

Tecnicamente si chiama in-context learning. È una delle capacità che ha distinto GPT-3 (2020) dai modelli precedenti, ed è il motivo per cui l’LLM moderno è “programmabile in linguaggio naturale”.


Zero-shot vs few-shot vs many-shot

ModalitàEsempi fornitiQuando
Zero-shot0 (solo istruzione)Task semplici, ben noti
One-shot1Quando il formato è semplice
Few-shot2-5Formato/regola implicita complessa
Many-shot20-100+Domini specifici, modelli long-context

Many-shot è una novità del 2024-25, resa possibile dai contesti da 200k-2M token: invece di fine-tunare un modello, gli mostri 50 esempi nel prompt. Spesso competitivo con fine-tuning costoso, vedi Anthropic 2024 “Many-Shot In-Context Learning”.


Esempi pratici

Caso 1 — Classificazione sentiment

Zero-shot (spesso impreciso):

Classifica come positivo/negativo/neutro:
"Il servizio era ok, niente di che."

Few-shot (molto più accurato):

Classifica come positivo/negativo/neutro.

Esempio 1:
Testo: "Esperienza fantastica, torneremo!"
Classe: positivo

Esempio 2:
Testo: "Cibo freddo, cameriere maleducato."
Classe: negativo

Esempio 3:
Testo: "Locale carino ma niente di indimenticabile."
Classe: neutro

Adesso classifica:
Testo: "Il servizio era ok, niente di che."
Classe:

Risultato: il modello capisce che “ok, niente di che” è neutro, non “leggermente positivo”. Il pattern degli esempi guida la decisione.

Caso 2 — Estrazione strutturata

Estrai informazioni dai messaggi clienti in formato JSON.

Esempio 1:
Input: "Vorrei spostare il mio appuntamento di mercoledì alle 15 a giovedì stessa ora."
Output: {"intento": "modifica_appuntamento", "da": "mercoledì 15:00", "a": "giovedì 15:00"}

Esempio 2:
Input: "Cancellate la mia prenotazione di domani sera."
Output: {"intento": "cancellazione", "quando": "domani sera"}

Esempio 3:
Input: "Posso avere conferma del mio appuntamento del 12 giugno?"
Output: {"intento": "conferma", "data": "2026-06-12"}

Adesso processa:
Input: "Avete posto sabato pomeriggio per un controllo veloce?"
Output:

Il modello impara non solo la struttura JSON, ma anche la normalizzazione delle date (“12 giugno” → “2026-06-12”). Senza ulteriori istruzioni.

Caso 3 — Stile di scrittura

Riscrivi le frasi in stile "Hemingway": frasi corte, niente avverbi,
verbi attivi, niente subordinate ridondanti.

Esempio:
Originale: "Il vecchio uomo che era seduto nel piccolo ed accogliente
bar di prima mattina pensava lentamente alla sua giovinezza che era
ormai lontana."
Hemingway: "Il vecchio sedeva al bar. Era mattina presto. Pensava
alla giovinezza. Era lontana."

Esempio:
Originale: "Maria, che aveva sempre amato il mare in modo profondo,
sentiva una grande malinconia ogni volta che osservava le onde."
Hemingway: "Maria amava il mare. Le onde le facevano male. Era così."

Adesso riscrivi:
Originale: "Era una giornata estremamente calda di luglio, con un sole
implacabile che bruciava le strade vuote di Roma."
Hemingway:

Lo stile imitativo arriva in un solo prompt, senza dover spiegare cos’è lo “stile Hemingway”.


Le 5 regole del few-shot che funziona

1. Esempi rappresentativi

Devono coprire la varietà del problema, non essere tutti dello stesso tipo. Per sentiment: positivo + negativo + neutro + edge case (sarcasmo, ambiguità).

2. Formato consistente

Tutti gli esempi devono avere la stessa struttura: stesse etichette (“Input/Output”, “Esempio/Risposta”, ecc.), stessi separatori. Inconsistenza confonde il modello.

3. Ordine intenzionale

L’ordine degli esempi conta. Gli ultimi esempi spesso pesano di più (recency bias). Metti un caso difficile vicino all’input se vuoi che il modello faccia attenzione a quel tipo.

4. Quantità giusta

  • 2-3 esempi: 80% del beneficio.
  • 5 esempi: 95% del beneficio.
  • 10+ esempi: rendimenti decrescenti, costo aumenta.

Eccezione: many-shot specializzato (50-100 esempi) per domini molto particolari.

5. Edge case esplicitati

Se ci sono casi limite che vuoi gestire in modo specifico, mostra quel caso come esempio. Es: per estrazione date, includi un esempio in cui la data manca → output con "data": null.


Quando il few-shot NON serve

❌ Task molto comuni (riassumere, tradurre, rispondere a una domanda generica): il modello sa già farli, zero-shot funziona.

❌ Task molto creativi (scrivere una poesia originale): gli esempi limitano la creatività, non la guidano.

❌ Quando hai molto contesto da iniettare: meglio usare quel context window per dati reali piuttosto che per esempi sintetici.

✅ Sempre utile per: classificazione, estrazione strutturata, stile specifico, formato output preciso, task di nicchia.


Few-shot e modelli reasoning

I modelli con thinking esteso (o-series, Claude reasoning, DeepSeek-R) sono meno dipendenti dal few-shot: capiscono dalle istruzioni quasi quanto dagli esempi.

In compenso, costano di più per inferenza e sono più lenti. Trade-off:

  • Task semplice + modello fast: 2-3 esempi few-shot, bassa latenza, basso costo.
  • Task complesso + modello reasoning: descrizione testuale ricca, 0-1 esempi, lascia ragionare il modello.

Per uso produttivo: spesso meglio modello fast + few-shot ben fatto, è più predicibile e veloce.


Few-shot dinamico (advanced)

In produzione, invece di mettere esempi fissi, recupera dinamicamente esempi simili all’input corrente da un database. Pipeline:

  1. Utente manda input.
  2. Cerchi nei tuoi dati passati (con embedding, puntata 106) i 3 esempi più simili.
  3. Li metti nel prompt al volo.
  4. Modello risponde meglio.

Si chiama dynamic few-shot o RAG-for-prompting. Standard in produzione AI moderna.


Few-shot per fine-tuning leggero

Se trovi che 5 esempi non bastano e ne servirebbero 200, sei nel territorio dove conviene un fine-tuning vero (LoRA, vedi puntata 218). Regola euristica:

  • Fino a 5-10 esempi: few-shot, dentro il prompt.
  • Da 10 a 100: many-shot in long context.
  • Oltre 100: valuta fine-tuning.

TEST pratico (5 minuti)

Pensa a una task ripetitiva di lavoro: classificazione email, estrazione dati da PDF, riformulazione di testi in stile aziendale.

  1. Scrivi 3 esempi input → output ottimi.
  2. Costruisci il prompt con i 3 esempi + un nuovo input.
  3. Confronta con il prompt zero-shot (solo istruzione, senza esempi) sullo stesso input.

Quasi sempre noterai:

  • Coerenza con il formato desiderato — drasticamente migliore.
  • Riduzione delle “uscite divagatorie” del modello.
  • Riproducibilità — stesso input dà output simile, non variazioni casuali.

In produzione: passa da “funziona spesso” a “funziona quasi sempre”. È lo stesso modello, ben istruito.


Take-away in una riga

Tre esempi valgono più di un paragrafo di istruzioni. Il few-shot è il prompt engineering “che paga” più di tutto il resto, per task strutturati.

➡️ Prossima puntata: Chain-of-thought — “Ragiona passo passo”.