Menu

Temperatura em LLMs: o que é e como ajustar

A temperatura controla quanto de aleatoriedade um modelo de linguagem usa ao escolher cada próxima palavra. Veja como ela muda as chances de cada palavra, quando usar um valor baixo ou alto e como ela difere do top_p.

Você pode editar cada prompt desta página e depois abri-lo no ChatGPT, no Claude ou em outro app de IA.

A temperatura é um número que controla quanto de aleatoriedade um modelo de linguagem usa ao escolher a próxima palavra. Com uma temperatura baixa, o modelo pega a palavra mais provável quase sempre, então as respostas são focadas e repetíveis. Com uma temperatura alta, as chances se espalham, então as respostas variam mais e às vezes se perdem. A temperatura muda como o modelo escolhe entre palavras que ele já considera; ela não muda o que o modelo sabe.

Como um modelo escolhe a próxima palavra

Um modelo escreve um token por vez, e um token é uma palavra ou um pedaço de palavra (veja tokens e janela de contexto). Em cada passo, ele dá uma pontuação a cada token do vocabulário, chamada logit. Uma função chamada softmax transforma essas pontuações em probabilidades: cada pontuação passa por uma exponencial e é dividida pela soma de todas elas, então pontuações maiores ficam com fatias maiores e todas as fatias somam 1. Depois o modelo sorteia um token de acordo com essas fatias.

A temperatura entra logo antes do softmax. Cada pontuação é dividida pela temperatura T:

probabilidade(palavra) = exp(pontuação / T) / soma de exp(pontuação / T) de todos os candidatos

Com T abaixo de 1, as diferenças entre as pontuações aumentam, então o líder se distancia ainda mais. Com T acima de 1, as diferenças diminuem, então os azarões se aproximam. Em T = 1 você tem as probabilidades do próprio modelo. Em T = 0 a divisão fica indefinida, então as APIs tratam isso como "sempre pegue o primeiro token", o que se chama decodificação gulosa (greedy decoding).

Teste: o slider de temperatura

A demonstração abaixo continua a frase "Minha linguagem de programação favorita é" com seis palavras candidatas. As pontuações são ilustrativas, escolhidas para esta demonstração; um modelo real pontua um vocabulário de dezenas de milhares de tokens ou mais, e o nome de uma linguagem pode ser dividido em vários tokens. A matemática é a real: as barras são o softmax dessas pontuações na temperatura que você escolher, e o botão de amostragem sorteia dez palavras a partir delas.

Minha linguagem de programação favorita é …
Next word probabilities
Python46%
JavaScript28%
Rust14%
C7.6%
Haskell3.4%
COBOL0.8%
Samples
Press Sample to let the model pick a word ten times.

Em 1,0, o Python fica com cerca de 46% e o COBOL com menos de 1%. Arraste para 0,5 e o Python sobe para cerca de 67%, enquanto o COBOL praticamente some. Arraste para 2,0 e o Python cai para cerca de 32%, enquanto o COBOL sobe para cerca de 4%, então mais ou menos uma rodada de dez sorteios em cada três vai incluí-lo pelo menos uma vez. Repare no que nunca acontece: a ordem das palavras continua a mesma em qualquer ajuste. A temperatura não consegue deixar o COBOL mais provável que o Python; ela só aumenta ou diminui as diferenças.

Uma resposta real é feita de centenas dessas escolhas seguidas, e cada escolha passa a fazer parte do contexto da seguinte. Uma palavra incomum logo no início muda tudo o que vem depois, e é por isso que uma resposta com temperatura alta se desvia muito mais do que uma única palavra nesta demonstração sugere.

Quando usar temperatura baixa ou alta

TarefaPonto de partidaPor quê
Código, correção de bugs, SQLBaixa, de 0 a 0,3Costuma haver uma continuação melhor, e você quer o mesmo resultado a cada execução
Extração, classificação, JSON0Qualquer variação é ruído, e um programa precisa ler a saída
Explicações, perguntas do dia a diaO padrão do fornecedorOs padrões são escolhidos para uso geral
Brainstorming, nomes, ideias de históriasPadrão ou um pouco mais altaVocê quer opções diferentes entre si

Dois cuidados. Primeiro, uma temperatura baixa não torna uma resposta verdadeira. Se a resposta mais provável do modelo estiver errada, a temperatura 0 dá essa resposta errada toda vez, só que de forma consistente; veja alucinação de IA. Segundo, valores muito altos (bem acima de 1, em APIs cuja escala vai até 2) muitas vezes produzem um texto que perde o fio ou deixa de fazer sentido, porque tokens improváveis passam a ser escolhidos cada vez mais.

Às vezes a aleatoriedade é justamente o objetivo. O prompt de autoconsistência roda a mesma pergunta de raciocínio várias vezes, de propósito, com temperatura acima de zero, e depois fica com a resposta em que a maioria das execuções concorda.

Temperatura, top_p e top_k

