Como Reduzir os Custos de APIs LLM em 80% em 2026
APIs de LLM são poderosas mas caras em escala. Um produto SaaS que faz um milhão de chamadas de API por mês pode facilmente gastar entre $3.000 e $15.000 dependendo do modelo e de como os prompts são estruturados. A boa notícia: a maioria das equipes está deixando 60–80% de economia na mesa por ineficiências evitáveis. Este guia cobre dez técnicas que você pode implementar esta semana.
| Técnica | Economia típica | Esforço |
|---|---|---|
| Compressão de prompts | 20–35% | Baixo |
| Cache semântico | 30–60% | Médio |
| Roteamento de modelos | 40–70% | Médio |
| Poda de contexto | 15–40% | Médio |
| Requisições em lote | 50% (preço batch) | Baixo |
| Controle de comprimento de saída | 10–30% | Baixo |
| Seleção de modelo por tarefa | 50–80% | Baixo |
| Otimização de embeddings | 20–40% | Médio |
| Streaming (UX, não custo) | 0–10% | Baixo |
| Lógica de retry com jitter | 5–15% | Baixo |
1. Compressão de Prompts
Instruções verbosas não tornam os modelos mais inteligentes — apenas custam mais. A maioria dos prompts de sistema pode ser reduzida em 20–40% sem perder precisão nas tarefas. Remova frases de preenchimento, contexto redundante e prosa onde instruções estruturadas funcionam melhor.
# ANTES — 84 tokens
Você é um assistente de suporte ao cliente muito útil. Por favor
seja sempre educado e profissional. Quando o usuário fizer uma
pergunta, certifique-se de fornecer uma resposta clara e detalhada.
Se não souber a resposta, diga honestamente.
# DEPOIS — 24 tokens
Suporte ao cliente. Seja conciso e preciso.
Se não souber, diga isso.
Isso é uma redução de 71% apenas no prompt do sistema. Multiplique isso por cada chamada de API e a economia se acumula rapidamente.
2. Cache Semântico
O cache semântico armazena respostas de LLM e serve respostas em cache quando uma nova consulta é semanticamente similar a uma anterior — mesmo que a redação seja diferente. Ferramentas como GPTCache ou uma camada simples de Redis + embeddings podem atingir taxas de cache de 30–60% em chatbots de suporte típicos.
import hashlib, json
from redis import Redis
import numpy as np
r = Redis()
def buscar_cache_semantico(embedding_consulta, limiar=0.92):
chaves = r.keys("cache:emb:*")
for chave in chaves:
armazenado = np.frombuffer(r.get(chave), dtype=np.float32)
similaridade = np.dot(embedding_consulta, armazenado) / (
np.linalg.norm(embedding_consulta) * np.linalg.norm(armazenado)
)
if similaridade >= limiar:
chave_resp = chave.decode().replace("emb:", "ans:")
return r.get(chave_resp).decode()
return None
3. Roteamento de Modelos
Nem toda tarefa precisa do GPT-4o. Um classificador simples pode rotear consultas para modelos baratos em tarefas fáceis e modelos caros apenas para tarefas difíceis. Em escala, esta é a otimização de maior alavancagem disponível.
def rotear_modelo(complexidade_tarefa: str) -> str:
roteamento = {
"pergunta_simples": "gemini-2.5-flash", # $0.15/1M tokens
"classificacao": "gemini-2.5-flash",
"resumo": "claude-haiku-3-5", # ~$0.80/1M tokens
"geracao_codigo": "gpt-4o", # $2.50/1M tokens
"raciocinio": "claude-sonnet-4-6", # $3.00/1M tokens
}
return roteamento.get(complexidade_tarefa, "gpt-4o")
Se 70% do seu tráfego são perguntas simples e você as roteia para o Gemini Flash em vez do GPT-4o, você reduz esses custos de chamadas em 94%.
4. Poda de Contexto
Conversas ficam caras porque você reenvia todo o histórico a cada turno. Após 5–6 turnos, considere substituir mensagens mais antigas por um resumo compacto. Uma conversa de 20 turnos pode ter seu contexto comprimido de ~8.000 para ~1.500 tokens sem perda significativa de qualidade.
5. Requisições em Lote (Batch API)
A Batch API da OpenAI e a API de lotes de mensagens da Anthropic oferecem descontos de 50% para cargas de trabalho assíncronas com prazo de até 24 horas. Se você executa jobs noturnos de enriquecimento, pipelines de processamento de documentos ou avaliações, não há razão para não usar o modo batch.
# API de lotes da Anthropic — 50% de desconto
import anthropic
client = anthropic.Anthropic()
lote = client.messages.batches.create(
requests=[
{"custom_id": f"req-{i}", "params": {
"model": "claude-sonnet-4-6",
"max_tokens": 256,
"messages": [{"role": "user", "content": doc}]
}}
for i, doc in enumerate(documentos)
]
)
6. Controle de Comprimento de Saída
Modelos tendem a ser verbosos por padrão. Definir max_tokens explicitamente e incluir instruções como "Responda em menos de 100 palavras" ou "Retorne apenas JSON, sem explicação" pode reduzir os custos de tokens de saída em 20–40%.
7. Seleção de Modelo Adequado para a Tarefa
Use o modelo mais barato que lida de forma confiável com sua tarefa. Hierarquia prática para 2026:
- Gemini 2.5 Flash ($0,15/1M entrada) — classificação, extração, perguntas simples, tradução
- Claude Haiku 3.5 (~$0,80/1M entrada) — resumos, formatação, geração de texto curto
- GPT-4o ($2,50/1M entrada) — codificação complexa, escrita matizada, raciocínio em múltiplos passos
- Claude Sonnet 4.6 ($3,00/1M entrada) — análise de documentos longos, tarefas agênticas
8. Otimização de Embeddings
Se você usa embeddings para RAG, a escolha do modelo de embedding importa. O text-embedding-3-small da OpenAI a $0,02/1M tokens é 5x mais barato que text-embedding-3-large a $0,13/1M tokens, com apenas perda marginal de qualidade para a maioria das tarefas de recuperação. Também faça cache de embeddings agressivamente.
9. Streaming e Controle de Timeouts
O streaming em si não reduz os custos de tokens — você paga pelos mesmos tokens de qualquer forma. Mas permite implementar parada antecipada: se o usuário sair ou a saída claramente se desviar, você pode abortar o stream e evitar pagar por tokens de saída desnecessários.
10. Lógica de Retry com Backoff Exponencial e Jitter
Loops de retry ingênuos podem causar problemas de thundering herd onde todos os retries acontecem simultaneamente, queimando tokens em requisições que falharão novamente. O backoff com jitter previne isso. Além disso, faça retry apenas em erros retriáveis (429, 500) — não em erros de cliente 400.
import time, random
def chamar_com_retry(fn, max_retries=4):
for tentativa in range(max_retries):
try:
return fn()
except RateLimitError:
if tentativa == max_retries - 1:
raise
espera = (2 ** tentativa) + random.uniform(0, 1)
time.sleep(espera)
except InvalidRequestError:
raise # Não fazer retry em erros de cliente
Combinando as Técnicas
Combinar essas técnicas é multiplicativo, não aditivo. Uma equipe usando roteamento de modelos (60% de economia) + compressão de prompts (30%) + cache semântico (40% de taxa de acerto) alcança aproximadamente:
Custo efetivo = custo_base × 0,40 × 0,70 × 0,60 ≈ 17% do original
Isso é uma redução de 83% nos custos. Comece com roteamento de modelos para maior alavancagem, depois adicione cache semântico, depois comprima os prompts.
Dica profissional: Antes de otimizar, meça primeiro. Cole seus prompts reais no Tokenia para ver exatamente quantos tokens cada um consome e quanto custa por modelo.
Conte seus tokens antes de otimizar
Cole qualquer prompt no Tokenia para ver contagens de tokens e custos no GPT-4o, Claude, Gemini e mais de 30 modelos — instantaneamente, de graça, sem cadastro.
Experimente o Tokenia Grátis →