Inviane uno solo. Anthropic documenta la regola per Claude Haiku 4.5; gli sviluppatori ricevono lo stesso errore 400 su Claude Opus 4.6 e Sonnet 4.6, mentre su Claude Opus 4.7 e versioni successive la regola diventa non inviarne nessuno. Spesso il responsabile è un client o un framework che inserisce il parametro che non hai mai impostato.
L’errore
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "`temperature` and `top_p` cannot both be specified for this model. Please use only one."
},
"request_id": "req_..."
}Cause e soluzioni in breve
| Causa | Soluzione |
|---|---|
| Il tuo codice, o un framework sottostante, li invia entrambi | Invia solo quello che intendi usare ed elimina l'altra chiave. |
| Il secondo è un valore predefinito “neutro”, ad esempio top_p: 1 | È stato segnalato lo stesso errore. Rimuovi la chiave invece di normalizzarla. |
| Una versione precedente di LangChain JS o n8n | Esegui l'aggiornamento: @langchain/anthropic 1.3.24 o successiva, n8n 1.114.1 o successiva. |
| LiteLLM li inoltra entrambi | Aggiungi additional_drop_params: ["top_p"] a quel modello. |
| Sei passato a Claude Opus 4.7 o successivo, Sonnet 5 o Fable 5 | Regola più severa: rimuovili entrambi; qualsiasi valore non predefinito dell'uno o dell'altro viene rifiutato. |
Quali modelli Claude applicano la regola (a settembre 2026)
La guida alla migrazione di Anthropic per Haiku 4.5: usa solo temperature oppure top_p, non entrambi; impostarli entrambi restituisce un 400 su Claude Haiku 4.5, una modifica incompatibile per il codice proveniente da Claude 3.x (https://platform.claude.com/docs/en/models/haiku-4-5/migration-guide). Le note di rilascio dell'API Anthropic hanno segnalato la stessa regola al lancio di Claude Opus 4.1 il 5 agosto 2025, un modello ora ritirato (https://platform.claude.com/docs/en/release-notes/api). AWS la specifica per Claude Sonnet 4.5 e Claude Haiku 4.5 su Bedrock (https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.html). Non abbiamo trovato una pagina Anthropic che dichiari la regola per i modelli 4.6, ma gli sviluppatori segnalano questo identico errore 400 con Claude Opus 4.6 (issue #12846 di OpenHands) e Claude Sonnet 4.6 (issue #566 di opencommit). Claude Opus 4.7 e versioni successive sono trattati di seguito: lì, anche uno solo è già di troppo.
Inviane uno solo ed elimina l'altra chiave
Mantieni temperature, a meno che tu non abbia un motivo per non farlo: il riferimento dell'API Anthropic descrive top_p come consigliato solo per casi d'uso avanzati (https://platform.claude.com/docs/en/api/messages). Rimuovi la seconda chiave invece di impostarla su un valore che ritieni neutro: uno sviluppatore ha riferito che top_p pari a 1.0 insieme a temperature pari a 0.3 continuava a fallire su Claude Sonnet 4.5 (issue #18304 di n8n).
from openai import OpenAI
client = OpenAI(base_url="https://api.kunavo.com/v1", api_key="sk-kn-...")
def one_sampling_knob(params: dict) -> dict:
"""Where the rule applies, send temperature or top_p, not both. Keep temperature."""
if params.get("temperature") is not None:
params.pop("top_p", None)
return params
sampling = one_sampling_knob({"temperature": 0.3, "top_p": 0.9}) # {"temperature": 0.3}
resp = client.chat.completions.create(
model="claude-haiku-4-5",
max_tokens=512,
messages=[{"role": "user", "content": "Classify this support ticket: ..."}],
**sampling,
)
print(resp.choices[0].message.content)Correggi il problema nel client che aggiunge il secondo parametro
LangChain JS: ChatAnthropic 0.3.x inviava una temperature predefinita insieme al top_p impostato dall'utente (issue #9258, corretto nella linea 0.3 dalla PR #9362 nel novembre 2025); la PR #10420, rilasciata in @langchain/anthropic 1.3.24 il 17 marzo 2026, impedisce di aggiungere qualsiasi chiave di sampling lasciata non impostata (https://github.com/langchain-ai/langchainjs/pull/10420). n8n: il nodo Anthropic Chat Model passava i valori predefiniti di LangChain (topP -1, temperature 0.7); corretto in n8n 1.114.1, rilasciato il 2 ottobre 2025 (https://github.com/n8n-io/n8n/pull/20286). LiteLLM: indica il parametro da rimuovere con additional_drop_params, per chiamata o per modello (https://docs.litellm.ai/docs/completion/drop_params), tranne nel suo percorso di pass-through Anthropic, dove il report è stato chiuso perché le richieste pass-through non vengono modificate (https://github.com/BerriAI/litellm/issues/15097). Amazon Bedrock: imposta temperature o topP in Converse inferenceConfig, oppure temperature o top_p nel body di InvokeModel, mai entrambi (https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InferenceConfiguration.html).
model_list:
- model_name: claude-haiku-4-5
litellm_params:
model: openai/claude-haiku-4-5 # Kunavo speaks the OpenAI chat shape
api_base: https://api.kunavo.com/v1
api_key: sk-kn-...
additional_drop_params: ["top_p"] # keep temperature, never send top_pSu Claude Opus 4.7 e versioni successive, non inviare nessuno dei due
I modelli più recenti vanno oltre. Impostare temperature, top_p o top_k su un valore non predefinito nei modelli Claude Opus 4.7 e successivi restituisce un 400 (https://platform.claude.com/docs/en/models/opus-5-5/migration-guide); lo stesso vale per Claude Sonnet 5 (https://platform.claude.com/docs/en/models/sonnet-5/migration-guide) e si estende a Claude Fable 5 (https://platform.claude.com/docs/en/models/fable-5/migration-guide) e Fable 5.1 (https://platform.claude.com/docs/en/models/fable-5-1/migration-guide). Il messaggio cambia: gli sviluppatori vedono “`temperature` è deprecato per questo modello.”; il riferimento dell'API Anthropic ora contrassegna tutti e tre i parametri come deprecati: sui modelli rilasciati dopo Claude Opus 4.6 accetta, per compatibilità retroattiva, solo temperature pari a 1.0 o top_p pari almeno a 0.99 e rifiuta top_k a qualsiasi valore (https://platform.claude.com/docs/en/api/messages). L'SDK Python Anthropic li ha rimossi dai metodi Messages nella v1.0, rilasciata il 20 agosto 2026 (https://platform.claude.com/docs/en/release-notes/api).
Se chiami tramite Kunavo
Nei sette modelli claude-* per i quali Anthropic ha rimosso il sampling — claude-fable-5-1, claude-fable-5, claude-opus-5-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7 e claude-sonnet-5 — Kunavo elimina temperature, top_p e top_k dalla richiesta prima che lasci il gateway, sia su /v1/chat/completions sia su /v1/messages. Non vedrai questo errore con quei sette modelli, ma i valori inviati non hanno alcun effetto: la richiesta viene inoltrata come se li avessi omessi. Su claude-opus-4-6, claude-sonnet-4-6 e claude-haiku-4-5 Kunavo non rimuove nulla: il traduttore chat copia nella richiesta Claude qualsiasi valore numerico di temperature, top_p o top_k senza modificarlo, mentre /v1/messages inoltra il body così come è stato inviato; quindi, per questi modelli, invia uno solo dei due. Se il provider rifiuta la coppia, il suo 400 ti viene restituito con il testo del messaggio invariato, non viene ritentato su un altro canale ed è registrato con costo zero. Un altro parametro della richiesta rifiutato dai modelli più recenti è trattato in la guida max_tokens vs max_completion_tokens.
Domande frequenti
Devo usare temperature o top_p con Claude?
Temperature, salvo un motivo specifico. Il riferimento dell'API Anthropic consiglia top_p solo per casi d'uso avanzati e, su Claude Opus 4.7 e versioni successive, nessuno dei due può essere impostato su un valore non predefinito.
top_p = 1 conta come se non lo avessi impostato?
Non farci affidamento. Uno sviluppatore ha segnalato lo stesso errore 400 con top_p a 1.0 insieme a temperature su Claude Sonnet 4.5 (issue #18304 di n8n). Elimina la chiave invece di impostarla su un valore apparentemente neutro.
Perché n8n o LangChain inviano top_p se non l'ho mai impostato?
Entrambi passavano i valori predefiniti. Il nodo Anthropic Chat Model di n8n inviava i valori predefiniti di LangChain (topP -1, temperature 0.7) fino alla versione 1.114.1, mentre ChatAnthropic in LangChain JS 0.3.x inviava una temperature predefinita insieme al top_p impostato dall'utente. Esegui l'aggiornamento: n8n 1.114.1 o successivo, @langchain/anthropic 1.3.24 o successivo.
Cosa significa “`temperature` è deprecato per questo modello”?
È la regola più severa per Claude Opus 4.7 e versioni successive, Sonnet 5 e Fable 5 e 5.1: questi modelli rifiutano direttamente i valori di sampling non predefiniti. Rimuovi i parametri. Tramite Kunavo, quelli che offriamo li eliminano, quindi la chiamata va a buon fine.
Una richiesta rifiutata costa qualcosa su Kunavo?
No. Una richiesta rifiutata dal provider viene registrata con costo zero.
Guide correlate
- “This model does not support assistant message prefill” — quali modelli Claude hanno rimosso il prefill e cosa lo sostituisce
- “Unsupported parameter: 'max_tokens' is not supported with this model” — usa max_completion_tokens
- Costo dell'API AI di n8n: un'esecuzione, molte chiamate ai modelli, due fatture
- API Claude — guida completa per chiamare Claude su Kunavo
Ulteriori dettagli sul significato degli errori sono disponibili in riferimento agli errori; ottenere una chiave richiede un minuto tramite registrazione e la guida all’autenticazione.