Menu

Temperatura LLM: cosa fa e come impostarla

La temperatura controlla quanta casualità usa un modello linguistico quando sceglie ogni parola successiva. Scopri come cambia le probabilità di ogni parola, quando tenerla bassa o alta e in cosa si differenzia da top_p.

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

La temperatura è un numero che controlla quanta casualità usa un modello linguistico quando sceglie la parola successiva. A temperatura bassa il modello prende quasi sempre la parola più probabile, quindi le risposte sono mirate e ripetibili. A temperatura alta le probabilità si distribuiscono, quindi le risposte variano di più e a volte divagano. La temperatura cambia il modo in cui il modello sceglie tra parole che già prende in considerazione; non cambia quello che il modello sa.

Come un modello sceglie la parola successiva

Un modello scrive un token alla volta, e un token è una parola o un pezzo di parola (vedi token e finestra di contesto). A ogni passo assegna a ogni token del suo vocabolario un punteggio, chiamato logit. Una funzione chiamata softmax trasforma quei punteggi in probabilità: ogni punteggio viene elevato a esponenziale e poi diviso per la somma di tutti, così i punteggi più alti ricevono quote più grandi e tutte le quote sommate fanno 1. Poi il modello estrae un token a caso secondo quelle quote.

La temperatura entra in gioco subito prima di softmax. Ogni punteggio viene diviso per la temperatura T:

probability(word) = exp(score / T) / sum of exp(score / T) over all candidates

Con T minore di 1, le distanze tra i punteggi crescono, quindi chi è in testa si allontana ancora di più. Con T maggiore di 1, le distanze si riducono, quindi gli sfavoriti recuperano. Con T = 1 ottieni le probabilità proprie del modello. Con T = 0 la divisione non è definita, quindi le API la interpretano come "prendi sempre il token più probabile", e questo si chiama decodifica greedy (greedy decoding).

Provalo: il cursore della temperatura

La demo qui sotto continua la frase "Il mio linguaggio di programmazione preferito è" con sei parole candidate. I punteggi sono illustrativi, scelti per questa demo; un modello reale assegna punteggi a un vocabolario di decine di migliaia di token o più, e il nome di un linguaggio può essere diviso in più token. La matematica invece è quella vera: le barre sono il softmax di questi punteggi alla temperatura che scegli, e il pulsante di campionamento estrae dieci parole da loro.

Il mio linguaggio di programmazione preferito è …
Next word probabilities
Python46%
JavaScript28%
Rust14%
C7.6%
Haskell3.4%
COBOL0.8%
Samples
Press Sample to let the model pick a word ten times.

A 1.0, Python ottiene circa il 46% e COBOL meno dell'1%. Scendi a 0.5 e Python sale a circa il 67% mentre COBOL quasi sparisce. Sali a 2.0 e Python scende a circa il 32% mentre COBOL arriva a circa il 4%, quindi circa un giro su tre da dieci estrazioni lo includerà almeno una volta. Nota cosa non succede mai: l'ordine delle parole resta lo stesso con qualsiasi impostazione. La temperatura non può rendere COBOL più probabile di Python; allarga o restringe solo le distanze.

Una risposta reale è fatta di centinaia di queste scelte in fila, e ogni scelta diventa parte del contesto per quella successiva. Una parola insolita all'inizio cambia tutto ciò che segue, ed è per questo che una risposta ad alta temperatura si allontana molto più di quanto suggerisca una sola parola in questa demo.

Quando usare una temperatura bassa o alta

CompitoPunto di partenzaPerché
Codice, correzione di bug, SQLBassa, da 0 a 0.3Di solito c'è una continuazione migliore, e vuoi lo stesso risultato a ogni esecuzione
Estrazione, classificazione, JSON0Qualsiasi variazione è rumore, e un programma deve leggere l'output
Spiegazioni, domande di tutti i giorniIl valore predefinito del fornitoreI valori predefiniti sono scelti per l'uso generale
Brainstorming, nomi, idee per storiePredefinita o un po' più altaVuoi opzioni diverse tra loro

Due avvertenze. Primo, una temperatura bassa non rende vera una risposta. Se la risposta più probabile del modello è sbagliata, la temperatura 0 ti dà quella risposta sbagliata ogni volta, solo in modo coerente; vedi allucinazioni dell'IA. Secondo, i valori molto alti (ben sopra 1, nelle API la cui scala arriva a 2) spesso producono testo che perde il filo o smette di avere senso, perché i token improbabili vengono scelti sempre più spesso.

A volte la casualità è proprio quello che cerchi. Il self-consistency prompting esegue apposta la stessa domanda di ragionamento più volte con una temperatura diversa da zero, poi tiene la risposta su cui concorda la maggior parte delle esecuzioni.

Temperatura, top_p e top_k

Altre due impostazioni controllano il campionamento, e le API spesso le offrono accanto alla temperatura.

