Prompt Engineering
Il prompt engineering progetta istruzioni, contesto ed esempi forniti a un modello di IA per indirizzarne l'output senza riaddestrarlo, dagli LLM alla visione artificiale.
Il prompt engineering consiste nel progettare l'input fornito a un modello generativo, comprese le istruzioni, il contesto, gli esempi e il formato di output richiesto, per orientare ciò che il modello produce senza modificare i suoi pesi. Si è affermato con GPT-3: in Language Models are Few-Shot Learners (2020), OpenAI ha mostrato che un modello con 175 miliardi di parametri poteva svolgere nuovi compiti senza aggiornamenti del gradiente quando il prompt descriveva il compito e forniva alcuni esempi; lo studio definisce questa capacità apprendimento in contesto. Oggi il prompt è il mezzo principale per controllare modelli linguistici di grandi dimensioni (LLM), modelli visione-linguaggio (VLM), generatori da testo a immagine e modelli di visione basati su prompt.
Tecniche principali#
- Istruzioni e ruoli: Un prompt di sistema definisce il ruolo, le regole e il pubblico del modello, mentre delimitatori come intestazioni o tag in stile XML separano le istruzioni dai dati elaborati.
- Esempi few-shot: Coppie input-output svolte mostrano il compito e il formato della risposta con maggiore precisione rispetto a una descrizione. Un prompt senza esempi è zero-shot.
- Formato di output: Il prompt specifica il formato, ad esempio un elenco o JSON con chiavi definite. Quando il codice deve analizzare il risultato, gli output strutturati impongono uno schema durante la decodifica, invece di affidarsi alla richiesta.
- Prompting chain-of-thought: Richiedere passaggi intermedi del ragionamento prima della risposta, migliorando l'accuratezza nei problemi a più passaggi.
- Concatenamento dei prompt: Suddividere un'attività complessa in più prompt, ciascuno con un compito circoscritto, collegati dal codice.
- Contesto recuperato: Inserire documenti o dati trovati tramite ricerca affinché il modello risponda basandosi sui fatti forniti anziché sulla memoria.
I fatti forniti riducono le allucinazioni, e la loro posizione è importante: lo studio Lost in the Middle ha rilevato che i modelli usano meglio le informazioni quando compaiono all'inizio o alla fine di una lunga finestra di contesto, e peggio quando sono sepolte nel mezzo.
L'effetto degli esempi si vede più chiaramente su un modello base mai sottoposto a fine-tuning delle istruzioni. Questo frammento fornisce a GPT-2, caricato con Transformers di Hugging Face, la stessa istruzione, con e senza tre esempi:
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
# The same instruction, without and with three worked examples that show the answer format
instruction = "Convert each country to its capital city.\n"
prompts = {
"zero-shot": instruction + "Italy:",
"few-shot": instruction + "France: Paris\nJapan: Tokyo\nCanada: Ottawa\nItaly:",
}
for name, prompt in prompts.items():
inputs = tokenizer(prompt, return_tensors="pt")
output = model.generate(**inputs, max_new_tokens=4, do_sample=False, pad_token_id=tokenizer.eos_token_id)
completion = tokenizer.decode(output[0, inputs.input_ids.shape[1] :])
print(f"{name}: {completion!r}")Stampa zero-shot: '\n\nItaly is' e few-shot: ' Rome\nSpain:'. La sola istruzione ha portato GPT-2 a scrivere prosa sull'Italia, mentre i tre esempi lo hanno indotto a rispondere "Roma" nel formato previsto e a continuare lo schema con il paese successivo.
La progettazione dei prompt è empirica#
Piccole modifiche alla formulazione o all'impaginazione possono cambiare notevolmente i risultati. Melanie Sclar e colleghi hanno misurato differenze di accuratezza fino a 76 punti su LLaMA-2-13B dovute alle sole modifiche di formattazione, come separatori, uso delle maiuscole e spaziatura; la sensibilità è rimasta anche con modelli più grandi, più esempi e il fine-tuning delle istruzioni. I prompt vengono quindi sviluppati come il codice: testati su un insieme fisso di input con output corretti noti, rivisti in base agli errori e versionati, una pratica abituale di LLMOps.
Il ciclo può essere automatizzato. Automatic Prompt Engineer (APE), sviluppato da Yongchao Zhou e colleghi, fa proporre a un LLM istruzioni candidate e conserva quelle che ottengono i punteggi migliori sugli esempi; in Large Language Models Are Human-Level Prompt Engineers, le sue istruzioni hanno eguagliato o superato quelle scritte da persone in 19 attività su 24.
Prompt per i modelli di visione#
Nella visione artificiale, i prompt assumono diverse forme. I generatori da testo a immagine come Stable Diffusion rispondono a descrizioni del soggetto, dello stile, dell'illuminazione e della composizione, oltre che a prompt negativi che elencano gli elementi da evitare. I modelli di segmentazione interrogabili accettano prompt visivi come punti e riquadri, e SAM 3 di Meta accetta anche brevi sintagmi nominali e segmenta ogni istanza del concetto indicato; Ultralytics Platform lo usa per l'annotazione automatica guidata da prompt testuali.
I rilevatori a vocabolario aperto trasformano i nomi delle classi in prompt. Ultralytics YOLOE rileva e segmenta tutte le classi indicate da set_classes(), come "carrello elevatore" o "autobus a due piani", confrontando le caratteristiche delle regioni con i vettori di embedding testuali di quei nomi; la formulazione cambia quindi direttamente ciò che il modello rileva. Poiché la corrispondenza si basa sull'aspetto, i prompt che dipendono dallo stato, dalla posizione o da un confronto, come "danneggiato", "il più a sinistra" o "quello trasportato", non hanno un riferimento visivo affidabile; funzionano meglio i nomi vicini alle categorie di uso comune.
Prompt engineering e termini correlati#
- Prompt tuning: Apprende vettori di prompt continui tramite discesa del gradiente su dati etichettati. Il prompt engineering consiste nello scrivere il prompt a mano in linguaggio naturale.
- Fine-tuning: Modifica i pesi del modello addestrandolo su un dataset etichettato. Il prompt engineering lascia invariato il modello e opera in fase di inferenza.
- Context engineering: Comprende tutto ciò che entra nel contesto del modello in un'applicazione, inclusi i documenti recuperati, i risultati degli strumenti e la memoria. Il prompt engineering riguarda la scrittura delle istruzioni e degli esempi.
- Prompt injection: Un attacco che nasconde istruzioni nel testo o nelle immagini letti dal modello, facendole prevalere sul prompt dello sviluppatore.










