14-02-01 — Cost Optimization: Model Routing, Distillation e Prompt Compression
TL;DR
Custo de LLM em produção escala linear com tokens. Três alavancas principais para reduzir: Model Routing (usar GPT-4o-mini para perguntas simples, GPT-4o para complexas — reduz custo em 60-80%), Distillation (treinar modelo menor com outputs do modelo grande), e Prompt Compression (reduzir tokens sem perder informação — 30-40% de redução típica).
O Problema de Custo
GPT-4o custa ~$15/M tokens de entrada + $60/M tokens de saída (pricing de referência, variável). Para 500 usuários com 50 queries/dia de contexto médio de 2.000 tokens:
- Tokens/dia: 500 × 50 × 2.000 = 50M tokens
- Custo diário GPT-4o: ~$750/dia = $22.500/mês
- Custo diário GPT-4o-mini (~10x mais barato): ~$75/dia = $2.250/mês
A diferença de $20K/mês justifica investir em routing inteligente.
1. Model Routing Inteligente
Classifique cada query por complexidade e direcione para o modelo adequado:
| Tipo de query | Modelo recomendado | Custo relativo |
|---|---|---|
| FAQ simples, lookup, formatação | GPT-4o-mini / Phi-3.5 | 1x |
| Resumo, extração estruturada | GPT-4o-mini | 1x |
| Análise multi-documento, raciocínio | GPT-4o | 10x |
| Código complexo, arquitetura | GPT-4o ou o1 | 10-30x |
| Matemática, lógica formal | o1 / o3 | 30x+ |
async def cost_optimized_router(query: str, context: str) -> str:
# Classificação barata com modelo pequeno
complexity = await classify_complexity(query, model="gpt-4o-mini")
# complexity: "simple" | "moderate" | "complex" | "reasoning"
token_count = len(query.split()) + len(context.split()) # aproximação
if complexity == "simple" or token_count < 500:
return await call_model(query, context, model="gpt-4o-mini")
elif complexity == "moderate":
return await call_model(query, context, model="gpt-4o-mini")
elif complexity == "complex":
return await call_model(query, context, model="gpt-4o")
else: # reasoning
return await call_model(query, context, model="o1-mini")
2. Knowledge Distillation
Usa o modelo grande ("teacher") para gerar um dataset de exemplos de alta qualidade, e treina um modelo menor ("student") para imitar o comportamento. O student fica especializado na tarefa específica e pode ser 10x mais barato.
Processo:
- Coleta 500-2000 queries representativas do seu caso de uso
- GPT-4o gera respostas ideais para cada query (dataset de treino)
- Fine-tune de GPT-4o-mini ou Phi-3.5 com esse dataset
- Avaliação: modelo fine-tuned vs modelo original em métricas de qualidade
- Se qualidade ≥ 90% do original → deploy do modelo menor
3. Prompt Compression
Reduz o número de tokens no prompt sem perder informação essencial. Técnicas:
LLMLingua (Microsoft Research)
Técnica de compressão que remove tokens menos importantes baseado em perplexidade. Reduz prompts em 2-5x com perda mínima de qualidade.
from llmlingua import PromptCompressor
llm_lingua = PromptCompressor(
model_name="microsoft/llmlingua-2-bert-base-multilingual-cased-meetingbank",
use_llmlingua2=True,
device_map="cpu"
)
# Original: 2000 tokens
long_document = "... documento extenso ..."
compressed = llm_lingua.compress_prompt(
long_document,
instruction="Responda a pergunta baseado no contexto",
question="Qual é a cláusula de rescisão?",
target_token=800, # Reduz para 800 tokens (~40% do original)
rank_method="longllmlingua"
)
# compressed["compressed_prompt"] tem ~800 tokens com informação essencial preservada
Outras técnicas de compressão
- Summarization prévia: Resumir documentos extensos antes de inserir no contexto
- Chunk selection: No RAG, retrieval mais preciso = menos chunks necessários
- Structured data: Converter texto em tabelas JSON compactas reduz tokens
- Instruction pruning: Revisitar system prompts longos e remover redundâncias
Calculadora de ROI
• Model routing: -60% no custo de inferência
• Semantic cache (30% hit rate): -30% nas chamadas ao modelo
• Prompt compression (40% de tokens): -40% no custo dos tokens
Resultado combinado: até 85% de redução de custo vs. GPT-4o para tudo sem otimização