Meta-Prompting: delegare al modello AI la generazione del prompt ottimale

Come ho scritto nell’articolo Pipeline di inferenza di un Large Language Model (LLM) – DevAdmin Blog un LLM è una macchina probabilistica altamente sofisticata che trasforma sequenze di token in altre sequenze di token, sfruttando architetture Transformer e addestramento su larga scala.

Questo significa che un LLM:

  • non “capisce” realmente la richiesta
  • non ragiona come un umano
  • segue pattern probabilistici appresi dai dati di addestramento

Il prompt non è che il contesto statistico che orienta questa distribuzione di probabilità.

In altre parole quando scriviamo un prompt, stiamo di fatto:

  • definendo il contesto semantico
  • attivando pattern appresi dal modello
  • restringendo lo spazio delle possibili continuazioni

In definitiva un prompt ben scritto riduce l’entropia della distribuzione di probabilità.

In pratica un Prompt vago come ad esempio:

“Scrivi un testo sui database”

 

avrà una distribuzione di probabilità molto ampia e i possibili output saranno:

  • spiegazione base
  • tutorial
  • storia dei database
  • confronto SQL vs NoSQL
  • definizione generica

Mentre un prompt più preciso come ad esempio:

“Scrivi un articolo tecnico per sviluppatori backend che spieghi le differenze tra database relazionali e documentali, includendo esempi SQL e MongoDB.”

 

avrà una distribuzione di probabilità più concentrata e produrrà risultati più coerenti.

Tenendo conto che sebbene il prompt impatta sulla distribizione di probabilità va scritto in linguaggio naturale possiamo vedere il prompt in questo modo:

Un prompt è un programma scritto in linguaggio naturale che configura il comportamento probabilistico del modello.

 

E’ questa è, di fatto, la vera sfida dell’intellingenza artificiale generativa, ovvero permettere l’iterazione con il sistema in linguaggio naturale senza più la necessità di utilizzare linguaggi specifici di intereazione come potevano essere ENIAC coding system, Assembler, FORTRAN, COBOL, Pascal, C, C++, Perl, PHP, Ruby, SQL, C#, F#, GO, Rust (solo per fare alcuni esempi in ordine cronologico).

Ovviamente anche se si può utilizzare il linguaggio naturale questo non significa che non servano più professionalità ingrado di dialogare in modo efficace con i sistemi.

Infatti anche se per utilizzare un LLM non è necessario conoscere uno o più linguaggi di programmazione occorre sempre avere ben presente come funziona la macchina e come impartire richieste efficaci in grado di definire il contesto semantico e configurare la migliore distribuzione di probabilità in modo che sia possibile attivare i pattern appresi dal modello che producono la risposta più coerente.

Non per nulla Andrej Karpathy (allora Direttore dell’IA presso Tesla e co-fondatore di OpenAI) il 5 luglio 2020, pochi mesi dopo il rilascio delle API di GPT-3, su Twitter utilizzò l’espressione “prompt engineering subtleties” (“sottigliezze del prompt engineering”) per riferirsi ad un fenomeno tecnico allora sorprendente: il fatto che piccole, apparentemente insignificanti variazioni sintattiche o semantiche nell’input potessero stravolgere completamente le prestazioni di un LLM (i risultati delle analisi a cui si riferiva erano riportai in GPT-3 Creative Fiction · Gwern.net).

L’intuizione di Andrej Karpathy circa l’importaza di ingegnerizzare la scrittura dei prompt per ottenere risultati migliori venne poi formalizzata nel 2021 nel paper Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing in cui gli autori (Pengfei Liu, Weizhe Yuan, Jinlan Fu, Zhengbao Jiang, Hiroaki Hayashi E Graham Neubig) classificano il prompting non come un trucco temporaneo, ma come il “Quarto Paradigma” dell’elaborazione del linguaggio naturale (dopo l’ingegneria delle feature, l’architettura e il fine-tuning).