top_p (nucleus sampling) tiene solo i token più probabili le cui probabilità sommate arrivano a p, poi campiona tra quelli. Con i numeri della demo a temperatura 1: Python, JavaScript e Rust sommano circa l'88%, e aggiungendo C si supera il 90%. Quindi con top_p = 0.9 il modello campiona solo tra questi quattro; Haskell e COBOL non possono mai comparire. A differenza della temperatura, top_p si adatta: quando il modello è sicuro, pochi token passano il taglio, e quando è incerto, ne passano molti.

top_k tiene un numero fisso dei token più probabili, per esempio i primi 40. Alcune API lo offrono e altre no.

I fornitori in genere consigliano di cambiare la temperatura oppure top_p, non entrambi, perché gli effetti si sommano in modi difficili da prevedere.

Impostare la temperatura nell'API

Le app di chat nascondono l'impostazione, ma le API la accettano come parametro. L'intervallo dipende dal fornitore: la Chat Completions API di OpenAI accetta da 0 a 2, e la Messages API di Anthropic accetta da 0 a 1. Alcuni modelli di ragionamento accettano solo il loro valore predefinito.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

response = client.chat.completions.create(
    model=MODEL,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
    temperature=0.2,
)
print(response.choices[0].message.content)
import anthropic

client = anthropic.Anthropic()
MODEL = "your-model-id"  # e.g. from your provider's model list

message = client.messages.create(
    model=MODEL,
    max_tokens=500,
    temperature=0.2,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
)
print(message.content[0].text)

Perché le app di chat la nascondono, e cosa fare invece

Le app di ChatGPT, Claude e Gemini scelgono le impostazioni di campionamento al posto tuo e non mostrano alcun cursore. Così le app restano semplici, e per la maggior parte delle richieste riformulare il prompt cambia la risposta molto più di quanto farebbe un'impostazione di campionamento.

Quindi in un'app di chat il tuo controllo è il prompt. Chiedere una risposta ti dà qualcosa di vicino alla prima scelta del modello. Chiedere molte risposte diverse tra loro ti dà varietà a qualsiasi temperatura, perché ora il modello ha un motivo per evitare la sua prima scelta. Passa da una scheda all'altra e cambia il prodotto per vedere la differenza.

Fill in
Suggerisci un nome per un'app per monitorare le abitudini.
Try it
Example replyReplies vary between models and runs.

Filotto. È corto, facile da ricordare e richiama le serie quotidiane che fanno tornare le persone.

Il pulsante per rigenerare di un'app di chat campiona una nuova risposta dallo stesso prompt, ed è un modo rapido per vedere quanto variano le risposte. Se variano più di quanto vorresti, di solito la soluzione è un prompt più specifico: un compito preciso restringe la gamma delle buone risposte, e questo rende le esecuzioni più simili. La guida alla scrittura dei prompt spiega cosa aggiungere.

Domande frequenti

Cos'è la temperatura in un LLM?

La temperatura è un'impostazione di campionamento che controlla quanto è casuale la scelta di ogni token successivo. Il modello assegna un punteggio a ogni possibile token successivo, e i punteggi vengono divisi per la temperatura prima di essere trasformati in probabilità. I valori bassi lasciano dominare la prima scelta; quelli alti appiattiscono le probabilità, così i token meno probabili vengono scelti più spesso.

Che temperatura dovrei usare per programmare?

Un valore basso, tra 0 e 0.3, è un punto di partenza comune per codice, estrazione di dati e qualsiasi compito con una sola risposta giusta, perché vuoi la continuazione più probabile e risultati ripetibili. Alzala quando vuoi varietà, per esempio per trovare idee di nomi o progetti alternativi. Alcuni modelli di ragionamento accettano solo il loro valore predefinito, quindi controlla la documentazione del tuo fornitore.

Che differenza c'è tra temperatura e top_p?

La temperatura cambia la forma dell'intera distribuzione di probabilità. top_p, detto anche nucleus sampling, la taglia: il modello campiona solo dal gruppo più piccolo di token le cui probabilità sommate arrivano a p, quindi top_p = 0.9 elimina la lunga coda dei token improbabili. I fornitori in genere consigliano di regolare uno dei due e lasciare l'altro al valore predefinito.

Con temperatura 0 l'output diventa deterministico?

Quasi, ma non del tutto. A 0 il modello prende il token più probabile a ogni passo, quindi le esecuzioni ripetute di solito sono identiche o molto simili. Piccole differenze numeriche sui server del fornitore possono comunque cambiare un token ogni tanto, e appena un token è diverso, il resto della risposta può prendere un'altra strada.

Posso cambiare la temperatura in ChatGPT o Claude?

Non nelle app di chat: scelgono loro le impostazioni di campionamento e non mostrano alcun controllo della temperatura. Puoi impostarla tramite le API e negli strumenti per sviluppatori come il Playground di OpenAI, la Anthropic Console e Google AI Studio. In un'app di chat, chiedi varietà o coerenza direttamente nel prompt.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA