Aplicação de LLM tem um padrão de custo peculiar: ela funciona, ninguém olha a fatura por dois meses, e quando alguém olha o valor triplicou sem que o número de usuários tenha triplicado.

Na quase totalidade dos casos que analisamos, o vazamento está nos mesmos cinco lugares. Nenhum deles exige trocar de modelo nem reescrever o produto.

⚠️ Antes de otimizar, meça

Registre em cada chamada: tokens de entrada, tokens de saída, modelo, tipo de tarefa e usuário. Sem isso você vai otimizar o que é fácil, não o que é caro.

É comum descobrir que 80% do gasto vem de um único fluxo que ninguém suspeitava — e que os outros vinte não valem o esforço.

1. O histórico que cresce para sempre

É o vazamento número um, com folga. Um chat que reenvia toda a conversa a cada mensagem tem custo quadrático: a décima mensagem paga as nove anteriores de novo.

Numa conversa de 30 trocas, com 200 tokens por mensagem, você paga cerca de 93 mil tokens de entrada em vez dos 6 mil que a conversa contém. Quinze vezes mais.

A correção padrão é uma janela deslizante com resumo:

MAX_RECENTES = 8

def montar_contexto(sistema, historico, resumo_atual):
    recentes = historico[-MAX_RECENTES:]
    antigas  = historico[:-MAX_RECENTES]

    if antigas and precisa_resumir(antigas, resumo_atual):
        resumo_atual = resumir(antigas)      # chamada barata, modelo pequeno

    msgs = [{"role": "system", "content": sistema}]
    if resumo_atual:
        msgs.append({"role": "system",
                     "content": f"Resumo da conversa até aqui: {resumo_atual}"})
    return msgs + recentes

Resuma apenas quando o trecho antigo passar de um limite, e reaproveite o resumo — resumir a cada mensagem troca um problema por outro. Efeito típico: 40 a 70% de corte em produtos de conversa.

2. Modelo caro fazendo trabalho fácil

A diferença de preço entre o modelo mais simples e o mais capaz da mesma prateleira passa de trinta vezes na entrada e de setenta na saída. Usar o mais caro para classificar uma intenção em cinco categorias é queimar dinheiro por conforto.

TarefaModelo adequadoPor quê
Classificar intenção, detectar idioma, extrair campo simplesO mais baratoTarefa fechada, acerto praticamente igual
Resumir, reescrever, responder com contexto dadoIntermediárioPrecisa de fluência, não de raciocínio profundo
Código, análise em várias etapas, decisão difícilO mais capazAqui a diferença de qualidade aparece

O roteamento pode ser explícito — cada ponto do seu código escolhe o modelo — ou por triagem: um modelo barato classifica a dificuldade e só encaminha ao caro o que precisa. A primeira opção é mais simples e quase sempre suficiente.

Efeito típico: 30 a 60%, dependendo de quanta tarefa mecânica existe no seu fluxo.

3. Saída sem teto

Saída custa de duas a cinco vezes mais que entrada. E, sem max_tokens, o modelo escreve até se satisfazer — o que costuma ser mais do que o usuário queria ler.

{
  "model": "gpub-mini",
  "max_tokens": 350,
  "messages": [
    {"role": "system", "content": "Responda em no máximo 3 frases curtas."},
    ...
  ]
}

Use os dois: o teto técnico impede o desastre, a instrução no prompt evita que a resposta seja cortada no meio. Só o teto, sem a instrução, produz frases truncadas — que é pior que resposta longa.

💰 O caso dos modelos que pensam antes de responder

Modelos com raciocínio explícito geram um bloco de pensamento antes da resposta, e esse bloco é cobrado como saída. Numa pergunta simples, o raciocínio pode ser cinco vezes maior que a resposta.

Se a sua tarefa não precisa de raciocínio — classificar, extrair, reescrever —, escolha um modelo que não pense, ou reduza o esforço de raciocínio se o modelo permitir. É um dos cortes mais fáceis e menos conhecidos.

4. Contexto recuperado em excesso

Em sistemas com busca sobre documentos, é comum mandar os 10 trechos mais relevantes por garantia. Dez trechos de 500 palavras são cerca de 6.500 tokens por pergunta, em toda pergunta.

Duas correções que somam:

Efeito típico: 40 a 60% do custo de entrada em sistemas de busca, com qualidade igual ou melhor.

5. Perguntas repetidas

Em atendimento, uma fração enorme das perguntas é a mesma: horário de funcionamento, política de troca, como cancelar. Não há motivo para pagar geração toda vez.

import hashlib, json

def chave(pergunta, contexto_id):
    normal = " ".join(pergunta.lower().split())
    return hashlib.sha1(f"{contexto_id}|{normal}".encode()).hexdigest()

def responder(pergunta, contexto_id, ttl=86400):
    k = chave(pergunta, contexto_id)
    if (r := cache.get(k)):
        return r
    r = chamar_modelo(pergunta)
    cache.set(k, r, ttl)
    return r

Duas cautelas: inclua no identificador tudo que muda a resposta (cliente, plano, versão da política) — cache que devolve a resposta de outro contexto é pior que não ter cache. E defina prazo de validade curto para conteúdo que muda.

Um passo além é o cache semântico: se a nova pergunta for muito parecida com uma já respondida (medida por embedding), reaproveite. Ganha mais acertos e exige limiar bem calibrado — acima de 0,95 de similaridade, na prática.

A conta antes e depois

Assistente interno, 2.000 conversas por mês, 12 mensagens por conversa:

AntesDepois
Tokens de entrada por conversa~78.000~14.000
Tokens de saída por conversa~6.000~3.600
ModeloO mais capaz em tudoBarato em 70% das chamadas
Custo mensal estimado~R$ 3.400~R$ 190

Preços de agosto de 2026, para uma GPU avulsa, sem interrupção programada. O catálogo muda: confira a vitrine antes de fechar a conta.

Não é um exemplo forçado: os quatro primeiros cortes se multiplicam entre si. Janela de contexto pela metade e modelo dez vezes mais barato em boa parte das chamadas dá uma redução que parece exagerada até você refazer a conta.

Veja para onde vai o seu gasto

O painel mostra consumo por modelo e por chave, e a cobrança é em reais no mesmo saldo das GPUs. Sem assinatura, sem mínimo.

Criar conta →

O que não vale a pena

Conclusão

Conta de token alta quase nunca é preço de modelo — é desenho de aplicação. Corte o histórico com janela e resumo, escolha o modelo por tarefa, ponha teto na saída, mande menos contexto e melhor selecionado, e guarde o que se repete.

Comece registrando tokens por chamada e por fluxo durante uma semana. O gráfico vai apontar o culpado sozinho, e na maioria das vezes ele é o primeiro item desta lista.

Continue: servidor próprio vs API · latência percebida · medir onde gasta