Oggi possiamo dire che il Prompt Engineering è definito come “l’ottimizzazione empirica della distribuzione dei token di input per massimizzare la verosimiglianza della risposta desiderata“. Il Prompt Engineering si basa su seguenti principi ( a riguardo si veda [2406.06608] The Prompt Report: A Systematic Survey of Prompt Engineering Techniques):

  • Chiarezza: Un prompt chiaro riduce l’ambiguità e migliora la qualità dell’output.
  • Contesto: Fornire schemi decisionali: Fornire contesto (ruolo, obiettivo, pubblico, vincoli) permette al modello di generare risposte più pertinenti.
  • Direzione: Indicare tono, stile, ruolo, persona o approccio guida il modello verso output più controllati e coerenti.
  • Struttura: Specificare il formato dell’output (lista, tabella, JSON, paragrafi, bullet points) riduce la necessità di post‑processing.
  • Iterazione: Il prompt engineering è un processo iterativo: si testa, si osserva, si affina.

Il Prompt Engineering funziona perché gli LLM sono basati sui Transformers che sono un sistema di attenzione (Self-Attention). Ogni parola (token) nel prompt “pesa” sulle altre quindi:

  • Se il prompt è vago, l’attenzione è dispersa su tutto il dataset di addestramento (risposte generiche).
  • Se il prompt è strutturato l’attenzione del modello viene “sequestrata” dai token logici appena generati, rendendo la risposta corretta la prosecuzione statistica più naturale e probabile del discorso.

Di seguito una sintetica analisi delle principali tecniche di prompting che permettono di restringere lo spazio di probabilità, forzando il modello verso “percorsi” semantici più accurati.


Zero-Shot Prompting

Come funziona: Si fornisce un’istruzione diretta senza esempi. Il modello si affida interamente alla conoscenza pre-appresa e alla capacità di generalizzazione dei Transformer.

Utile per: Compiti standard (riassunti, traduzioni semplici, sentiment analysis).

Non utile per: Compiti con formati di output rigidi o logiche di business specifiche.

Perché funziona: Sfrutta l’allineamento (Instruction Tuning) effettuato tramite RLHF (Reinforcement Learning from Human Feedback), che ha “insegnato” al modello a seguire i verbi imperativi.


Few-Shot Prompting
Come funziona: Si forniscono alcuni esempi di coppie “input-output” prima della domanda finale.

Utile per: Definire lo stile, il tono o un formato di dati complesso (es. JSON specifico).

Non utile per: Ragionamenti logici multistrato (dove il modello tende a indovinare la risposta finale saltando i passaggi).

Perché funziona: Riduce l’entropia. Gli esempi agiscono come un “ancoraggio” statistico che aumenta drasticamente la probabilità che il token successivo segua lo schema stabilito.


Chain-of-Thought (CoT)

Come funziona: Si istruisce il modello a esplicitare i passaggi intermedi del ragionamento (es. “Pensiamo passo dopo passo”).

Utile per: Problemi matematici, logici, simbolici o di pianificazione.

Non utile per: Compiti creativi o puramente descrittivi, dove il ragionamento lineare è ridondante.

Perché funziona: I Transformer hanno un limite: il calcolo per ogni token è fisso. Esplicitando i passaggi, il modello usa i token intermedi come “memoria di lavoro” (Working Memory). La probabilità del risultato finale è condizionata dalla correttezza dei token di ragionamento precedenti.


Self-Consistency (CoT Aggregato)
Come funziona: Si chiede al modello di generare diverse catene di pensiero in parallelo per lo stesso problema e si sceglie la risposta più frequente (maggioranza).

Utile per: Massimizzare l’accuratezza in compiti critici dove non è ammesso errore.

Non utile per: Casi in cui la velocità e il costo (token consumati) sono prioritari.

