O problema de custo escondido na sua fatura
Olhe para o parâmetro de modelo no seu código de produção. Para a maioria das equipes que executam uma carga de trabalho com LLM que já passou do protótipo para tráfego real, esse parâmetro é definido uma vez (geralmente para o modelo mais forte ao qual a equipe tinha acesso quando lançou) e nunca é revisitado. Cada consulta, independentemente da complexidade, vai para o mesmo modelo. E é aí que mora o estouro de custo silencioso.
Em qualquer carga de trabalho de produção não trivial, as consultas não são uniformemente difíceis. Um assistente de suporte ao cliente pode ver 80% das consultas que são pesquisas simples, classificações ou acompanhamentos curtos, e 20% que realmente exigem raciocínio de ponta. Um assistente de codificação pode lidar com um fluxo constante de pequenos refactors e uma cauda longa de mudanças arquitetônicas multi-arquivo. Um pipeline de conteúdo pode processar centenas de tarefas de sumarização para cada uma que precisa de escrita criativa estruturada. O formato do trabalho é desigual, mas o roteamento para o modelo não é.
Se você está executando 100M tokens por mês no GPT-5.5 hoje e 70% dessas consultas seriam respondidas igualmente bem por um modelo mais barato, você está pagando aproximadamente $600 por mês por capacidade que não está usando. Em volumes maiores, o mesmo padrão se compõe linearmente: para cada 1B tokens, a diferença entre uma configuração sem roteamento e uma roteada é de vários milhares de dólares por mês.
Roteamento é a resposta de engenharia para essa assimetria. O princípio é simples: envie cada consulta para o modelo mais barato que consegue lidar com ela e escale para um modelo mais capaz apenas quando necessário. As implementações são onde vivem as compensações interessantes, e a maioria das orientações publicadas as trata mal. Este texto cobre os três padrões que realmente funcionam em produção, a matemática de custos que faz o caso, os modos de falha que vão te pegar, e um playbook de migração para sair de uma configuração de modelo único para uma roteada sem reescrever seu aplicativo.
Os dados de preços nos quais este artigo se baseia vêm do texto complementar (a comparação de preços de APIs de LLM de 2026), que estabelece as tarifas por modelo referenciadas ao longo do texto. Onde este guia cita um valor de custo, ele é baseado nesses dados.
Os três padrões de roteamento que funcionam em produção
Há três padrões estabelecidos para rotear tráfego de LLM. Eles diferem em complexidade de implementação, sobrecarga de latência e nos tipos de economia de custos que desbloqueiam. A maioria dos sistemas de produção acaba usando uma combinação dos três; entender os pontos fortes de cada um ajuda a sequenciar o trabalho.
Padrão 1: Regras estáticas
O padrão mais simples. Você escreve regras que roteiam consultas para diferentes modelos com base em propriedades observáveis da requisição: comprimento da entrada, nível do usuário, tipo de consulta (se você já tem um classificador), endpoint da API ou lógica de negócios. Consultas curtas vão para um modelo barato; consultas longas vão para um modelo mais forte. Usuários do nível gratuito recebem um modelo mais barato do que usuários pagos. Solicitações de geração de código vão para um modelo ajustado para código; todo o resto vai para um modelo de uso geral.
O roteamento estático é previsível, depurável e adiciona essencialmente zero sobrecarga de latência: a decisão de roteamento são poucas linhas de código que executam localmente. O teto também é mais baixo: você está roteando com base em propriedades que pode observar antes do modelo rodar, o que significa que você não pode rotear com base em “quão difícil a consulta realmente é” porque você ainda não sabe. Para cargas de trabalho em que as propriedades de entrada se correlacionam bem com a dificuldade (documentos longos geralmente são mais difíceis; código geralmente é diferente de prosa; usuários pagos tipicamente têm consultas mais exigentes), regras estáticas podem capturar 30–50% das economias disponíveis com muito pouco esforço de engenharia.
Padrão 2: Cascata
O padrão mais amplamente aplicável. Você envia a consulta para um modelo barato primeiro; se a resposta atende a um limiar de qualidade, você a retorna; se não atende, você escala para um modelo mais capaz e usa a resposta dele. A economia de custo vem do fato de que, para as consultas que o modelo barato consegue resolver, você paga apenas o preço do modelo barato.
A característica distintiva do padrão de cascata é que a decisão de roteamento é informada pela saída do modelo, não apenas pela entrada: você deixa o modelo barato tentar o trabalho, então julga se a tentativa foi boa o suficiente. O julgamento pode ser implementado de várias formas: pontuações de confiança do próprio modelo, validação de saída estruturada (a resposta é analisável no esquema esperado?), prompts de autoavaliação (pedindo a um modelo pequeno se a resposta atende à pergunta) ou sinais de comportamento a jusante (o usuário aceitou a resposta ou reformulou e tentou novamente?).
Cascata é o padrão que a maioria dos sistemas de produção acaba adotando porque captura economias que regras estáticas não conseguem. A compensação é que, nas consultas que escalam, você paga tanto a chamada do modelo barato quanto a chamada do carro-chefe, então a economia depende de qual fração de consultas tem sucesso no nível do modelo barato. Este é o padrão que desenvolvemos em detalhe mais adiante neste artigo.
Padrão 3: Roteamento baseado em classificador
O teto mais alto e o maior investimento de engenharia. Um modelo pequeno e rápido (muitas vezes uma versão ajustada de um modelo não topo de linha, ou um classificador dedicado) olha para cada consulta de entrada e prevê qual modelo downstream deve tratá-la. O classificador pode decidir com base no tipo de consulta (“isso parece uma tarefa de geração de código; rotear para o modelo ajustado para código”), estimativa de dificuldade (“isso parece uma consulta de raciocínio difícil; rotear para GPT-5.5”) ou uma política de roteamento aprendida treinada em tráfego histórico e resultados.
O roteamento baseado em classificador pode superar a cascata porque a decisão de roteamento acontece antes de qualquer modelo caro rodar, então você não paga o “imposto do modelo barato” em consultas que sempre iriam precisar do carro-chefe. O custo é o trabalho de engenharia para construir, treinar e manter o próprio classificador, mais a pequena sobrecarga de latência da chamada de roteamento. Para cargas de trabalho de volume muito alto, essa compensação se paga; para cargas menores, geralmente não.
Qual padrão adotar primeiro: Regras estáticas primeiro se sua carga de trabalho tem sinais de roteamento óbvios (comprimento da entrada, nível do usuário, endpoint). Cascata se não tiver, ou depois que você esgotar as regras estáticas óbvias. Baseado em classificador apenas depois que tanto regras estáticas quanto cascata estiverem em vigor e o volume da carga de trabalho justificar o investimento de engenharia. Pular direto para o baseado em classificador é uma armadilha clássica de superengenharia da qual a maioria das equipes se arrepende.
O que medir antes de começar o roteamento
Você não pode otimizar o que não mede. Antes de introduzir qualquer lógica de roteamento em um sistema de produção, instrumente a carga de trabalho atual de modelo único para que você tenha uma linha de base para comparar. A instrumentação não precisa ser elaborada: um log básico de cada requisição com um pequeno conjunto de campos é suficiente para começar.
A instrumentação mínima útil:
- Per requisição: modelo usado, contagem de tokens de entrada, contagem de tokens de saída, custo (computado pelas contagens de tokens e pela tabela de preços), latência de ponta a ponta, status da resposta (sucesso / erro / parcial) e um rótulo de tipo de consulta se você tiver um.
- Por conversa ou por usuário: duração da sessão, contagem de tentativas (sinaliza que o usuário não aceitou a primeira resposta), taxa de acompanhamento (sinaliza que a resposta exigiu esclarecimento).
- Um conjunto de avaliação reservado: 100–500 consultas representativas que você possa reexecutar em qualquer modelo, com saídas de referência nas quais você confia. É assim que você mede se um modelo mais barato candidato produz qualidade aceitável na sua carga de trabalho. Sem isso, toda decisão de roteamento é palpite.
O conjunto de avaliação é onde a maioria das equipes subinveste, e é a peça de infraestrutura de maior alavancagem para qualquer projeto de roteamento. Ferramentas leves como Promptfoo ou Helicone evals podem colocá-lo de pé rapidamente; para cargas de trabalho em estágio inicial, um conjunto curado manualmente de 50 consultas com saídas avaliadas manualmente é suficiente para começar.
Uma vez instrumentado, execute a carga de trabalho como está por pelo menos uma semana para estabelecer a linha de base. O formato dos dados (quão enviesada é sua distribuição de comprimento de entrada, que fração de consultas é curta e simples, que fração parece difícil) indica com qual padrão de roteamento começar.
O padrão de cascata em detalhes, com matemática de custos
O padrão de cascata merece mais espaço porque é o mais amplamente aplicável e o que a maioria das equipes implementará primeiro ou segundo. A matemática também é onde o caso para o roteamento se torna concreto.
Considere uma carga de trabalho de produção representativa rodando em Claude Sonnet 4.6 hoje: 100 milhões de tokens por mês, 80% de entrada e 20% de saída, fatura mensal de $475 a preços de tabela. Suponha que introduzimos uma cascata à frente: as consultas atingem Claude Haiku 4.5 primeiro e só escalam para Sonnet 4.6 se a resposta do Haiku falhar em um check de qualidade. Haiku 4.5 lista $1.00 de entrada e $5.00 de saída por milhão de tokens, um terço da tarifa do Sonnet.
A matemática de custos depende de dois parâmetros: qual porcentagem de consultas tem sucesso no nível do Haiku (chamamos isso de taxa de sucesso) e como a relação entrada/saída difere entre consultas bem-sucedidas e escaladas. Por simplicidade, assuma que a relação entrada/saída é a mesma para ambos e que a taxa de sucesso é 70%, significando que a resposta do Haiku é boa o suficiente em 70% das consultas, e 30% escalam para o Sonnet.
| Cenário | Cálculo de custo | Fatura mensal | Economia |
|---|---|---|---|
| Modelo único: 100% Sonnet 4.6 | 100M tokens × tarifas Sonnet | $475 | n/a |
| Cascata: 70% Haiku, 30% Haiku→Sonnet | 100M Haiku + 30M Sonnet | $237 | 50% |
| Cascata com 80% de taxa de sucesso | 100M Haiku + 20M Sonnet | $190 | 60% |
| Cascata com 60% de taxa de sucesso | 100M Haiku + 40M Sonnet | $285 | 40% |
O que isso indica. Mesmo em uma taxa de sucesso moderada de 70% (ou seja, o Haiku acerta 7 em cada 10 vezes), a cascata corta a fatura pela metade. A razão é que a chamada do modelo barato é tão mais barata do que a chamada do carro-chefe que pagar por ambos nos 30% de consultas que escalam ainda é muito menos do que pagar pelo carro-chefe em toda consulta. O ponto de equilíbrio (quando a cascata iguala o custo do modelo único) é aproximadamente uma taxa de sucesso de 33%. Abaixo disso, é melhor ir direto; acima disso, a cascata vence.
A implementação mínima viável da cascata
Abaixo está a versão mais simples do padrão, expressa em Python com o cliente compatível com OpenAI (que funciona com qualquer provedor que exponha um endpoint compatível com OpenAI, incluindo Claude via a camada de compatibilidade da Anthropic, Gemini e o endpoint unificado da CometAPI). A estrutura é deliberadamente enxuta; implementações de produção adicionam observabilidade, tratamento de erros e verificações de qualidade mais sofisticadas.
from openai import OpenAI
import json
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.cometapi.com/v1", # or your provider of choice
)
CHEAP_MODEL = "claude-haiku-4-5"
FLAGSHIP_MODEL = "claude-sonnet-4-6"
def cascade(messages, output_schema=None):
"""
Run a query through a cascade.
Returns (response, model_used, escalated).
"""
# Step 1: try the cheap model
cheap_response = client.chat.completions.create(
model=CHEAP_MODEL,
messages=messages,
response_format=output_schema,
)
cheap_text = cheap_response.choices[0].message.content
# Step 2: judge whether the cheap response is good enough
if is_acceptable(cheap_text, output_schema):
return cheap_text, CHEAP_MODEL, False
# Step 3: escalate to the flagship
flagship_response = client.chat.completions.create(
model=FLAGSHIP_MODEL,
messages=messages,
response_format=output_schema,
)
flagship_text = flagship_response.choices[0].message.content
return flagship_text, FLAGSHIP_MODEL, True
def is_acceptable(response_text, output_schema=None):
"""
Quality gate.
Returns True if the cheap model's output is good enough.
"""
if not response_text or len(response_text.strip()) < 10:
return False
if output_schema:
# Structured output: it has to parse against the schema
try:
parsed = json.loads(response_text)
return validate_schema(parsed, output_schema)
except (json.JSONDecodeError, ValueError):
return False
# For free-form responses, plug in your own quality signal:
# - confidence score from the model
# - self-evaluation prompt to a small model
# - rules-based checks (length, format, refusal patterns)
return True
Este é um ponto de partida, não uma implementação finalizada. Três coisas que você adicionaria para produção:
- Um gate de qualidade de verdade. A função is_acceptable acima é intencionalmente mínima. Na prática, o gate é a peça mais importante da cascata: leniente demais e você entrega respostas de baixa qualidade; rígido demais e você escala com muita frequência e perde as economias. A maioria das cascatas em produção usa uma combinação de validação de saída estruturada, detecção de recusas (o modelo barato dizendo “não posso responder a isso”) e autoavaliação por um modelo pequeno instruído a avaliar a resposta.
- Observabilidade por requisição. Registre qual modelo foi usado, se a requisição escalou, a latência em cada nível e o custo. É isso que te diz, após uma semana rodando a cascata, se a taxa de sucesso é o que você supôs que fosse.
- Um caminho canário para avaliação. Envie uma pequena porcentagem do tráfego (digamos 5%) pelo carro-chefe mesmo quando a cascata tem sucesso no nível do modelo barato. Compare as respostas em uma tarefa de avaliação reservada. É assim que você detecta degradação silenciosa de qualidade; veja a próxima seção.
Onde o roteamento falha
A matemática de economia de custos acima é real, mas também é o caso otimista. Três modos de falha pegam as equipes, e nomeá-los honestamente é o que separa uma implementação de roteamento que gera valor composto de uma que degrada o produto silenciosamente.
Sobrecarga de latência em requisições escaladas
Quando uma consulta escala, você paga pela chamada do modelo barato antes que a chamada do modelo carro-chefe comece. Se o modelo barato leva 800ms e o carro-chefe leva 1,5s, a consulta escalada leva 2,3s de ponta a ponta. Para cargas de trabalho sensíveis à latência, isso importa. As mitigações são escolher um modelo barato rápido (Haiku 4.5 e Gemini 3 Flash são projetados para isso), definir timeouts agressivos na chamada do modelo barato e considerar chamadas em paralelo para as consultas que você suspeita que têm maior probabilidade de escalar. Algumas equipes aceitam o custo de latência porque a economia em dólares é grande; outras usam regras estáticas para evitar enviar consultas obviamente difíceis pela cascata.
Degradação silenciosa da qualidade
O modo de falha mais insidioso. O modelo barato produz respostas que passam pelo seu gate de qualidade, mas são sutilmente piores do que as respostas do carro-chefe: ligeiramente menos precisas, ligeiramente menos úteis, ligeiramente mais propensas a perder casos extremos. Os usuários não reclamam imediatamente; a métrica que você observa (latência de resposta, taxa de erro, taxa de aprovação no gate) parece ok; mas métricas a jusante (retenção de usuários, taxa de conversão, escaladas de suporte) derivam. Quando você percebe, já entregou semanas de qualidade degradada.
A defesa é o caminho canário mencionado acima: uma porcentagem reservada do tráfego que roda pelo carro-chefe em paralelo com a cascata, com ambas as respostas avaliadas contra um rubric de avaliação. A avaliação pode ser feita por um próprio modelo (LLM como juiz) ou por revisão humana amostral. O ponto é manter um sinal contínuo de qualidade que seja independente do gate da própria cascata, de modo que a degradação apareça como uma deriva nesse sinal em vez de uma surpresa a jusante.
Custo de complexidade em código e observabilidade
Cada modelo adicional no grafo de roteamento é mais um modelo para avaliar, monitorar e atualizar quando seu provedor lança uma nova versão. Uma cascata de dois níveis é administrável; um roteador baseado em classificador com cinco modelos e caminhos separados para código, RAG, chat, agentes e casos de borda é significativamente mais complexo do que a configuração de modelo único que substituiu. A complexidade vale a pena quando o volume da carga de trabalho justifica; abaixo desse volume, o tempo de engenharia gasto na manutenção da camada de roteamento pode exceder as economias de custo que ela produz. Seja honesto sobre seu limiar de volume.
Como os agregadores ajudam (e onde não ajudam)
Agregadores de LLM (serviços que expõem múltiplos modelos por trás de uma única API compatível com OpenAI) interagem com o roteamento de duas formas distintas. Ambas valem ser entendidas porque a resposta para “quero um agregador na minha pilha de roteamento?” depende de qual interação você prioriza.
A ajuda genuína: removendo o custo de integração
Construir uma cascata ou um roteador baseado em classificador em APIs de provedores diretos significa gerenciar vários SDKs, várias credenciais de autenticação, múltiplas superfícies de cobrança e vários conjuntos de peculiaridades específicas de cada provedor (comportamento de timeout, formatos de erro, semântica de rate limit). Para uma configuração de roteamento multimodelo, essa sobrecarga é real. Um agregador como a CometAPI expõe todos os modelos por trás de um único endpoint compatível com OpenAI, o que significa que a mudança de código para roteamento é apenas alterar o parâmetro de modelo, sem troca de provedor, sem chaves separadas, sem camada separada de observabilidade. Para equipes cujo obstáculo primário ao roteamento é o custo de integração, e não o custo de avaliação de qualidade, isso é decisivo.
O ponto de atenção: camadas de roteamento embutidas
Alguns agregadores oferecem um recurso de “smart routing” ou “model optimiser” que escolhe o modelo para você com base na consulta. Isso pode ser útil para prototipagem, mas geralmente é a escolha errada para produção. A razão é que a decisão de roteamento é uma das coisas mais específicas da sua carga: o que conta como “difícil o suficiente para escalar” depende dos seus critérios de avaliação, do seu orçamento de latência, da sua barra de qualidade e do seu teto de custo. Uma camada de roteamento genérica não pode saber nada disso. A maioria dos sistemas de produção se beneficia mais de um agregador fino e transparente (que expõe os mesmos modelos que você acessaria diretamente, com uma credencial e uma fatura) mais sua própria lógica de roteamento por cima, do que de uma camada de roteamento de caixa-preta que não podem ajustar.
O playbook de migração
Um caminho seguro e passo a passo de uma carga de trabalho de produção de modelo único para uma roteada. O princípio ao longo de tudo é fazer mudanças individualmente reversíveis e medir o impacto de cada mudança antes de fazer a próxima.
- Instrua a carga de trabalho atual. Registre cada requisição com modelo, tokens de entrada/saída, custo, latência e um rótulo de tipo de consulta. Rode por no mínimo uma semana para estabelecer uma linha de base. Sem isso, cada passo subsequente é palpite.
- Construa o conjunto de avaliação. Curadoria de 100–500 consultas representativas com saídas de referência nas quais você confia. Este é o conjunto reservado que você usará para comparar a cascata com a linha de base de modelo único em cada etapa.
- Identifique o tipo de consulta de maior volume. A partir dos dados instrumentados, encontre a categoria de consulta que responde pela maior parte do tráfego. É onde você vai pilotar a cascata. Não precisa ser a categoria mais fácil, apenas a de maior volume, porque é onde as economias se concentram.
- Construa um protótipo de cascata para esse único tipo de consulta. Dois níveis: modelo barato primeiro, carro-chefe se falhar no gate de qualidade. Rode primeiro no conjunto de avaliação. Compare custo e qualidade com a linha de base de modelo único. Se a qualidade se mantiver e o custo cair, prossiga; se a qualidade cair, aperte o gate e tente novamente.
- Faça rollout por porcentagem de tráfego. Comece com 5–10% do tráfego de produção para o tipo de consulta escolhido. Rode por pelo menos uma semana. Monitore a taxa de escalada da cascata, o custo por requisição, a latência em cada nível e a comparação de qualidade do caminho canário. Se as métricas corresponderem à previsão do protótipo, expanda para 25%, depois 50%, depois 100%.
- Repita para o próximo tipo de consulta. Uma vez que o primeiro tipo de consulta esteja totalmente migrado e a economia de custo realizada, avance para a próxima categoria de maior volume. Cada cascata é uma decisão separada; não assuma que um padrão que funcionou para um tipo de consulta funcionará para outro.
- Adicione um canário de qualidade contínuo. Quando múltiplos tipos de consulta estiverem rodando em cascatas, configure o caminho canário reservado permanentemente, com 5% do tráfego rodando pelo carro-chefe para avaliação. Este é seu sistema de alerta precoce para degradação silenciosa, e é o que mantém a camada de roteamento confiável à medida que os modelos são atualizados.
Quando o roteamento não vale a pena
Reconhecimento honesto. Existem cargas de trabalho nas quais o investimento de engenharia em roteamento não se paga, e reconhecê-las de antemão economiza tempo:
- Cargas de trabalho de modelo único onde um modelo é genuinamente a resposta certa para tudo. Se o seu conjunto de avaliação mostra uma queda significativa de qualidade no nível do modelo barato em toda a carga de trabalho, a cascata não tem com o que trabalhar. Uma carga de trabalho de geração de código limitada por capacidade de raciocínio é um exemplo: Haiku falhará no gate com muita frequência para a cascata economizar dinheiro.
- Cargas de trabalho de volume muito baixo. Abaixo de aproximadamente $200/mês de gasto com LLM, o tempo de engenharia gasto construindo e mantendo a camada de roteamento tipicamente excede as economias. O limiar é específico da carga, mas é real. Seja honesto sobre se seu gasto é alto o suficiente para justificar o trabalho.
- Ambientes regulados onde o fornecedor de registro importa. Se sua postura de compliance exige que todo o tráfego de produção flua por um relacionamento específico de provedor, o roteamento multimodelo complica essa conversa. Ainda podem existir opções de roteamento dentro do mesmo provedor (Sonnet → Opus na Anthropic; GPT-5 nano → GPT-5.5 na OpenAI), mas o roteamento entre provedores é mais difícil de justificar.
O enquadramento honesto: o roteamento se paga quando sua carga de trabalho tem alto volume, suas consultas não são uniformemente difíceis e você tem a infraestrutura de avaliação para saber quando a cascata está produzindo qualidade aceitável. A maioria das cargas de produção em qualquer escala significativa corresponde a essa descrição; algumas não, e entregam mais rápido mantendo um único modelo. Ambas as escolhas são defensáveis.
Para onde ir a seguir: Se você ainda não percorreu a tabela de tarifas por modelo na qual este artigo se baseia, o texto complementar, A Comparação de Preços de APIs de LLM 2026: GPT-5.5, Claude Sonnet 4.6, Gemini 3.5 Flash e DeepSeek V4, é a base. Os dados de preços lá são o que torna a matemática de custos deste guia concreta para a sua carga de trabalho específica.
