Torna al blog

Risoluzione dei problemiGuida

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.

Di CheapTokens TeamPubblicato il 4 min di lettura

Card in stile terminale: errore 400 per temperature, top_p e top_k nell'API Claude
In questa pagina
  1. Come appare la richiesta che fallisce
  2. La soluzione: rimuovere i tre parametri
  3. Le risposte cambieranno dopo averli rimossi?
  4. Checklist rapida quando vedi il 400
  5. Un unico percorso di codice per Claude e le API in stile OpenAI

La tua richiesta a Claude funzionava ieri, l'hai spostata alla versione API 2026-10-21 (l'header anthropic-version, 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:

python
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:

bash
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.

python
reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
Prima e dopo: la richiesta con temperature restituisce 400, la stessa richiesta senza di essa passa
La stessa richiesta prima e dopo la rimozione di temperature

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-version: 2026-10-21 e portano ancora uno dei tre campi. Gli adapter .NET IChatClient seguono una strada più morbida: ora ignorano ChatOptions.Temperature, 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-version, 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 temperature per 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-version: 2023-06-01.

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#

  1. Cerca nel progetto temperature, top_p, top_k, inclusi wrapper e file di configurazione condivisi.
  2. 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.
  3. Controlla cosa è cambiato: versione major dell'SDK, versione della CLI, o l'header anthropic-version.
  4. Rimuovi i campi, oppure fissa quella richiesta a 2023-06-01 se ha bisogno di un valore non predefinito.
  5. 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://api.cheaptokens.dev/v1. 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:

bash
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-org/GLM-5.3-Flash, 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.