Perché funziona: Essendo una macchina probabilistica, un LLM può prendere un “percorso” sbagliato. Generando più campionamenti, la risposta corretta emerge come il punto di convergenza statistica più stabile.


ReAct (Reason + Act)
Come funziona: Il prompt spinge il modello a generare un pensiero (Thought), compiere un’azione (Action, es. una ricerca web o query SQL) e osservare il risultato (Observation) prima di concludere.

Utile per: Interagire con il mondo esterno o database in tempo reale.

Non utile per: Testi narrativi o compiti di pura sintesi di testi già forniti.

Perché funziona: Interrompe la “chiusura probabilistica” del modello, inserendo dati freschi ed oggettivi nel contesto, che diventano nuovi token su cui basare la successiva previsione.


Role Prompting

Come funziona: agisce come un filtro semantico preliminare. Non aggiunge nuove informazioni al modello (che ha già letto tutto il dataset di addestramento), ma istruisce il meccanismo di Attention a dare priorità a un sotto-insieme specifico di termini, stili e concetti che sono statisticamente correlati a quel ruolo nel corpus di addestramento. Tecnicamente, consiste nell’inserire nel System Message o all’inizio del prompt una direttiva che assegna al modello un’identità specifica, un profilo professionale o un tratto caratteriale (es. “Agisci come un esperto Senior di Cybersecurity” o “Sei un tutor socratico”).

Utile per: 

  • Adattamento del registro: Passare da un linguaggio tecnico a uno divulgativo (es. “Spiegami la relatività come se fossi un maestro elementare”).
  • Simulazione di scenari: Testare come un esperto di marketing reagirebbe a un’idea di business.
  • Standardizzazione dell’output: Se chiedi a un “Programmatore Python Senior”, otterrai codice più commentato e strutturato rispetto a una domanda generica.

Non utile per:

  • Superare limiti di conoscenza: Dire a un modello “Sei un medico” non gli conferisce dati clinici che non ha nel suo database. Se il modello non conosce un fatto, il ruolo aumenterà solo la “sicurezza” con cui inventerà una risposta (allucinazione sicura).
  • Compiti puramente oggettivi: Se chiedi “Quanto fa 2+2?”, assegnare il ruolo di matematico è ridondante e spreca token.

Perché funziona: Un LLM è addestrato su miliardi di documenti che includono forum, libri di testo, chat e manuali professionali. Questi dati non sono un blocco unico, ma formano dei cluster semantici (raggruppamenti di concetti correlati).

  • Restrizione dello Spazio Latente: Senza un ruolo, il modello calcola la probabilità del token successivo pesando l’intera base di conoscenza (risposta media/generica). Assegnando un ruolo, “si sposta” il punto di partenza del modello all’interno di un cluster specifico (es. il cluster “Medicina”).
  • Condizionamento della distribuzione: Se il ruolo è “Pirata”, la probabilità del token “Ahoy” schizza verso l’alto rispetto al token “Buongiorno”. Se il ruolo è “Ricercatore”, la probabilità di citare fonti o usare termini come “tuttavia” o “evidenza” aumenta drasticamente.
  • In-Context Priming: Il ruolo agisce come un segnale di priming che modula l’intero vettore di contesto, rendendo i token “fuori personaggio” statisticamente improbabili.

Il Role Prompting può talvolta attivare dei bias (preudizi) presenti nel dataset. Se si chiede al modello di agire come un “critico cattivo”, potrebbe diventare inutilmente aggressivo perché quella è la firma statistica di un critico nella base di conoscenza.


Instruction tuning

Come funziona: Si usano prompt con struttura “istruzione + contesto + formato”.

Utile per: Task complessi, output formattati.

Non utile per: Prompt creativi o aperti.

Perché funziona: Ottimizza la comprensione del compito e la coerenza dell’output modificando la distribuzione interna affinché, quando il modello riconosce un pattern di token simile a un’istruzione, la sequenza più probabile diventi una risposta che segue quella istruzione.


Come è facile intuire queste sono solo alcune delle tecniche di Prompt Engineering che possono essere utilizzate anche in modo combinato per ottenere risposte più efficaci e precise. Questo significa che è richiesta una formazione specifica per la generazione di prompt efficaci e quindi a livello aziendale è opportuno che alcuni dipendenti si specializzino sulla creazione e gestione dei prompt condividendoli all’organizzazione per consentire agli altri dipendenti di utilizzare prompt strutturati in modo corretto per le specifiche attività.

In ogni caso anche il personale addestrato sulla creazione di prompt potrebbe avere difficoltà ad individuare sempre le tecniche di Prompt Engineering più efficaci o la combinazione di tecniche più efficaci.

Meta-Prompting

Per una generazione efficace dei prompt può essere molto utile il Meta-Prompting, un approccio in cui si chiede al modello di generare o migliorare il prompt stesso prima di eseguire il compito (a volte ci si riferisce a questa tenica anche con i termini Prompt generation o Prompt synthesis).

Nei sistemi basati su LLM, il meta-prompting può essere visto come una forma di meta-programmazione in linguaggio naturale.

L’approccio basato sul Meta-Prompting prevede il seguente flusso:

  • L’utente descrive il compito.
  • L’AI genera il prompt ottimale per svolgerlo.
  • Il prompt generato viene usato per produrre la risposta finale.

Esempio:

Sei un esperto di prompt engineering.
Genera il miglior prompt possibile per chiedere a un modello AI di scrivere un articolo tecnico sul prompt engineering per tecnici informatici.

 

Nel Meta-Prompting c’è un punto spesso sottovalutato: anche la richiesta di generazione del prompt (prompt di richiesta) è essa stessa un prompt che deve essere progettato con cura.

Dal momento che nel Meta-Prompting il flusso operativo può essere sintetizzato come segue:

Utente -> Prompt di richiesta -> AI genera Prompt -> AI esegue Prompt -> Output finale

Se il prompt di richiesta è debole, anche il prompt generato lo sarà.

Per questo motivo nel meta-prompting devono essere applicate tecniche di prompt engineering specifiche , pensate per aiutare il modello a progettare istruzioni di alta qualità.

Tecniche di Prompt Engineering per il Meta-Prompting

1. Role Prompting

La prima tecnica è assegnare esplicitamente il ruolo di Prompt Engineer. 

Esempio:

Sei un esperto Prompt Engineer specializzato nella progettazione di prompt per modelli linguistici avanzati.

 

2. Task Decomposition

Il prompt di richiesta dovrebbe scomporre il compito per ridurre l’ambiguità evitando di scrivere una richiesta vaga come ad esempio:

Genera un prompt per scrivere un articolo tecnico.

 

Scrivere invece una richiesta strutturata come ad esempio:

Genera un prompt che permetta a un LLM di:

  • scrivere un articolo tecnico
  • per sviluppatori software
  • sul tema del prompt engineering
  • con esempi pratici
  • con una struttura chiara

 

La suddivisione in sezioni consente di:

  • ridurre l’ambiguità;
  • guidare il modello a scomporre il problema;
  • migliorare la qualità del ragionamento implicito.

3. Structured Prompting

Un errore comune è chiedere:

Genera un prompt.

 

Molto meglio chiedere formulare una richiesta strutturata come ad esempio:

Il prompt che generi deve includere:

  1. contesto del task
  2.  ruolo del modello
  3. istruzioni operative
  4. formato dell’output
  5. eventuali vincoli

 

Poichè gli LLM sono molto sensibili ai pattern strutturati, la richiesta strutturata consente di:

  • ridurre la dispersione probabilistica;
  • migliorare la coerenza del prompt generato;
  • costringere il modello a generare linee guida operative esplicite aumenta la precisione, la ripetibilità e la controllabilità;
  • La presenza di eventuali vincoli (lunghezza, pubblico target, livello tecnico) riduce l’entropia della generazione.

4. Output Formatting

Dal momento che gli LLM funzionano molto bene quando devono riempire una struttura esplicita è utile anche definire il formato del prompt generato aggiungendo, ad esempio, la seguente richiesta:

Restituisci il prompt finale in formato strutturato con:

  • sezione ruolo
  • sezione task
  • sezione istruzioni
  • sezione formato output

 

5. Delimitatori e contesto esplicito

Per aiutare il modello a separare meta-istruzioni e contenuto è buona pratica delimitare chiaramente la descrizione del task strutturando, ad esempio, la richiesta come segue:

TASK DA TRASFORMARE IN PROMPT
——–

<descrizione del task>

——–

 

6. Richiedere il miglior prompt possibile

Per ottenere un prompt efficace è utile esplicitare l’obiettivo di qualità, in modo da orientare la distribuzione probabilistica verso istruzioni più ricche aggiungendo, ad esempio, la seguente richiesta:

Genera il prompt più chiaro, dettagliato ed efficace possibile.

 

Di seguito un esempio completo di Meta-Prompting riutilizzabile:

Sei un esperto Prompt Engineer specializzato nella progettazione di prompt per modelli linguistici avanzati.

Il tuo compito è progettare il miglior prompt possibile per permettere
a un LLM di eseguire il task descritto.

——————————–
<descrizione del task>
——————————–

Progetta un prompt che includa le seguenti sezioni:

  1. RUOLO DEL MODELLO
    Definisci quale ruolo o competenza il modello deve assumere.
  2. CONTESTO
    Fornisci le informazioni di contesto necessarie per comprendere il problema.
  3. OBIETTIVO
    Descrivi chiaramente il compito che il modello deve svolgere.
  4. ISTRUZIONI OPERATIVE
    Elenca i passaggi o le linee guida che il modello deve seguire.
  5. FORMATO DELL’OUTPUT
    Specifica esattamente come deve essere strutturata la risposta.
  6. VINCOLI
    Indica eventuali limiti, requisiti o criteri di qualità.

Il prompt deve essere:

  • chiaro
  • non ambiguo
  • adatto a modelli linguistici avanzati

Restituisci esclusivamente il prompt finale.

 

Questo meta-prompt è efficace perché combina contemporaneamente diverse tecniche di prompt engineering allineando il prompt con la natura probabilistica del modello.

Perché funziona il Meta-Prompting?

Il Meta-Prompting funziona perché, di fatto, un prompt è semplicemente testo, e gli LLM sono addestrati proprio per generare testo che assomigli ai pattern presenti nei dati di addestramento.

Durante l’addestramento su larga scala, i modelli vedono moltissimi esempi di tutorial, documentazione, manuali, specifiche tecniche, Q&A e linee guida operative. Molti di questi testi hanno implicitamente strutture del tipo:

  • problema -> istruzioni -> procedura
  • task -> guida su come eseguirlo

Quindi quando chiediamo al modello LLM di generare un prompt viene riconosciuto uno schema linguistico familiare. Il modello infatti apprende pattern statistici su come vengono formulate le istruzioni, non possiede una conoscenza esplicita del prompt engineering, ma ha una forte conoscenza implicita delle forme linguistiche che guidano una risposta.

Sebbene un LLM non possiede una vera conoscenza esplicita di se stesso, tuttavia, nei dati di addestramento esistono molti testi che descrivono modelli linguistici, AI, prompt. Di conseguenza il modello sviluppa una conoscenza implicita e distribuita di come gli LLM vengono interrogati, come funzionano le istruzioni e quali prompt producono buoni risultati.

Questa conoscenza è statistica, non simbolica ma è sufficiente per permettere al modello di generare istruzioni che funzionano bene con modelli simili a sé stesso.

Per ulteriori approfondimenti si vedano i seguenti paper:

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.