Por que o Claude responde diferente para o mesmo pedido feito duas vezes?

Por que o Claude responde diferente para o mesmo pedido? Porque gerar texto envolve amostragem, e a própria documentação da Anthropic diz que nem com temperature em 0.0 o resultado é totalmente determinístico. Some a isso pedido ambíguo e contexto diferente entre as duas tentativas, e a oscilação cresce. Nos modelos Claude 4.7 e posteriores temperature, top_p e top_k nem são mais suportados: valor fora do padrão devolve erro 400, e a orientação é guiar o comportamento por prompt. Ou seja: o controle saiu do parâmetro e foi parar no texto do seu pedido 🙂
Fala aí, beleza? Você colou o MESMO prompt duas vezes e o Claude devolveu duas respostas diferentes
Aí bate a dúvida: quebrou alguma coisa? A conta tá com problema? O modelo piorou hoje?
Nada disso
A resposta pra por que o Claude responde diferente é chata de aceitar e ótima de entender: variação é comportamento esperado de um modelo de linguagem, não defeito. Quem já apanhou de useEffect chamando duas vezes conhece bem a sensação de achar que é bug quando na verdade é comportamento previsto
O que muda o jogo é saber QUAIS partes dessa oscilação você controla, quais você não controla e em que hora ela joga a favor
Bora destrinchar isso?
As causas reais da variação (e o que fazer com cada uma)
O sintoma é sempre o mesmo: pedido igual, saída diferente
Só que ele tem origens distintas, e cada uma pede uma reação diferente
Causa 1: a amostragem, o tal do temperature
A Messages API tem um parâmetro chamado temperature, que controla a aleatoriedade da resposta
Ele aceita valores de 0.0 a 1.0 e o padrão é 1.0. A orientação da documentação é ficar mais perto de 0.0 em tarefas analíticas e mais perto de 1.0 em tarefas criativas
Traduzindo: no padrão, o modelo tá configurado pro lado mais solto da régua. Duas rodadas do mesmo pedido não têm por que sair idênticas
Como prevenir: essa alavanca existe na API, e mesmo lá ela tá sumindo nos modelos novos (falo disso na próxima seção). Então não conte com ela como plano A
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Causa 2: nem em 0.0 o resultado é 100% determinístico
Essa aqui é a parte que a galera não sabe
A própria documentação da Anthropic afirma que, mesmo com temperature em 0.0, o resultado NÃO é totalmente determinístico: entradas idênticas podem produzir saídas diferentes entre chamadas de API
E vale tanto pra inferência da própria Anthropic quanto via provedores de nuvem terceiros
Como prevenir: não previne, e prometer determinismo total aqui seria mentira. O que dá pra fazer é reduzir a MARGEM: quanto menos espaço o pedido deixa, menos essa variação residual aparece no resultado final
Causa 3: o pedido deixou margem larga
Essa é a causa que mais pesa no dia a dia, e é 100% sua
"Cria uma landing page bonita" tem umas mil saídas válidas. "Extrai o CNPJ desse texto e devolve só os números" tem uma
Quanto mais interpretação você delega, mais o resultado balança entre rodadas
Como prevenir: clareza e formato explícito, que é o assunto da seção de passos mais abaixo
Causa 4: o contexto não era o mesmo
Aqui mora o falso positivo clássico
Você acha que repetiu o pedido, mas repetiu em outra sessão, com outro histórico, com outro conjunto de instruções carregado
O pedido é igual, o CONTEXTO não é. E o contexto faz parte da entrada
Como prevenir: garantir que as duas rodadas partam do mesmo estado. No Claude Code isso tem nome e comando, e eu mostro na seção específica
Nos modelos mais novos você não ajusta mais temperature
Se você tava contando com o temperature pra travar a saída, tenho uma notícia
Nos modelos Claude 4.7 e posteriores (e no Claude Mythos Preview), os parâmetros de amostragem temperature, top_p e top_k não são mais suportados
Mandar valor diferente do padrão devolve erro 400. A orientação oficial é omitir os campos e guiar o comportamento por prompt
Se liga nas regras que continuam valendo na API pra quem ainda usa esses parâmetros:
temperatureetop_pnão podem ser especificados na mesma requisição: a recomendação é alterar um OU outro, e mandar os dois gera errotemperature and top_p cannot both be specified- com extended thinking ligado,
temperatureprecisa ficar em 1 (ou não ser definido) em todos os modelos - extended thinking também é incompatível com modificação de
top_ke com uso forçado de ferramenta
E o que sobrou de controle explícito? O effort
Ele é o parâmetro de profundidade de raciocínio hoje, com cinco níveis: low, medium, high (padrão), xhigh e max
É suportado por Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 4.6 e Claude Opus 4.5. Detalhe: alguns modelos que suportam max não suportam xhigh
No Claude Opus 4.8 o effort tem padrão high em todas as superfícies, incluindo a API, o Claude Code e o claude.ai
A conclusão prática é meio poética: o botão virou o texto do pedido
Quem quer saída estável hoje não mexe em dial, escreve melhor 😀
Como escrever o pedido para reduzir a oscilação
Beleza, então vamos pro que tá sob seu controle
São cinco movimentos, do mais barato pro mais técnico
- Aplique o teste do colega sem contexto. A regra de ouro do prompt claro, segundo a documentação, é mostrar o prompt pra um colega com pouco contexto: se ele ficar confuso, o Claude também vai ficar. E vale ser específico e prescritivo sobre COMO começar a resposta
O erro comum deste passo: achar que o modelo sabe o que tá na sua cabeça. Aquilo que você "deixou subentendido" é exatamente a fresta por onde a variação entra
- Separe as partes do prompt com tags XML. A documentação recomenda usar tags pra separar instruções, contexto, exemplos e entrada variável, com nomes tipo
<instructions>,<context>,<input>,<examples>,<thinking>e<answer>
A parte que quase todo mundo pula: usar os MESMOS nomes de tag entre prompts e se referir a eles no texto da instrução
<instructions>
Resuma o conteúdo de <input> em 3 bullets
Cada bullet com no máximo 15 palavras
Siga o padrão de <examples>
</instructions>
<context>
Público: devs que estão começando com IA
</context>
<examples>
- Bullet de exemplo no formato exato esperado
</examples>
<input>
(aqui entra o texto que muda a cada rodada)
</input>
O erro comum deste passo: misturar a entrada variável no meio da instrução. Aí o modelo tem que adivinhar onde termina a ordem e onde começa o dado
- Dê de 2 a 5 exemplos. A documentação de multishot recomenda incluir de 2 a 5 exemplos diversos e representativos, todos no mesmo padrão de formatação e rotulagem. Qualidade importa mais que quantidade
O erro comum deste passo: escrever exemplos cada um de um jeito. Se o SEU padrão oscila, adivinha o que a saída faz
- Use o prefill da resposta. Existe o recurso de prefill da resposta do Claude justamente pra maior controle da saída
É o equivalente a já deixar a primeira linha escrita pro modelo continuar em vez de escolher por onde entrar
- Se o consumo é por máquina, restrinja a saída de verdade. Os structured outputs estão disponíveis de forma geral na API do Claude e funcionam compilando o JSON Schema em uma gramática que restringe a saída do modelo
Estão em GA pra Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5 e Claude Haiku 4.5
Detalhes que importam na migração: o parâmetro output_format passou a ser output_config.format, o header beta não é mais exigido (o antigo segue funcionando por um período de transição) e as gramáticas compiladas ficam em cache por 24 horas desde o último uso
Tem ainda o strict tool use, com strict: true, que garante validação de schema em nomes e inputs de ferramentas, e dá pra combinar com structured outputs na mesma requisição
O erro comum deste passo: pedir "me devolve um JSON" no texto e rezar. Se código vai consumir a saída, restringe a saída, não pede com jeitinho 🙂
A Anthropic mantém uma página de documentação dedicada só a isso, a Increase output consistency, que vale a leitura de ponta a ponta
No Claude Code: o que estabiliza o comportamento entre sessões
No Claude Code a variação que mais incomoda quase nunca é do modelo
É sessão nova sem as mesmas instruções carregadas, e a gente culpa o coitado do modelo
- Coloque a regra no
CLAUDE.md. Que arquivo é esse? É o arquivo de memória do projeto, aquele que guarda as instruções que você quer valendo SEMPRE, em vez de repetir a cada conversa
Ele é lido no início de toda sessão. E tem um detalhe ótimo: o CLAUDE.md da raiz do projeto sobrevive à compactação, sendo relido do disco e reinjetado na sessão depois do /compact
Ou seja: instrução no chat some quando o histórico é compactado, instrução no CLAUDE.md da raiz volta pra sessão sozinha
O erro comum deste passo: dar a instrução no chat, compactar, e depois estranhar que o comportamento mudou no meio da sessão
- Não escreva um calhamaço. Arquivos de memória muito longos consomem mais contexto e podem reduzir a aderência às instruções: acima de 200 linhas o arquivo já pesa nessa conta
O erro comum deste passo: achar que mais regra é mais controle. Passou do ponto, o efeito inverte
- Use escopo por caminho. Regras com escopo por caminho carregam instruções só para os arquivos correspondentes, em vez de despejar tudo em toda sessão
- Recomece limpo quando for comparar duas rodadas. Esse é o tal comando que eu prometi lá em cima: o
/cleardevolve uma janela limitada sem custo de inferência
Com o /clear antes de cada rodada, as duas partem do mesmo estado, e aí sim dá pra dizer que o pedido foi "o mesmo"
O erro comum deste passo: comparar uma resposta do começo da sessão com outra depois de um monte de idas e vindas no chat e chamar isso de "mesmo pedido"
- Saiba o que tá carregado. O comando
/memoryabre a pasta de memória automática, e o/configabre a interface de configurações da sessão, incluindo a escolha de modelo
O erro comum deste passo: rodar o teste em modelos diferentes sem perceber e atribuir a diferença à sorte
Juntando os cinco: regra no CLAUDE.md da raiz pro que precisa valer sempre, arquivo curto e com escopo, /clear pra zerar a comparação e /memory mais /config pra saber exatamente o que tá em jogo
O que aconteceu quando repetimos os pedidos no teste do Opus 4.5
Agora a parte prática, com material meu mesmo
No vídeo do teste completo do Claude Opus 4.5, eu fui atrás de cenários fora do padrãozinho de demo justamente pra ver o quanto o modelo sustenta o pedido. Testei até SVG de cidade e lua, que é o tipo de coisa que não tá no exemplo pronto de ninguém
O placar de prompts ficou assim:
- cidade 3D navegável: 1 prompt
- simulador de dominós com física: 3 prompts, com erros no caminho, até ficar do jeito que eu queria
- JRPG estilo Final Fantasy: 2 prompts e resultado que eu considerei ruim, com batalha que não terminava e controles trocados
Teve também o capítulo das falhas de geração
Os prompts muito elaborados falhavam repetidamente, sem devolver resposta, e a tentativa perdida ainda comia o meu limite de uso (bati no limite várias vezes ao longo do dia e tive que esperar a janela liberar 😛)
Quando eu encurtei o pedido e reescrevi o mesmo prompt em inglês, sobrou 1 falha e a geração passou
E teve o caso que mais me pegou: rodei o mesmo prompt de página de portfólio no Claude e no Gemini e vieram propostas visualmente MUITO diferentes, uma mais ousada e com acabamento irregular, outra mais contida e encaixada
Não dava pra eleger vencedor: eram propostas diferentes, não versões melhores ou piores da mesma coisa
Isso me surpreendeu, porque na minha experiência prompts parecidos costumam devolver resultados parecidos
A leitura honesta de tudo isso: a variação não é aleatoriedade pura. Ela CRESCE onde o pedido deixa espaço, e refazer faz parte do processo. Por isso eu insisto que cada um teste por conta própria, em cenários variados, em vez de confiar só em gráfico bonito
Quando a variação é exatamente o que você quer
Se liga nisso, porque tem uma armadilha aqui
Tem gente gastando energia pra travar a saída em tarefa que só melhora com variação
Onde a oscilação joga a favor:
- gerar várias opções de título, nome, headline ou texto e escolher a melhor
- explorar abordagens de arquitetura ou de solução ANTES de decidir qual seguir
- destravar um resultado empacado rodando de novo, em vez de reescrever tudo do zero
- brainstorm e variações criativas, onde a resposta "certa" nem existe
E onde ela é problema mesmo:
| Cenário | Você quer | Caminho |
|---|---|---|
| Brainstorm de títulos e nomes | Variação | Rode de novo e compare as saídas |
| Explorar soluções de arquitetura | Variação | Peça abordagens distintas e escolha |
| Extração de dados de um texto | Repetibilidade | Restrinja a saída com schema |
| Classificação em categorias fixas | Repetibilidade | Schema + exemplos no mesmo padrão |
| Saída consumida por código | Repetibilidade | Structured outputs e strict tool use |
A regra é simples: quando a saída é lida por gente, variação é opção. Quando é lida por código, você restringe a saída em vez de esperar sorte
Conclusão
Recapitulando o que interessa
A oscilação entre respostas é característica do modelo, não defeito da sua conta: a documentação da Anthropic é explícita ao dizer que nem em temperature 0.0 o resultado é totalmente determinístico
E o controle mudou de lugar: em Claude 4.7 e posteriores os parâmetros de amostragem nem são mais suportados, com erro 400 pra valor fora do padrão e orientação de guiar por prompt. Sobrou o effort pra profundidade de raciocínio, com high como padrão
No Claude Code, o que estabiliza é o contexto: regra no CLAUDE.md da raiz (que volta pra sessão depois do /compact) e /clear antes de comparar duas rodadas
Seu próximo passo é bem concreto: pega UM prompt que você repete toda semana, aplica o teste do colega sem contexto, separa instrução, contexto, exemplos e entrada em tags e coloca de 2 a 5 exemplos no mesmo padrão de formatação
Só isso já derruba boa parte da variação que te irrita
Ah, e se você ainda aponta pra um modelo antigo: o Claude Opus 4.1 foi aposentado em 5 de agosto de 2026, com migração recomendada pro Claude Opus 4.8. Vale conferir onde seu código tá apontando antes de culpar a variação por algo que é só modelo velho…
Faça o teste e me conta como foi, até o próximo post! 😀
Perguntas frequentes
É possível deixar o Claude 100% determinístico configurando temperature em 0.0?
Não. A própria documentação da Anthropic afirma que, mesmo com temperature em 0.0, o resultado não é totalmente determinístico. Entradas idênticas podem produzir saídas diferentes entre chamadas de API, tanto na inferência da própria Anthropic quanto via provedores de nuvem terceiros.
Por que meu código que ajustava temperature parou de funcionar em modelos como o Claude Opus 4.8?
Porque nos modelos Claude 4.7 e posteriores, incluindo o Claude Mythos Preview, os parâmetros temperature, top_p e top_k não são mais suportados. Enviar um valor diferente do padrão devolve erro 400, e a orientação oficial é omitir esses campos e guiar o comportamento por prompt.
Dá pra combinar temperature e top_p na mesma requisição pra reduzir a variação?
Não. A API não aceita os dois especificados juntos na mesma requisição, e enviar ambos gera o erro ‘temperature and top_p cannot both be specified’. A recomendação da documentação é alterar um ou outro, nunca os dois.
O parâmetro effort substitui o temperature no controle da resposta do Claude?
Não é a mesma coisa, mas é o controle explícito que sobrou. O effort define a profundidade de raciocínio em cinco níveis (low, medium, high, xhigh e max), com high como padrão, e no Claude Opus 4.8 esse padrão vale na API, no Claude Code e no claude.ai.
Ligar o extended thinking interfere no comportamento da temperature?
Sim. Com extended thinking habilitado, a temperature precisa ficar em 1 ou simplesmente não ser definida, em todos os modelos. Esse modo também é incompatível com modificações de top_k e com uso forçado de ferramenta.
Por que o Claude Code pode responder diferente mesmo repetindo o mesmo pedido em sessões distintas?
Porque o pedido pode ser igual, mas o contexto carregado não é. O CLAUDE.md é lido no início de cada sessão, e o da raiz do projeto é relido e reinjetado após o /compact, então duas sessões só partem do mesmo estado se esse contexto for realmente o mesmo.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares

Como instalar Claude Code: guia completo para iniciantes
Aprenda como instalar Claude Code, autenticar sua conta e usar o /init para configurar seu projeto. Veja requisitos e métodos nativo, Homebrew e WinGet. Pra […]

Claude Code Preço: quanto custa, planos Pro vs Max e API
Conheça detalhadamente o Claude Code preço, incluindo os planos Pro e Max, opções gratuitas, e os valores da API para diferentes níveis de uso e […]

Como gerenciar contexto no Claude Code: tokens, /compact e /clear
Descubra como gerenciar contexto no Claude Code utilizando tokens de modo eficiente, conheça os comandos /compact e /clear e mantenha a alta qualidade das suas […]
