Como cortamos custo de inferência do Claude em 60% com roteamento
Haiku para o tool loop, Sonnet só para a síntese final. Prompt caching agressivo. Numbers reais do que mudou no custo do demo da Zechim.
por Jonatas Zechim
Versão 1 do nosso demo da Acme Store usava Sonnet 4.5 pra tudo. Cada conversa era uma série de chamadas pro Sonnet: pra raciocinar, pra escolher tool, pra interpretar o retorno, pra sintetizar a resposta final.
Custou caro. Não em valor absoluto (o demo é pequeno), mas como sinal: se a gente roda assim em produção pra um cliente com volume, a conta sobe rápido.
Refatoramos o agente pra rotear entre modelos. Hoje a maioria do tráfego usa Haiku 4.5; só a síntese final usa Sonnet 4.5 quando vale. Custo por conversa caiu ~60%. UX percebida ficou IGUAL ou um pouco melhor (Haiku é mais rápido).
Esse post é sobre como.
O que muda quando você roteia
Numa conversa típica do agente sobre dados, tem 3-5 chamadas ao modelo:
- Decisão inicial: "Que tool eu chamo?" - geralmente trivial
- Geração da SQL: o modelo escreve o SELECT
- Interpretação do resultado: olhar as 10 linhas que voltaram
- Síntese da resposta final: explicar pro usuário
Os passos 1, 2 e 3 funcionam excelentes no Haiku. Eles são tarefas relativamente mecânicas. O Haiku 4.5 não fica atrás do Sonnet num SELECT bem instruído por system prompt.
O passo 4 - a síntese - é onde o Sonnet faz diferença real. Quando você quer parágrafos elegantes, tom adaptado ao usuário, comparações com contexto. Lá vale.
A regra: Haiku no tool loop, Sonnet só quando precisar de prosa de qualidade. Que normalmente é o último passo.
Como decidir qual modelo usar
O método grosso que usamos:
Use Haiku se:
- A tarefa é classificação / extração estruturada
- A tarefa é gerar código que vai ser executado por outro sistema
- O output vai ser PARSED, não LIDO
- O contexto cabe em menos de 8k tokens
Use Sonnet se:
- O output vai diretamente pra um humano ler
- Precisa de raciocínio em múltiplas etapas dentro do MESMO turno
- Precisa de qualidade de prosa
- Contexto longo (>20k tokens) com referências cruzadas
Na prática, num agente com tool use, isso significa:
- Tool loop (decidir tool + montar argumentos + interpretar return) = Haiku
- Síntese final pro usuário = Sonnet
- Em casos simples (resposta de uma linha, sem dados pesados) = Haiku faz tudo
Implementação
A Vercel AI SDK não tem um "model router" nativo, mas dá pra fazer manual. Pseudo-código:
// Pass 1: Haiku decides + runs tools
const toolResult = await generateText({
model: anthropic('claude-haiku-4-5'),
messages,
tools,
stopWhen: ({ steps }) => steps.length >= 6,
})
// Pass 2: Sonnet writes the final response based on tool outputs
const finalResult = await streamText({
model: anthropic('claude-sonnet-4-5'),
messages: [
...messages,
{ role: 'assistant', content: toolResult.text },
{ role: 'user', content: 'Summarize this for the user in clear, friendly prose.' }
],
})
Na prática a gente nem sempre faz o segundo pass. Pra perguntas simples, o output do Haiku já está bom. O Sonnet só entra quando o número de tool calls foi alto, ou o resultado tem múltiplas linhas que precisam de explicação narrativa.
Prompt caching: o segundo ganho
Outro corte de custo: caching de prompt no Anthropic. O system prompt do nosso agente tem ~3000 tokens (descrição de schema, regras de comportamento, exemplos). Sem caching, esses 3000 tokens entram FULL PRICE em cada chamada.
Com caching ativado:
{
role: 'system',
content: [
{
type: 'text',
text: SYSTEM_PROMPT,
cache_control: { type: 'ephemeral' }
}
]
}
Anthropic cobra ~10% do custo normal pra tokens cacheados. Em conversas com múltiplos turnos, o system prompt é lido várias vezes; em todas exceto a primeira, ele sai a 10%. Em conversas longas, isso domina o cálculo.
Combinado com o roteamento Haiku/Sonnet, a conta caiu de algo como $0.012 por conversa pra ~$0.005. Sessenta por cento de redução, mesma UX (na verdade um pouco mais rápida).
Quando NÃO rotear
Roteamento adiciona complexidade. Tem casos onde não vale:
- Volume baixo: se você roda 100 conversas por mês, o ganho absoluto é pequeno. Use Sonnet pra tudo, ganhe tempo de engenharia.
- Latência crítica: cada modelo trocado é uma chamada HTTP a mais. Pra UX abaixo de 500ms, fique num modelo só.
- Resposta tem que ser perfeita sempre: produto financeiro, médico, legal. Aí o "Haiku é quase igual" não dá conta. Sonnet sempre.
A maioria dos casos B2B com volume médio cai no sweet spot do roteamento.
Números do demo
Stats reais do demo público (Acme Store) no último mês:
- Conversas: ~400
- Chamadas ao modelo por conversa (média): 3.2
- Custo por conversa antes do roteamento (Sonnet em tudo): ~$0.012
- Custo por conversa hoje (Haiku no loop, Sonnet só na síntese quando ativada): ~$0.005
- Latência percebida: ligeiramente menor (Haiku stream é mais rápido)
- Qualidade percebida: igual nos casos testados, melhor em casos onde Haiku é mais conciso
Em produção de cliente o ganho compõe pesado. 60% × 10x o volume × 12 meses = orçamento de IA do ano.
Se você roda agentes em produção e nunca olhou o breakdown de custo por modelo, vale uma conversa. Otimização de custo de inferência é um dos primeiros lugares onde a gente entra em times que já têm IA rodando.