Menu

Chain of thought: ragioniamo passo dopo passo

Il chain of thought prompting (catena di pensiero) chiede a un modello di scrivere il suo ragionamento prima di dare la risposta. Aiuta soprattutto nei problemi di matematica e logica a più passaggi, e conta meno con i modelli di ragionamento, che pensano già prima di rispondere.

Ogni prompt qui sotto è modificabile: cambialo, poi aprilo in ChatGPT, Claude o un'altra app di AI.

Il chain of thought prompting (catena di pensiero) chiede a un modello linguistico di scrivere i passaggi intermedi di un problema prima di dare la risposta finale. Nei problemi a più passaggi, come i problemi di testo, i rompicapi logici e gli orari, lavorare allo scoperto tende a dare più risposte corrette che rispondere subito, e ti lascia passaggi da controllare. La versione più breve è una sola frase aggiunta al prompt: "Ragioniamo passo dopo passo".

Perché scrivere i passaggi aiuta

Un modello produce la risposta un token alla volta, e tutto ciò che ha già scritto diventa input per il token successivo. Se un prompt pretende la risposta subito, il modello deve produrla prima che sulla pagina esista qualsiasi risultato intermedio. Se prima scrive "Le vendite di caffè del lunedì ammontano a $168", quel numero ora è nel contesto, e il passaggio successivo può basarsi su di esso invece di tenerlo implicito.

Questa è l'intuizione. Le prove sono arrivate da due articoli del 2022. Wei et al., "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models", hanno mostrato che esempi svolti con il ragionamento scritto miglioravano i modelli grandi in compiti di aritmetica, buon senso e ragionamento simbolico. Hanno anche scoperto che il beneficio dipendeva dalla dimensione: i modelli più piccoli non ne traevano vantaggio, e spesso scrivevano un ragionamento scorrevole che portava a risposte sbagliate. Poi Kojima et al., "Large Language Models are Zero-Shot Reasoners", hanno mostrato che anche una sola frase senza esempi, "Let's think step by step" (ragioniamo passo dopo passo), migliorava molto i risultati, anche se in genere meno degli esempi svolti.

Risposta diretta o chain of thought

Le due schede fanno la stessa domanda. La prima chiede solo l'importo; la seconda chiede lo svolgimento e mette la risposta su un'ultima riga fissa.

Un bar vende il caffè a $3.50 e i muffin a $2.25. Lunedì ha venduto 48 caffè e un certo numero di muffin, incassando $213 in totale. Martedì ha venduto 10 caffè in meno di lunedì e il doppio dei muffin. Quanto ha incassato martedì? Rispondi solo con l'importo.
Try it
Example replyReplies vary between models and runs.

$258

La risposta diretta mostra un errore tipico: 258sonoi258 sono i 168 di caffè di lunedì più i $90 di muffin di martedì, quindi ha dimenticato che martedì si sono venduti 10 caffè in meno. La risposta passo dopo passo dà al numero di caffè di martedì una riga tutta sua, così quel passaggio non può essere saltato in silenzio. Un modello attuale potrebbe azzeccare anche la versione diretta; il divario cresce quando i problemi sono più lunghi e i passaggi dipendono di più l'uno dall'altro.

I passaggi scritti hanno un secondo vantaggio: quando una risposta è sbagliata, vedi quale passaggio si è rotto e puoi correggere il prompt o l'input in quel punto.

Chain of thought few-shot

La tecnica originale di Wei et al. mette nel prompt esempi svolti le cui risposte mostrano il ragionamento, e il modello risponde alla nuova domanda allo stesso modo. L'esempio qui sotto è adattato dalla prima figura del loro articolo; la domanda che segue è nuova. Cambia la domanda per provare la tua.

Chain of thought few-shot
Fill in
Parts
D: Roger ha 5 palline da tennis. Compra altre 2 confezioni di palline da tennis. Ogni confezione contiene 3 palline. Quante palline da tennis ha adesso? R: Roger aveva all'inizio 5 palline. 2 confezioni da 3 palline ciascuna fanno 6 palline. 5 + 6 = 11. La risposta è 11.
D: Una biblioteca aveva 120 libri sugli scaffali. Ne ha prestati 45, ne ha riavuti indietro 18 e ha ricevuto una donazione di 30. Quanti libri ci sono ora sui suoi scaffali? R:
Try it
Example replyReplies vary between models and runs.

La biblioteca aveva all'inizio 120 libri. Prestandone 45 ne sono rimasti 75 sugli scaffali. Riavendone indietro 18 si è arrivati a 93. La donazione di 30 ha portato il totale a 123. La risposta è 123.

Il CoT few-shot ti dà il controllo sulla forma del ragionamento: quanto è lungo, cosa esplicita e come viene enunciata la risposta. "La risposta è 11" nell'esempio è una chiusura fissa, e la risposta l'ha copiata. Il CoT zero-shot è più rapido da scrivere, ma lascia queste scelte al modello. Per saperne di più su come costruire serie di esempi, vedi few-shot prompting; per la versione con sole istruzioni, vedi zero-shot prompting.

