Reduza os Custos de LLM: Estratégias de Otimização de Tokens
Reduza os custos do LLM em 80% com otimização inteligente de tokens
A otimização de tokens é a habilidade crítica que separa as aplicações de LLM custo-efetivas das experiências que consomem orçamento.
Com os custos da API escalando linearmente com o uso de tokens, compreender e implementar estratégias de otimização pode reduzir os custos em 60-80% mantendo a qualidade.

Entendendo a Economia de Tokens
Antes de otimizar, você precisa entender como os tokens e os preços funcionam em diferentes provedores de LLM.
Básicos dos Tokens
Tokens são as unidades fundamentais que os LLMs processam - aproximadamente equivalentes a 4 caracteres ou 0,75 palavras em inglês. A string “Hello, world!” contém aproximadamente 4 tokens. Diferentes modelos usam diferentes tokenizers (GPT usa o tiktoken, Claude usa o seu próprio), então as contagens de tokens variam ligeiramente entre os provedores.
Comparação de Modelos de Preços
Preços da OpenAI (até 2025):
- GPT-4 Turbo: $0,01 de entrada / $0,03 de saída por 1K tokens
- GPT-3.5 Turbo: $0,0005 de entrada / $0,0015 de saída por 1K tokens
- GPT-4o: $0,005 de entrada / $0,015 de saída por 1K tokens
Preços da Anthropic:
- Claude 3 Opus: $0,015 de entrada / $0,075 de saída por 1K tokens
- Claude 3 Sonnet: $0,003 de entrada / $0,015 de saída por 1K tokens
- Claude 3 Haiku: $0,00025 de entrada / $0,00125 de saída por 1K tokens
Para uma comparação abrangente de provedores de LLM na nuvem, incluindo preços detalhados, recursos e casos de uso, consulte nosso guia dedicado.
Insight-chave: Os tokens de saída custam 2-5 vezes mais que os tokens de entrada. Limitar o comprimento da saída tem um impacto desproporcional nos custos.
Engenharia de Prompt para Eficiência
A engenharia de prompt eficaz reduz drasticamente o consumo de tokens sem sacrificar a qualidade.
1. Elimine a Redundância
Exemplo Ruim (127 tokens):
Você é um assistente útil. Por favor, me ajude com a seguinte tarefa.
Eu gostaria que você analisasse o seguinte texto e me fornecesse
um resumo. Aqui está o texto que gostaria que você resumisse:
[text]
Por favor, forneça um resumo conciso dos principais pontos.
Otimizado (38 tokens):
Resuma os pontos principais:
[text]
Economia: Redução de 70% nos tokens, qualidade de saída idêntica.
2. Use Formatos Estruturados
JSON e saídas estruturadas reduzem o desperdício de tokens devido a linguagem natural verbose.
Em vez de:
Por favor, extraia o nome da pessoa, a idade e a profissão deste texto
e formate sua resposta claramente.
Use:
Extraia para JSON: {nome, idade, profissão}
Texto: [input]
3. Otimização de Aprendizado com Poucos Exemplos
Exemplos com poucos exemplos são poderosos, mas caros. Otimize usando:
- Use o mínimo de exemplos necessários (1-3 normalmente suficiente)
- Mantenha os exemplos concisos - remova palavras desnecessárias
- Compartilhe prefixos comuns - reduza instruções repetidas
# Prompt otimizado com poucos exemplos
prompt = """Classifique o sentimento (pos/neg):
Texto: "Produto excelente!" -> pos
Texto: "Desapontado" -> neg
Texto: "{user_input}" ->"""
Para mais padrões de otimização do Python e atalhos de sintaxe, veja nossa Folha de Dicas do Python.
Estratégias de Cache de Contexto
O cache de contexto é a estratégia mais eficaz de otimização para aplicações com conteúdo estático repetido.
Como o Cache de Contexto Funciona
Provedores como a OpenAI e a Anthropic cacheiam prefixos de prompt que aparecem em múltiplas solicitações. Partes cacheadas custam 50-90% menos que tokens regulares.
Requisitos:
- Conteúdo cacheável mínimo: 1024 tokens (OpenAI) ou 2048 tokens (Anthropic)
- TTL do cache: 5-60 minutos dependendo do provedor
- O conteúdo deve ser idêntico e aparecer no início do prompt
Exemplo de Implementação
from openai import OpenAI
client = OpenAI()
# Mensagem do sistema cacheada entre solicitações
SYSTEM_PROMPT = """Você é um assistente de atendimento ao cliente para a TechCorp.
Políticas da empresa:
[Documento de política grande - 2000 tokens]
"""
# Isso é cacheado automaticamente
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": "Como faço para devolver um item?"}
]
)
# Chamadas subsequentes dentro do TTL do cache usam o prompt do sistema cacheado
# Pagando apenas pela mensagem do usuário + saída
Impacto Real-World: Aplicações com bases de conhecimento ou instruções longas veem uma redução de custos de 60-80%.
Estratégia de Seleção de Modelos
Usar o modelo certo para cada tarefa é crucial para a otimização de custos.
A Escada dos Modelos
- GPT-4 / Claude Opus - Raciocínio complexo, tarefas criativas, precisão crítica
- GPT-4o / Claude Sonnet - Equilíbrio entre desempenho/custo, propósito geral
- GPT-3.5 / Claude Haiku - Tarefas simples, classificação, extração
- Modelos menores finetunados - Tarefas repetitivas especializadas
Padrão de Roteamento
def route_request(task_complexity, user_query):
"""Roteia para o modelo apropriado com base na complexidade"""
# Classificação simples - use Haiku
if task_complexity == "simple":
return call_llm("claude-3-haiku", user_query)
# Moderado - use Sonnet
elif task_complexity == "moderate":
return call_llm("claude-3-sonnet", user_query)
# Raciocínio complexo - use Opus
else:
return call_llm("claude-3-opus", user_query)
Estudo de Caso: Um chatbot de atendimento ao cliente que roteia 80% das consultas para o GPT-3.5 e 20% para o GPT-4 reduziu os custos em 75% em comparação ao usar o GPT-4 para tudo.
Processamento em Lote
Para cargas de trabalho que não são sensíveis ao tempo, o processamento em lote oferece descontos de 50% da maioria dos provedores.
API de Processamento em Lote da OpenAI
from openai import OpenAI
client = OpenAI()
# Crie um arquivo em lote
batch_requests = [
{"custom_id": f"request-{i}",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": query}]
}}
for i, query in enumerate(queries)
]
# Envie o lote (50% de desconto, processamento de 24h)
batch = client.batches.create(
input_file_id=upload_batch_file(batch_requests),
endpoint="/v1/chat/completions",
completion_window="24h"
)
Casos de Uso:
- Rótulo e anotação de dados
- Geração de conteúdo para blogs/SEO
- Geração de relatórios
- Traduções em lote
- Geração sintética de conjuntos de dados
Técnicas de Controle de Saída
Como os tokens de saída custam 2-5 vezes mais, controlar o comprimento da saída é crítico.
1. Defina o Número Máximo de Tokens
response = client.chat.completions.create(
model="gpt-4",
messages=messages,
max_tokens=150 # Limite rígido previne custos descontrolados
)
2. Use Sequências de Parada
response = client.chat.completions.create(
model="gpt-4",
messages=messages,
stop=["END", "\n\n\n"] # Parem em marcadores
)
3. Peça Formatos Concisos
Adicione instruções como:
- “Responda em menos de 50 palavras”
- “Forneça apenas pontos em destaque”
- “Retorne apenas JSON, sem explicação”
Streaming para uma Melhor Experiência do Usuário
Embora o streaming não reduza os custos, melhora a performance percebida e permite a interrupção precoce.
stream = client.chat.completions.create(
model="gpt-4",
messages=messages,
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
token = chunk.choices[0].delta.content
print(token, end="")
# Interrompa precocemente se a resposta sair do caminho
if undesired_pattern(token):
break
Otimização de RAG
Geração Aumentada com Recuperação (RAG) adiciona contexto, mas um RAG não otimizado desperdiça tokens.
Padrão de RAG Eficiente
def optimized_rag(query, vector_db):
# 1. Recupere os trechos relevantes
chunks = vector_db.search(query, top_k=3) # Não muito muitos
# 2. Comprima os trechos - remova redundâncias
compressed = compress_chunks(chunks) # Compressão personalizada
# 3. Truncar até o limite de tokens
context = truncate_to_tokens(compressed, max_tokens=2000)
# 4. Prompt estruturado
prompt = f"Contexto:\n{context}\n\nQ: {query}\nA:"
return call_llm(prompt)
Técnicas de Otimização:
- Use chunking semântico (não tamanho fixo)
- Remova formatação markdown dos trechos recuperados
- Implemente reclassificação para obter conteúdo mais relevante
- Considere resumo de chunk para documentos grandes
Caching de Respostas
Cache de solicitações idênticas ou similares para evitar totalmente chamadas à API.
Implementação com Redis
import redis
import hashlib
import json
redis_client = redis.Redis()
def cached_llm_call(prompt, model="gpt-4", ttl=3600):
# Crie a chave de cache a partir do prompt + modelo
cache_key = hashlib.md5(
f"{model}:{prompt}".encode()
).hexdigest()
# Verifique o cache
cached = redis_client.get(cache_key)
if cached:
return json.loads(cached)
# Chame o LLM
response = call_llm(model, prompt)
# Cache o resultado
redis_client.setex(
cache_key,
ttl,
json.dumps(response)
)
return response
Caching Semântico: Para consultas similares (não idênticas), use embeddings vetoriais para encontrar respostas cacheadas.
Monitoramento e Análise
Monitore o uso de tokens para identificar oportunidades de otimização.
Métricas Essenciais
class TokenTracker:
def __init__(self):
self.metrics = {
'total_tokens': 0,
'input_tokens': 0,
'output_tokens': 0,
'cost': 0.0,
'requests': 0
}
def track_request(self, response, model):
usage = response.usage
self.metrics['input_tokens'] += usage.prompt_tokens
self.metrics['output_tokens'] += usage.completion_tokens
self.metrics['total_tokens'] += usage.total_tokens
self.metrics['cost'] += calculate_cost(usage, model)
self.metrics['requests'] += 1
def report(self):
return {
'avg_tokens_per_request':
self.metrics['total_tokens'] / self.metrics['requests'],
'total_cost': self.metrics['cost'],
'input_output_ratio':
self.metrics['input_tokens'] / self.metrics['output_tokens']
}
Alertas de Custo
Configure alertas quando o uso ultrapassar os limites:
def check_cost_threshold(daily_cost, threshold=100):
if daily_cost > threshold:
send_alert(f"Custo diário ${daily_cost} excedeu ${threshold}")
Técnicas Avançadas
1. Modelos de Compressão de Prompt
Use modelos dedicados para comprimir prompts:
- LongLLMLingua
- AutoCompressors
- Tokens de compressão aprendidos
Esses podem alcançar razões de compressão de 10x mantendo 90%+ de desempenho nas tarefas.
2. Decodificação Especulativa
Execute um modelo pequeno junto com um modelo grande para prever tokens, reduzindo chamadas ao modelo grande. Normalmente 2-3x aceleração e redução de custos para qualidade semelhante.
3. Quantização
Para modelos auto-hospedados, a quantização (4-bit, 8-bit) reduz memória e computação:
- 4-bit: ~75% redução de memória, perda mínima de qualidade
- 8-bit: ~50% redução de memória, perda insignificante de qualidade
Se você estiver executando LLMs localmente, Ollama fornece uma excelente plataforma para implantar modelos quantizados com mínima configuração. Para seleção de hardware e benchmarks de desempenho, nossa comparação entre NVIDIA DGX Spark, Mac Studio e RTX-4080 mostra o desempenho real em diferentes configurações de hardware executando modelos grandes quantizados.
Checklist de Otimização de Custo
- Perfil o uso atual de tokens e custos por endpoint
- Audite prompts para redundância - remova palavras desnecessárias
- Implemente cache de contexto para conteúdo estático > 1K tokens
- Configure roteamento de modelos (pequeno para simples, grande para complexo)
- Adicione limites de max_tokens a todas as solicitações
- Implemente cache de resposta para consultas idênticas
- Use a API de lote para cargas de trabalho não urgentes
- Ative streaming para melhor experiência do usuário
- Otimize RAG: menos chunks, melhor classificação
- Monitore com rastreamento de tokens e alertas de custo
- Considere finetuning para tarefas repetitivas
- Avalie modelos menores (Haiku, GPT-3.5) para classificação
Estudo de Caso Real-World
Cenário: Chatbot de suporte ao cliente, 100K solicitações/mês
Antes da Otimização:
- Modelo: GPT-4 para todas as solicitações
- Média de tokens de entrada: 800
- Média de tokens de saída: 300
- Custo: 100K × (800 × 0,00003 + 300 × 0,00006) = $4.200/mês
Depois da Otimização:
- Roteamento de modelos: 80% GPT-3.5, 20% GPT-4
- Cache de contexto: 70% dos prompts cacheados
- Compressão de prompt: 40% redução
- Cache de resposta: 15% taxa de acerto no cache
Resultados:
- 85% das solicitações evitaram o GPT-4
- 70% beneficiaram-se do desconto do cache de contexto
- 40% menos tokens de entrada
- Custo efetivo: $780/mês
- Economia: 81% ($3.420/mês)
Links Úteis
- Ferramenta de Tokenizador da OpenAI - Visualize a quebra de tokens
- Preços da Anthropic - Compare os modelos da Claude
- LiteLLM - API unificada de LLM com rastreamento de custos
- Guia de Engenharia de Prompt - Práticas recomendadas
- LangChain - Framework de aplicação de LLM com cache
- Tokenizers da HuggingFace - Biblioteca de tokenização rápida
- Documentação da API de Processamento em Lote da OpenAI - 50% de desconto para processamento em lote
Conclusão
A otimização de tokens transforma a economia de LLM de proibitivamente cara para escalável de forma sustentável. Ao implementar compressão de prompt, cache de contexto, seleção inteligente de modelos e cache de resposta, a maioria das aplicações consegue reduzir os custos em 60-80% sem comprometer a qualidade.
Comece com as vitórias rápidas: audite seus prompts, ative o cache de contexto e roteie tarefas simples para modelos menores. Monitore seu uso de tokens religiosamente - o que é medido é otimizado. A diferença entre uma aplicação de LLM custo-efetiva e uma cara não é a tecnologia — é a estratégia de otimização.
Artigos Relacionados
- Provedores de LLM na Nuvem - Comparação abrangente de provedores de LLM na nuvem
- Folha de Dicas do Python - Sintaxe e padrões essenciais do Python
- Folha de Dicas do Ollama - Guia de implantação de LLM local
- NVIDIA DGX Spark vs Mac Studio vs RTX-4080: Comparação de Desempenho do Ollama - Benchmarks de desempenho para LLMs auto-hospedados