02-05-01 — Temperatura, top_p, top_k, max_tokens e stop sequences

⏱ 12 min Fontes validadas em: 2026-04-29

TL;DR

Esses parâmetros controlam como o modelo escolhe o próximo token. Temperature é o mais importante: 0.0 = sempre o token mais provável (determinístico), valores altos = mais aleatoriedade. Top_p e top_k são filtros complementares. max_tokens controla custo. Stop sequences evitam saídas mal formatadas. Entender isso é diferencial imediato na qualidade das suas integrações.

O que acontece durante a inferência

A cada passo, o modelo calcula uma distribuição de probabilidade sobre o vocabulário inteiro (~100K tokens). O resultado é um vetor de logits — scores brutos para cada token possível. Os parâmetros de inferência determinam como amostrar dessa distribuição.

graph LR Input["Prompt\n(tokens de entrada)"] --> Model["LLM\n(forward pass)"] Model --> Logits["Logits\n(scores para ~100K tokens)"] Logits --> Temp["÷ Temperature\n(escala a distribuição)"] Temp --> Softmax["Softmax\n(→ probabilidades)"] Softmax --> TopK["Top-k / Top-p\n(filtra candidatos)"] TopK --> Sample["Amostragem\n(escolhe 1 token)"] Sample --> Output["Token de saída"]

Temperature

Divide os logits antes do softmax. É o parâmetro mais impactante.

  • temperature = 0.0: greedy decoding — sempre escolhe o token com maior probabilidade. Determinístico: mesma entrada → mesma saída sempre.
  • temperature = 1.0: distribuição original do modelo sem modificação.
  • temperature > 1.0: "aplana" a distribuição — tokens menos prováveis ganham chance. Mais criativo, mais imprevisível, mais propenso a erros.
  • 0.1–0.4: respostas focadas e consistentes. Ideal para código, SQL, JSON, extração de dados.
  • 0.5–0.8: balanceamento. Bom para resumos, Q&A, assistentes de propósito geral.
  • 0.9–1.5: máxima criatividade. Marketing, brainstorming, geração de histórias.
⚠️ Temperature 0.0 não é 100% determinístico em todos os sistemas. Em ambientes distribuídos com paralelismo de GPU, operações de ponto flutuante podem introduzir variações mínimas. Para reprodutibilidade total, combine temperature=0 com uma seed fixa (disponível no GPT-4 API via parâmetro seed).

Top_p (nucleus sampling)

Em vez de limitar por número de tokens, limita pela massa de probabilidade acumulada. Com top_p = 0.9, o modelo só considera tokens que juntos somam 90% da probabilidade — descarta a cauda longa de tokens improváveis.

  • top_p = 1.0: sem filtragem (considera todos os tokens).
  • top_p = 0.9: padrão recomendado pela OpenAI.
  • top_p = 0.1: extremamente restritivo — apenas tokens muito prováveis.
💡 Temperature vs Top_p: use um de cada vez. OpenAI e Anthropic recomendam alterar temperature ou top_p, não ambos simultaneamente — os efeitos se multiplicam de forma imprevisível. Escolha um como seu knob principal.

Top_k

Versão mais simples: considera apenas os K tokens de maior probabilidade. Com top_k = 40, o modelo ignora todos exceto os 40 mais prováveis.

  • Menos flexível que top_p porque o número de candidatos é fixo independente da distribuição.
  • Comum em modelos open-weight (Llama, Mistral) e Gemini. A API da OpenAI não expõe top_k.
  • Valores típicos: 20–50 para foco, 100+ para diversidade.

max_tokens

Limite máximo de tokens na resposta (output tokens). Impacta diretamente o custo — você paga por token gerado.

  • Não confunda com tamanho do contexto: max_tokens é o limite da resposta, não do total.
  • Se a resposta precisar de mais tokens que o limite, ela é cortada abruptamente.
  • Para tarefas de extração/classificação: 100–200 é suficiente e economiza custo.
  • Para geração de documentos longos: considere 2000–4000 ou use streaming com múltiplos turnos.

Stop sequences

Lista de strings que encerram a geração quando aparecem no output. O modelo para de gerar ao encontrar qualquer uma delas.

import os
from openai import AzureOpenAI

client = AzureOpenAI(
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_key=os.environ["AZURE_OPENAI_API_KEY"],
    api_version="2024-12-01-preview"
)

# Exemplo: extrair JSON — parar quando fechar o objeto
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "Responda APENAS com JSON válido, sem markdown."},
        {"role": "user", "content": "Extraia nome e cargo de: 'João Silva é o CTO da Impar'"}
    ],
    temperature=0.0,      # determinístico para extração
    top_p=0.95,
    max_tokens=200,
    stop=["\n\n", "```"]  # para se aparecer bloco de código ou linha em branco dupla
)

print(response.choices[0].message.content)
print(f"\nTokens usados: {response.usage.total_tokens}")

Comparação visual: temperatura em ação

import os
from openai import AzureOpenAI

client = AzureOpenAI(
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_key=os.environ["AZURE_OPENAI_API_KEY"],
    api_version="2024-12-01-preview"
)

prompt = "Complete a frase: 'A inteligência artificial vai'"
temperaturas = [0.0, 0.7, 1.5]

for temp in temperaturas:
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        temperature=temp,
        max_tokens=50
    )
    print(f"\n--- Temperature: {temp} ---")
    print(response.choices[0].message.content)
💡 Configurações recomendadas por caso de uso:

Código / SQL / JSON: temperature=0.0, top_p=0.95, max_tokens=1000
Q&A / assistente: temperature=0.3, top_p=0.9, max_tokens=500
Resumo: temperature=0.5, top_p=0.9, max_tokens=300
Copywriting criativo: temperature=0.9, top_p=1.0, max_tokens=800

frequency_penalty e presence_penalty

Dois parâmetros adicionais da OpenAI API:

  • frequency_penalty (−2.0 a 2.0): penaliza tokens proporcionalmente a quantas vezes já apareceram no output. Reduz repetição de palavras específicas.
  • presence_penalty (−2.0 a 2.0): penaliza qualquer token que já apareceu (presença binária). Encoraja o modelo a falar sobre novos tópicos.
  • Valores positivos reduzem repetição; negativos encorajam repetição. 0.0 = desativado.

Como isso se conecta

  • 02-01-01 — LLM como autocomplete: temperature controla exatamente essa aleatoriedade
  • 02-05-02 — Limitações: alucinação aumenta com temperature alta
  • 02-05-03 — Desafio: experimento prático comparando temperaturas
  • → Módulo 03 — Prompt Engineering: parâmetros e prompts trabalham juntos para controlar output

Fontes

  1. OpenAI API Reference — Chat Completions
  2. The Curious Case of Neural Text Degeneration (top-p sampling) — Holtzman et al., 2020
  3. Hugging Face — How to generate text: using different decoding methods
  4. Azure OpenAI Service REST API Reference