Metti la risposta su una riga a parte

Appena la risposta contiene un ragionamento, il risultato finisce da qualche parte dentro un paragrafo, e questo è un problema quando un programma deve leggerlo. Chiedi la risposta in una forma fissa sull'ultima riga, come fa il prompt del bar con "Answer: $X" (un'etichetta fissa da lasciare così com'è, perché è quella che cerca il codice), e leggi quella riga nel codice:

import re

matches = re.findall(r"^Answer:\s*(.+)$", reply, re.MULTILINE)
answer = matches[-1] if matches else None

Prendere l'ultima corrispondenza è importante, perché il ragionamento stesso può contenere una riga che inizia con "Answer:" prima che il modello si corregga. Se gli utenti devono vedere solo la risposta, chiedi il ragionamento dentro una coppia di tag e la risposta dentro un'altra, poi mostra solo la seconda. Output strutturato spiega come chiedere un JSON quando ti serve più di un campo.

Modelli di ragionamento

Alcuni modelli attuali sono fatti per pensare prima di rispondere: generano un ragionamento interno, spesso nascosto o riassunto, prima della risposta visibile. Per loro "Ragioniamo passo dopo passo" conta molto meno, perché i passaggi avvengono comunque, che tu lo chieda o no. Aggiungerlo di solito allunga soltanto la risposta visibile.

Con un modello di ragionamento continua ad aiutare tutto ciò che sta intorno al ragionamento: una descrizione completa del problema, i vincoli che una risposta corretta deve rispettare e il formato della risposta finale. Descrivi com'è una buona risposta invece di sceneggiare ogni passaggio; una ricetta fissa di passaggi può allontanare il modello da una strada migliore che avrebbe trovato da solo.

Quando non usare il chain of thought

Il chain of thought costa token e tempo, e ripaga solo quando un compito ha passaggi che dipendono l'uno dall'altro. Per una ricerca semplice, una traduzione, una riscrittura o una classificazione semplice, allunga solo la risposta. Un modello può anche scrivere un ragionamento che sembra solido e arrivare comunque a una risposta sbagliata, quindi controlla il risultato finale a parte, non solo i passaggi che ci hanno portato.

Per i problemi difficili in cui una sola catena può sbagliare, ci sono due estensioni che si basano su di essa. Il self-consistency prompting genera diverse catene e tiene la risposta a cui arriva la maggioranza, e il tree of thought prompting esplora e confronta diverse linee parziali di ragionamento prima di impegnarsi su una.

Domande frequenti

Cos'è il chain of thought prompting?

Il chain of thought (CoT), o catena di pensiero, chiede a un modello linguistico di scrivere i passaggi intermedi di un problema prima della risposta finale, mostrando esempi svolti che includono il ragionamento oppure aggiungendo un'istruzione come "Ragioniamo passo dopo passo". Nei problemi a più passaggi questo tende a dare più risposte corrette, e ti permette di controllare ogni passaggio.

"Ragioniamo passo dopo passo" funziona ancora?

Con i normali modelli di chat aiuta ancora nei problemi che richiedono diversi passaggi, soprattutto quando il prompt spingerebbe altrimenti verso una risposta immediata. I modelli di ragionamento, che pensano prima di rispondere, lo fanno già internamente, quindi per loro la frase aggiunge poco oltre a una risposta più lunga. Con questi modelli, descrivi invece con chiarezza il problema e il formato della risposta.

Quando aiuta il chain of thought e quando no?

Aiuta nei compiti che richiedono diversi passaggi dipendenti tra loro: problemi di testo, aritmetica, rompicapi logici, pianificazione con vincoli e capire cosa fa un codice. Aggiunge poco a ricerche semplici, traduzioni, riscritture o classificazioni semplici, dove rende solo la risposta più lunga e lenta.

Che differenza c'è tra chain of thought zero-shot e few-shot?

Il CoT few-shot, introdotto da Wei et al. nel 2022, mette nel prompt esempi svolti con il loro ragionamento, e il modello imita quello stile di ragionamento. Il CoT zero-shot, di Kojima et al. 2022, non usa esempi e aggiunge solo un'istruzione come "Ragioniamo passo dopo passo". Lo zero-shot è più rapido da scrivere; il few-shot dà più controllo su come appaiono i passaggi.

Il ragionamento scritto è davvero il modo in cui il modello è arrivato alla risposta?

Non necessariamente. I passaggi sono testo generato dal modello, e possono sembrare solidi anche quando la risposta finale è sbagliata, oppure contenere un errore anche quando la risposta risulta giusta. Tratta il ragionamento come qualcosa da controllare, non come una prova, e verifica la risposta finale a parte.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA