O que é Adicionar Caminho de Fallback?
Adicionar Caminho de Fallback (Add Fallback Path) é uma refatoração de IA para sistemas com LLM, do grupo Segurança e confiabilidade. Definir o que fazer quando o modelo, a ferramenta ou o provedor falham.
Add Fallback Path
Adicionar Caminho de Fallback (Add Fallback Path) é uma refatoração de IA para sistemas com LLM, do grupo Segurança e confiabilidade. Definir o que fazer quando o modelo, a ferramenta ou o provedor falham.
Às 14h, o provedor do modelo principal começa a devolver 503. O bot de voz de um banco não tem segundo caminho. Cada ligação cai no silêncio depois de quatro segundos. O call center lotou. Quando o modelo, a ferramenta ou o provedor falha ou fica lento, o produto inteiro para junto, e ninguém definiu o que deveria acontecer. É o smell Refém de um Provedor.
Defina, para cada dependência, o que acontece quando ela falha: timeout curto, um caminho alternativo já avaliado (outro modelo, outro provedor, uma resposta fixa, uma fila, uma pessoa) e um disjuntor que para de insistir num serviço que está fora.
-def answer(call):
- reply = client.messages.create(model=PRIMARY, messages=call.messages)
- return speak(reply)
+def answer(call):
+ if breaker.is_open("primary"): # disjuntor aberto: nem tenta
+ return fallback(call)
+ try:
+ reply = client.with_options(timeout=2.5, max_retries=0).messages.create(
+ model=PRIMARY, messages=call.messages, max_tokens=400)
+ breaker.record_success("primary")
+ return speak(reply)
+ except (APITimeoutError, APIConnectionError, InternalServerError, RateLimitError):
+ breaker.record_failure("primary")
+ return fallback(call)
+
+def fallback(call):
+ reply = backup_client.create(model=BACKUP, prompt=BACKUP_PROMPT, ...) # avaliado no eval
+ if reply is None:
+ return speak_fixed("Vou transferir você para um atendente.") or transfer(call)
+ return speak(reply)
Antes: um caminho só.
flowchart LR
C(["1. Ligação"]):::io --> P(["2. Modelo principal"]):::llm
P -->|"falha ou lentidão"| X(["3. Silêncio e queda"]):::io
Depois: timeout, disjuntor e degraus de fallback.
flowchart LR
C(["1. Ligação"]):::io --> B{"2. Disjuntor aberto?"}
B -->|não| P(["3. Modelo principal, timeout curto"]):::llm
B -->|sim| F(["4. Modelo reserva"]):::llm
P -->|"erro ou timeout"| F
F -->|"também falhou"| H((("5. Atendente humano"))):::human
P --> OUT(["Resposta"]):::io
F --> OUT
Falhas de provedor são raras, mas certas. As páginas de status dos grandes provedores registram incidentes públicos com alguma frequência. Sem um plano, cada falha vira uma decisão manual, tomada tarde e sob pressão. Com um plano em código, a troca acontece em segundos e do mesmo jeito toda vez.
As três peças se completam. O timeout curto impede que requisições presas consumam todos os recursos. O disjuntor evita insistir num serviço que está fora, o que piora a falha e atrasa a recuperação. O fallback avaliado garante que o caminho alternativo funciona antes de ser necessário.
Produto: URA de banco no telefone, pausa máxima que o cliente tolera cerca de 3 segundos. SDK padrão espera 10 minutos e faz 2 retries. Sem mexer nisso, uma lentidão do provedor segura 200 ligações simultâneas até o timeout.
Configuração: timeout=2.5, max_retries=0. Disjuntor abre depois de 5 falhas em 30 segundos. Fallback: modelo de outro provedor, com prompt próprio. Suponha que o eval mostre o reserva uns 4 pontos abaixo do principal na classificação de intenção. Terceiro degrau: frase fixa e transferência ao atendente.
Às 14h o principal devolve 503. As primeiras 5 ligações falham em 2,5s e caem no reserva. O disjuntor abre. As seguintes nem tentam o principal. O call center recebe só o que o reserva também não cobriu. Sem o plano, todas as ligações iam ao silêncio.
gpt-4o e gpt-4o-mini caem juntos quando a API daquele provedor, naquela região, está fora. Diversifique provedor ou região quando o produto não pode parar. Se não puder, o último degrau não pode ser modelo: frase fixa, fila, pessoa.
Outra armadilha: fallback que ninguém rodou no eval. Formato diferente, tom diferente, ferramenta com nome antigo. O dia da queda é a primeira vez que aquele prompt vê produção.
Um gerador de relatórios noturno usa um modelo para resumir vendas. Se o provedor cair, o relatório não sai. Que fallback faz sentido aqui?
Para uma tarefa assíncrona, o fallback mais simples é tempo: retry com espera crescente por algumas horas, só para erros transitórios, e alerta se não concluir até um horário limite. Se o relatório precisa sair de qualquer jeito, um segundo degrau pode gerar uma versão sem resumo (só as tabelas calculadas em código), marcada como incompleta. Modelo reserva só se o eval mostrar que ele resume bem.
Adicionar Caminho de Fallback (Add Fallback Path) é uma refatoração de IA para sistemas com LLM, do grupo Segurança e confiabilidade. Definir o que fazer quando o modelo, a ferramenta ou o provedor falham.
Trata Refém de um Provedor.
Ao padrão de projeto Modelo Reserva e Disjuntor.