Dois outros ajustes também controlam a amostragem, e as APIs muitas vezes os mostram ao lado da temperatura.

top_p (nucleus sampling) mantém só os tokens mais prováveis cujas probabilidades somam p e sorteia entre eles. Usando os números da demonstração com temperatura 1: Python, JavaScript e Rust somam cerca de 88%, e acrescentar o C passa de 90%. Então, com top_p = 0.9, o modelo só sorteia entre esses quatro; Haskell e COBOL nunca aparecem. Ao contrário da temperatura, o top_p se adapta: quando o modelo está confiante, poucos tokens passam no corte, e quando está em dúvida, muitos passam.

top_k mantém um número fixo dos tokens mais prováveis, como os 40 primeiros. Algumas APIs oferecem esse ajuste e outras não.

Os fornecedores geralmente recomendam mudar a temperatura ou o top_p, não os dois, porque os efeitos se somam de um jeito difícil de prever.

Como definir a temperatura na API

Os apps de chat escondem o ajuste, mas as APIs o recebem como parâmetro. A faixa depende do fornecedor: a API Chat Completions da OpenAI aceita de 0 a 2, e a API Messages da Anthropic aceita de 0 a 1. Alguns modelos de raciocínio só aceitam o valor padrão.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

response = client.chat.completions.create(
    model=MODEL,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
    temperature=0.2,
)
print(response.choices[0].message.content)
import anthropic

client = anthropic.Anthropic()
MODEL = "your-model-id"  # e.g. from your provider's model list

message = client.messages.create(
    model=MODEL,
    max_tokens=500,
    temperature=0.2,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
)
print(message.content[0].text)

Por que os apps de chat escondem o ajuste, e o que fazer no lugar

Os apps do ChatGPT, do Claude e do Gemini escolhem os ajustes de amostragem por você e não mostram nenhum slider. Isso mantém os apps simples e, na maioria dos pedidos, reescrever o prompt muda a resposta muito mais do que um ajuste de amostragem mudaria.

Então, em um app de chat, o seu controle é o prompt. Pedir uma resposta traz algo próximo da primeira escolha do modelo. Pedir muitas respostas diferentes entre si traz variedade em qualquer temperatura, porque agora o modelo tem um motivo para evitar a primeira escolha. Alterne entre as abas e mude o produto para ver a diferença.

Fill in
Sugira um nome para um app de acompanhamento de hábitos.
Try it
Example replyReplies vary between models and runs.

Streakly. É curto, fácil de lembrar e remete às sequências diárias (streaks) que fazem as pessoas voltarem.

O botão de gerar de novo em um app de chat sorteia uma nova resposta a partir do mesmo prompt, o que é um jeito rápido de ver quanto as respostas variam. Se elas variam mais do que você quer, a solução costuma ser um prompt mais específico: uma tarefa precisa estreita o leque de boas respostas, e isso deixa as execuções mais parecidas. O guia de como escrever um prompt mostra o que acrescentar.

Perguntas frequentes

O que é temperatura em um LLM?

Temperatura é um ajuste de amostragem que controla quão aleatória é a escolha de cada próximo token. O modelo dá uma pontuação a cada token possível, e as pontuações são divididas pela temperatura antes de virarem probabilidades. Valores baixos deixam a primeira opção dominar; valores altos achatam as chances, então tokens menos prováveis são escolhidos com mais frequência.

Que temperatura devo usar para programação?

Um valor baixo, entre 0 e 0,3, é um ponto de partida comum para código, extração de dados e qualquer tarefa com uma única resposta certa, porque você quer a continuação mais provável e resultados repetíveis. Aumente quando quiser variedade, como para criar nomes ou alternativas de design. Alguns modelos de raciocínio só aceitam o valor padrão, então confira a documentação do fornecedor.

Qual é a diferença entre temperatura e top_p?

A temperatura muda o formato da distribuição de probabilidades inteira. O top_p, também chamado de nucleus sampling, corta a distribuição: o modelo só sorteia entre o menor grupo de tokens cujas probabilidades somam p, então top_p = 0.9 descarta a cauda longa de tokens improváveis. Os fornecedores geralmente recomendam ajustar um dos dois e deixar o outro no padrão.

Temperatura 0 deixa a saída determinística?

Quase, mas não totalmente. Em 0, o modelo pega o token mais provável em cada passo, então execuções repetidas costumam ser idênticas ou muito parecidas. Pequenas diferenças numéricas nos servidores do fornecedor ainda podem trocar um token de vez em quando, e quando um token muda, o resto da resposta pode seguir outro caminho.

Dá para mudar a temperatura no ChatGPT ou no Claude?

Nos apps de chat, não: eles escolhem os ajustes de amostragem por você e não mostram nenhum controle de temperatura. Você pode defini-la pelas APIs e em ferramentas para desenvolvedores, como o Playground da OpenAI, o Anthropic Console e o Google AI Studio. Em um app de chat, peça variedade ou consistência no próprio prompt.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR