# Prompt Chain-of-Thought

import { Callout } from 'nextra/components'
import {Screenshot} from 'components/screenshot'
import COT from '../../img/cot.png'
import ZEROCOT from '../../img/zero-cot.png'
import AUTOCOT from '../../img/auto-cot.png'

## Prompt Chain-of-Thought (CoT)

<Screenshot src={COT} alt="CoT" />

Fonte immagine: [Wei et al. (2022)](https://arxiv.org/abs/2201.11903)

Introdotto in [Wei et al. (2022)](https://arxiv.org/abs/2201.11903), il prompt a catena di pensieri (CoT) consente di ottenere capacità di ragionamento complesse attraverso fasi di ragionamento intermedie. Si può combinare con il prompt few-shot per ottenere risultati migliori su compiti più complessi che richiedono un ragionamento prima di rispondere.

*Prompt:*
```
La somma dei numeri dispari di questo gruppo corrisponde ad un numero pari: 4, 8, 9, 15, 12, 2, 1.
R: Sommando tutti i numeri dispari (9, 15, 1) si ottiene 25. La risposta è Falsa.

La somma dei numeri dispari di questo gruppo è un numero pari: 17, 10, 19, 4, 8, 12, 24.
R: La somma di tutti i numeri dispari (17, 19) risulta 36. La risposta è Corretta.

La somma dei numeri dispari di questo gruppo è un numero pari: 16,  11, 14, 4, 8, 13, 24.
R: La somma di tutti i numeri dispari (11, 13) risulta 24. La risposta è Corretta.

La somma dei numeri dispari di questo gruppo è un numero pari:: 17,  9, 10, 12, 13, 4, 2.
R: La somma di tutti i numeri dispari (17, 9, 13) risulta 39. La risposta è Falsa.

I numeri dispari di questo gruppo si sommano in un numero pari.: 15, 32, 5, 13, 82, 7, 1. 
R:
```

*Output:*
```
La somma di numeri dispari (15, 5, 13, 7, 1) risulta 41. La risposta è Falsa.
```

Wow! Possiamo vedere un risultato perfetto quando abbiamo fornito la fase di ragionamento. In effetti, possiamo risolvere questo compito fornendo ancora meno esempi, cioè un solo esempio sembra sufficiente:

*Prompt:*
```
La somma dei numeri dispari in questo gruppo è un numero pari: 4, 8, 9, 15, 12, 2, 1.
R: Sommando tutti i numeri dispari (9, 15, 1) si ottiene 25. La risposta è Falsa.

La somma dei numeri dispari in questo gruppo è un numero pari: 15, 32, 5, 13, 82, 7, 1. 
R:
```

*Output:*
```
La somma dei numeri dispari (15, 5, 13, 7, 1) è 41. La risposta è Falsa.
```

Si tenga presente che gli autori sostengono che si tratta di una capacità emergente che si manifesta con modelli linguistici sufficientemente grandi.

## Prompt Zero-shot CoT

<Screenshot src={ZEROCOT} alt="Zero-shot CoT" />

Fonte immagine: [Kojima et al. (2022)](https://arxiv.org/abs/2205.11916)

Un'idea emersa più di recente è quella della [zero-shot CoT](https://arxiv.org/abs/2205.11916) (Kojima et al. 2022) che consiste essenzialmente nell'aggiungere la frase "Pensiamo passo dopo passo" al prompt originale. Proviamo un problema semplice e vediamo come si comporta il modello:

*Prompt:*
```
Sono andato al mercato e ho comprato 10 mele. Ho dato 2 mele al vicino e 2 al riparatore. Poi sono andato a comprare altre 5 mele e ne ho mangiata una. Quante mele mi sono rimaste?
```

*Output:*
```
11 mele
```

La risposta è errata! Proviamo ora con il prompt speciale. 

*Prompt:*
```
Sono andato al mercato e ho comprato 10 mele. Ho dato 2 mele al vicino e 2 all'operaio. Poi sono andato a comprare altre 5 mele e ne ho mangiata una. Quante mele mi sono rimaste?

Pensiamo passo dopo passo.
```

*Output:*
```
Innanzitutto, si è partiti da 10 mele.
Hai dato via 2 mele al vicino e 2 all'operaio, quindi ti sono rimaste 6 mele.
Poi hai comprato altre 5 mele, per cui ora ne hai 11.
Infine, hai mangiato 1 mela, quindi ti sono rimaste 10 mele.
```

È impressionante come questo semplice prompt sia efficace nello svolgere questo compito. Dimostra di essere particolarmente utile quando non si hanno molti esempi da utilizzare nel prompt.

## Chain-of-Thought automatico (Auto-CoT)

Quando si applica il prompt a catena di pensieri tramite spiegazioni, il processo comporta la creazione manuale di esempi efficaci e diversi. Questo sforzo manuale potrebbe portare a soluzioni non ottimali. [Zhang et al. (2022)](https://arxiv.org/abs/2210.03493) propongono un approccio per eliminare gli sforzi manuali sfruttando gli LLM con il prompt "Pensiamo passo dopo passo" per generare catene di ragionamento per le dimostrazioni una per una. Questo processo automatico può comunque portare a errori nelle catene generate. Per mitigare gli effetti degli errori, è importante la diversità delle spiegazioni. Questo lavoro propone Auto-CoT, che campiona domande diverse e genera catene di ragionamento per costruire le spiegazioni. 

L'Auto-CoT si compone di due fasi principali:

- Fase 1): **suddivisione (clustering) delle domande**: suddividere le domande di un dato insieme di dati in gruppi (cluster)
- Fase 2): **campionamento**: selezionare una domanda rappresentativa da ogni cluster e generare la relativa catena di ragionamento utilizzando Zero-Shot-CoT con semplici euristiche

Semplici euristiche potrebbero essere la lunghezza delle domande (ad esempio, 60 token) e il numero di fasi del ragionamento (ad esempio, 5 fasi del ragionamento). Questo incoraggia il modello a utilizzare dimostrazioni semplici e accurate. 

Il processo è illustrato qui di seguito:

<Screenshot src={AUTOCOT} alt="AUTOCOT" />

Fonte immagine: [Zhang et al. (2022)](https://arxiv.org/abs/2210.03493)

Il codice di Auto-CoT è disponibile [qui].(https://github.com/amazon-science/auto-cot).
