O que é Introduzir Cascata de Modelos?
Introduzir Cascata de Modelos (Introduce Model Cascade) é uma refatoração de IA para sistemas com LLM, do grupo Operação. Tentar primeiro com um modelo barato e subir só quando a confiança for baixa.
Introduce Model Cascade
Introduzir Cascata de Modelos (Introduce Model Cascade) é uma refatoração de IA para sistemas com LLM, do grupo Operação. Tentar primeiro com um modelo barato e subir só quando a confiança for baixa.
Todo pedido usa o modelo mais caro, inclusive os fáceis, e não há teto de gasto. É o smell Custo Sem Teto, no caso de volume alto.
Tente primeiro um modelo mais barato e suba para um maior só quando um critério verificável indicar que a resposta barata não serve. Antes de montar a cascata, meça também a alternativa mais simples: o mesmo modelo capaz, com esforço de raciocínio menor.
-def triage(ticket):
- return llm_parse(TRIAGE_PROMPT, ticket, schema=Triage, model="large")
+TIERS = [("small", 0.85), ("large", 0.60)] # limiares calibrados no eval
+
+def triage(ticket):
+ for model, min_conf in TIERS:
+ t = llm_parse(TRIAGE_PROMPT, ticket, schema=Triage, model=model)
+ trace.set("cascade.tier", model)
+ if valid(t) and t.confidence >= min_conf: # validação em código + confiança
+ return t
+ return human_queue(ticket)
Antes: o modelo grande em tudo.
flowchart LR
IN(["1. Ticket"]):::io --> L(["2. Modelo grande"]):::llm
L --> OUT(["3. Classificação"]):::io
Depois: o barato primeiro, o grande quando preciso.
flowchart LR
IN(["1. Ticket"]):::io --> S(["2. Modelo pequeno"]):::llm
S --> C{"3. Válido e confiante?"}
C -->|sim| OUT(["5. Classificação"]):::io
C -->|não| L(["4. Modelo grande"]):::llm
L --> OUT
Imagine o atendimento de um marketplace brasileiro. Chegam milhares de tickets por dia: “cadê meu pedido”, troca, boleto, contestação de Pix. A triagem precisa de fila, prioridade e produto.
No eval, o modelo grande acerta 94% no geral. O pequeno acerta 89%. A diferença parece pequena até você abrir por tipo:
| Tipo (exemplo) | Volume | Pequeno acerta | Grande acerta |
|---|---|---|---|
| Rastreio e prazo | alto | 97% | 98% |
| Troca e devolução | médio | 88% | 93% |
| Pix e chargeback | baixo | 71% | 92% |
Quase todo o volume está nas duas primeiras linhas. Pagar o modelo grande em rastreio compra 1 ponto percentual. Em Pix e chargeback, o mesmo dinheiro compra 21 pontos.
A cascata, neste exemplo, fica assim. O pequeno tenta. O código valida o schema (fila conhecida, prioridade na lista, produto existente). Se a validação passa e a confiança calibrada passa do limiar, a triagem sai. O resto sobe. Chargeback com texto longo pode ter uma regra barata que manda direto ao grande, sem gastar a primeira chamada.
Suponha 10 mil tickets por dia e que o grande custe cerca de 10 vezes o pequeno por chamada. Se 80% ficam no pequeno, o custo diário cai para cerca de 28% do “grande em tudo”, e você ainda paga o grande nos 20% difíceis. Esses números são ilustrativos: rode a conta com o preço e o volume do seu provedor.
O paper FrugalGPT (Chen, Zaharia e Zou, 2023) documenta a mesma ideia com encadeamento de modelos de APIs diferentes: tentar o barato e subir só quando a resposta não atinge um limiar de qualidade. A lição que importa aqui é a mesma. O ganho vem da fração que não sobe, não do modelo extra.
Em cargas de alto volume, a maioria das entradas costuma ser fácil, e qualquer modelo competente acerta. Pagar o modelo maior nessas entradas é custo sem ganho. A cascata reserva o modelo caro para a fração difícil.
O critério é o que faz a cascata funcionar ou falhar. Validação em código (schema, regra de negócio) é o mais confiável. Confiança declarada pelo modelo é útil só depois de calibrada no eval: se o pequeno diz 90% e acerta 70%, o limiar precisa subir. O padrão de destino é a Cascata de Modelos.
Antes da cascata, rode o mesmo modelo capaz com esforço de raciocínio menor. Vários provedores expõem isso como “effort”, “thinking” ou um flag de raciocínio. Se essa versão empatar em qualidade e custo com a cascata, fique com um modelo só.
Um modelo só é mais fácil de manter. O cache de prompt não se divide. O trace tem um degrau, não dois. A cascata só vale quando o eval mostrar que dois modelos, com um critério de subida, ganham dessa alternativa.
Separe o dataset do degrau barato em faixas: confiança abaixo de 0,6, de 0,6 a 0,8, acima de 0,8. Em cada faixa, meça a acurácia real.
O limiar útil é o ponto em que a faixa começa a acertar o bastante para o produto. Se a faixa “acima de 0,8” acerta 96% e a “de 0,6 a 0,8” acerta 74%, um corte perto de 0,8 faz sentido. Se todas as faixas acertam parecido, a confiança não carrega informação. Aí o critério precisa ser outra coisa: tamanho do texto, presença de um CNPJ, regra de negócio que falhou.
Nunca escolha 0,7 porque “parece razoável”. Esse número só existe depois do eval.
Um time coloca o modelo pequeno na frente, sobe em qualquer dúvida, e 95% dos pedidos vão ao grande. No trace, “cascata” aparece em todo span. No custo, a conta ficou pior: uma chamada extra em quase tudo, mais o grande.
Isso não é cascata. É o modelo grande com um pedágio na frente. A métrica que denuncia: fração que sobe. Se ela passa de, digamos, dois terços no seu volume, volte ao eval e afrouxe o critério, ou desista da cascata.
O eval mostra: o modelo pequeno acerta 96% dos tickets curtos e 71% dos tickets com mais de 300 palavras. O grande acerta 97% e 93%. Como você desenharia a cascata?
Use uma regra de roteamento barata antes da cascata: tickets com mais de 300 palavras vão direto ao modelo grande, porque o pequeno erra demais neles. Tickets curtos vão ao pequeno, com validação em código e confiança calibrada para subir os casos duvidosos. Confira no eval a acurácia final por faixa de tamanho e o custo total contra a versão “grande em tudo”.
Introduzir Cascata de Modelos (Introduce Model Cascade) é uma refatoração de IA para sistemas com LLM, do grupo Operação. Tentar primeiro com um modelo barato e subir só quando a confiança for baixa.
Trata Custo Sem Teto.
Ao padrão de projeto Cascata de Modelos.