Envie apenas um dos dois. A Anthropic documenta a regra para o Claude Haiku 4.5, desenvolvedores encontram o mesmo erro 400 no Claude Opus 4.6 e Sonnet 4.6, e no Claude Opus 4.7 e posteriores a regra fica mais rígida: nenhum dos dois. Muitas vezes, o culpado é um cliente ou framework que preenche o parâmetro que você nunca definiu.
O erro
{
"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_..."
}Causas e soluções em resumo
| Causa | Solução |
|---|---|
| Seu código, ou um framework usado por ele, envia ambos | Envie somente aquele que você pretende usar e exclua a outra chave. |
| O segundo é um valor padrão “neutro”, como top_p: 1 | Relatado como falhando da mesma forma. Remova a chave em vez de normalizá-la. |
| Uma versão antiga do LangChain JS ou do n8n | Atualize: @langchain/anthropic 1.3.24 ou posterior, n8n 1.114.1 ou posterior. |
| O LiteLLM encaminha ambos | Adicione additional_drop_params: ["top_p"] a esse modelo. |
| Você migrou para Claude Opus 4.7 ou posterior, Sonnet 5 ou Fable 5 | Regra mais rígida: remova ambos — qualquer valor não padrão de qualquer um deles é rejeitado. |
Quais modelos Claude aplicam essa regra (em setembro de 2026)
O guia de migração do Haiku 4.5 da Anthropic: use apenas temperature ou top_p, não ambos — definir os dois retorna um 400 no Claude Haiku 4.5, uma mudança incompatível para código vindo do Claude 3.x (https://platform.claude.com/docs/en/models/haiku-4-5/migration-guide). As notas de versão da API da Anthropic sinalizaram a mesma regra no lançamento do Claude Opus 4.1 em 5 de agosto de 2025, um modelo desde então aposentado (https://platform.claude.com/docs/en/release-notes/api). A AWS informa a regra para Claude Sonnet 4.5 e Claude Haiku 4.5 no Bedrock (https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.html). Não encontramos uma página da Anthropic que declare a regra para os modelos 4.6, mas desenvolvedores relatam esse mesmo 400 no Claude Opus 4.6 (issue #12846 do OpenHands) e no Claude Sonnet 4.6 (issue #566 do opencommit). O Claude Opus 4.7 e posteriores são tratados abaixo: nesse caso, um já é demais.
Envie um — e exclua a outra chave
Mantenha temperature, a menos que tenha um motivo para não fazê-lo: a referência da API da Anthropic descreve top_p como recomendado apenas para casos de uso avançados (https://platform.claude.com/docs/en/api/messages). Remova a segunda chave em vez de defini-la como um valor que você considera neutro — um desenvolvedor relatou que top_p de 1.0 junto com temperature de 0.3 ainda falhou no Claude Sonnet 4.5 (issue #18304 do 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)Corrija isso no cliente que adiciona o segundo parâmetro
LangChain JS: ChatAnthropic 0.3.x enviava uma temperature padrão junto com o top_p definido por você (issue #9258, corrigida na linha 0.3 pela PR #9362 em novembro de 2025), e a PR #10420, lançada em @langchain/anthropic 1.3.24 em 17 de março de 2026, impede que sejam adicionadas chaves de amostragem que você deixou sem definir (https://github.com/langchain-ai/langchainjs/pull/10420). n8n: o nó Anthropic Chat Model passava os padrões do LangChain (topP -1, temperature 0.7); corrigido no n8n 1.114.1, lançado em 2 de outubro de 2025 (https://github.com/n8n-io/n8n/pull/20286). LiteLLM: indique o parâmetro a remover com additional_drop_params, por chamada ou por modelo (https://docs.litellm.ai/docs/completion/drop_params) — exceto na rota de passagem da Anthropic, onde o relatório foi encerrado porque solicitações de passagem não são modificadas (https://github.com/BerriAI/litellm/issues/15097). Amazon Bedrock: defina temperature ou topP em Converse inferenceConfig, ou temperature ou top_p no corpo de InvokeModel — nunca ambos (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_pNo Claude Opus 4.7 e posteriores, não envie nenhum dos dois
Os modelos mais recentes vão além. Definir temperature, top_p ou top_k com qualquer valor não padrão no Claude Opus 4.7 e modelos posteriores retorna um 400 (https://platform.claude.com/docs/en/models/opus-5-5/migration-guide); o mesmo vale para Claude Sonnet 5 (https://platform.claude.com/docs/en/models/sonnet-5/migration-guide) e se aplica também ao 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). A mensagem muda — desenvolvedores veem “`temperature` is deprecated for this model.” — e a referência da API da Anthropic agora marca os três parâmetros como obsoletos: em modelos lançados depois do Claude Opus 4.6, aceita apenas temperature de 1.0 ou top_p de 0.99 ou superior, por compatibilidade retroativa, e rejeita top_k em qualquer valor (https://platform.claude.com/docs/en/api/messages). O SDK Python da Anthropic removeu esses parâmetros de seus métodos Messages na v1.0, lançada em 20 de agosto de 2026 (https://platform.claude.com/docs/en/release-notes/api).
Se você estiver chamando pela Kunavo
Nos sete modelos claude-* em que a Anthropic removeu a amostragem — 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 — o Kunavo exclui temperature, top_p e top_k da solicitação antes que ela saia do gateway, tanto em /v1/chat/completions quanto em /v1/messages. Você não verá esse erro nesses sete, mas os valores enviados não têm efeito: a solicitação segue para o upstream como se você os tivesse omitido. Em claude-opus-4-6, claude-sonnet-4-6 e claude-haiku-4-5, o Kunavo não remove nada: o tradutor de chat copia qualquer valor numérico de temperature, top_p ou top_k para a solicitação Claude sem alterações, e /v1/messages encaminha o corpo exatamente como enviado; portanto, envie apenas um dos dois nesses modelos. Se o upstream rejeitar o par, o erro 400 chega até você com o texto da mensagem do upstream inalterado, não é repetido em outro canal e é registrado com custo zero. Outro parâmetro de solicitação que os modelos mais recentes rejeitam é tratado em o guia max_tokens vs max_completion_tokens.
Perguntas frequentes
Devo usar temperature ou top_p com Claude?
Temperature, a menos que você tenha um motivo específico. A referência da API da Anthropic recomenda top_p apenas para casos de uso avançados, e no Claude Opus 4.7 e posteriores nenhum dos dois pode ser definido com um valor não padrão.
top_p = 1 conta como não defini-lo?
Não conte com isso. Um desenvolvedor relatou o mesmo erro 400 com top_p em 1.0 junto com temperature no Claude Sonnet 4.5 (issue #18304 do n8n). Exclua a chave em vez de defini-la com um valor que pareça neutro.
Por que o n8n ou o LangChain envia top_p quando nunca o defini?
Ambos encaminhavam valores padrão. O nó Anthropic Chat Model do n8n enviava os padrões do LangChain (topP -1, temperature 0.7) até a versão 1.114.1, e o ChatAnthropic no LangChain JS 0.3.x enviava uma temperature padrão junto com o top_p definido por você. Atualize: n8n 1.114.1 ou posterior, @langchain/anthropic 1.3.24 ou posterior.
O que significa “`temperature` is deprecated for this model”?
É a regra mais rígida no Claude Opus 4.7 e posteriores, Sonnet 5 e Fable 5 e 5.1: esses modelos rejeitam diretamente valores de amostragem não padrão. Remova os parâmetros. Por meio do Kunavo, os modelos que oferecemos têm esses parâmetros removidos, então a chamada prossegue.
Uma solicitação rejeitada custa alguma coisa no Kunavo?
Não. Uma solicitação rejeitada pelo upstream é registrada com custo zero.
Guias relacionados
- “Este modelo não é compatível com prefill de mensagem do assistant” — quais modelos Claude deixaram de aceitar prefill e o que usar no lugar
- “Unsupported parameter: 'max_tokens' is not supported with this model” — use max_completion_tokens
- Custo da API de IA do n8n: uma execução, muitas chamadas de modelo, duas cobranças
- API do Claude — o guia completo para chamar o Claude no Kunavo
Mais detalhes sobre o significado dos erros estão em referência de erros; obter uma chave leva um minuto por meio de cadastro e da guia de autenticação.