Errore 400 dell'API Claude su temperature, top_p, top_k: come risolverlo
La tua richiesta a Claude ha iniziato a restituire 400 sulla versione API 2026-10-21? Rimuovi temperature, top_p e top_k, oppure fissa la vecchia versione. I passaggi all'interno.

In questa pagina
La tua richiesta a Claude funzionava ieri, l'hai spostata alla versione API 2026-10-21 (l'header anthropic-, o una release dell'SDK creata per essa), e ora torna con un 400. Guarda il body della richiesta: se contiene temperature, top_p o top_k, è quella la causa. Elimina quei tre campi e la richiesta passa.
Secondo la guida alla migrazione di Anthropic per la versione 2026-10-21 (https://platform.claude.com/docs/en/api/migration-2026-10-21, verificata il 24 ottobre 2026), una richiesta Messages o Message Batches che invia uno dei tre restituisce un errore 400. Succede anche se il valore è quello predefinito del parametro. Cerca lo stato 400 e quei nomi di campo nella tua richiesta.
Come appare la richiesta che fallisce#
Supponiamo che tu abbia un piccolo script che chiede a Claude di riassumere un ticket e mantiene la risposta stabile con una temperature bassa:
import anthropic
client = anthropic.Anthropic()
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
temperature=0.2, # <- this line now causes the 400
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)Stessa storia su HTTP puro. Se imposti tu stesso l'header di versione, questa è la riga che ti porta al nuovo comportamento:
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2026-10-21" \
-H "content-type: application/json" \
-d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
"messages": [{"role": "user", "content": "Hello"}]}'La soluzione: rimuovere i tre parametri#
Elimina temperature, top_p e top_k da ogni richiesta Messages e Message Batches. Senza di essi il modello campiona con i suoi valori predefiniti (temperature 1.0), esattamente come faceva una richiesta 2023-06-01 che li ometteva.
reply = client.messages.create(
model="<your Claude model>",
max_tokens=500,
messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
Le ultime versioni major dell'SDK e la CLI ant (2.0.0) non hanno più questi parametri, quindi dopo l'aggiornamento devi rimuoverli dal tuo codice. Un 400 arriva da richieste che partono con anthropic- e portano ancora uno dei tre campi. Gli adapter .NET IChatClient seguono una strada più morbida: ora ignorano ChatOptions., TopK e TopP. I numeri esatti di versione dell'SDK per linguaggio sono nelle tab Upgrade steps della guida.
Se chiami l'API senza SDK, la versione è l'header anthropic-, e 2026-10-21 è il valore che attiva la nuova regola.
Le risposte cambieranno dopo averli rimossi?#
Dipende dal modello, e la guida qui è specifica.
- Claude 4.7 e successivi accettano già solo valori di campionamento predefiniti. Per te non cambia nulla: campionavano con i valori predefiniti prima e continuano a farlo.
- Modelli che accettano altri valori, come Claude Sonnet 4.6: se avevi abbassato
temperatureper ottenere un output più coerente, quell'effetto scompare, e nessun'altra impostazione lo sostituisce.
Se una richiesta particolare si basa davvero su un valore non predefinito, hai due opzioni dalla guida: smettere di inviare il parametro e accettare il campionamento predefinito, oppure mantenere quella singola richiesta su anthropic-.
Se le tue risposte devono essere strettamente coerenti, metti la coerenza nel prompt: un formato di output fisso, un breve esempio della risposta che vuoi, e un controllo nel tuo codice che rifiuta tutto ciò che non è conforme al formato. È più lavoro di un singolo numero, ma non dipende da una manopola di campionamento.
Checklist rapida quando vedi il 400#
- Cerca nel progetto
temperature,top_p,top_k, inclusi wrapper e file di configurazione condivisi. - Controlla i batch job: la regola si applica a ogni richiesta dentro un Message Batch creato con 2026-10-21, quindi guarda i params di ogni richiesta nel batch.
- Controlla cosa è cambiato: versione major dell'SDK, versione della CLI, o l'header
anthropic-.version - Rimuovi i campi, oppure fissa quella richiesta a
2023-06-01se ha bisogno di un valore non predefinito. - Esegui una richiesta prima di rilanciare un batch grande.
Un unico percorso di codice per Claude e le API in stile OpenAI#
Una configurazione comune: un singolo helper che costruisce la richiesta e la invia o ad Anthropic Messages o a un endpoint Chat Completions in stile OpenAI. La soluzione più semplice è separare i parametri. Mantieni temperature solo nel ramo in stile OpenAI, e non aggiungerlo al ramo Messages.
Nel formato Chat Completions l'impostazione è un normale campo della richiesta. Su CheapTokens funziona tramite l'indirizzo compatibile con OpenAI https:/. Ecco una richiesta a DeepSeek-V4-Flash (contesto 380K, fino a 32.768 token di output per risposta), con l'id completo del modello dalla documentazione di CheapTokens:
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V4-Flash-0731",
"temperature": 0.2,
"max_tokens": 300,
"messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
}'Una richiesta così, con 1.000 token di input e 300 token di output, costa $0.000045 al prezzo attuale. DeepSeek-V4-Flash ha un unico prezzo a qualsiasi ora del giorno, senza ore di punta, e un solo saldo copre tutti i modelli. Per lo stesso percorso di codice con una finestra di contesto da 390K c'è anche GLM-5.3-Flash (zai-, fino a 8.192 token di output). I prezzi attuali per tutti i modelli sono sulla pagina dei prezzi.
Per vedere come si comporta l'impostazione, leggi System prompt e temperature: cosa fanno e come impostarli. Per chiamare Messages in formato Claude da Python, vedi Anthropic Python SDK con CheapTokens. L'indirizzo base e la configurazione della chiave sono nella documentazione di CheapTokens.



