Solução de Problemas do AI Ops
Esta página cobre as questões mais comuns do AI Ops e como resolvê-las.
O heat map está vazio
Sintoma: /dashboard/analytics/heat-maps carrega, mas nenhum polígono de hex é desenhado.
Verifique na ordem:
-
ai_ops_enabledestátrueno subaccount? Se forfalse, nenhum cron roda para ele. Defina comotruee aguarde um ciclo. -
O backfill foi executado? Subaccount novo não tem previsões até o backfill inicial. Rode:
curl -X POST "https://fleets.levyelectric.com/api/internal/forecast/backfill" \ -H "Authorization: Bearer $AI_OPS_INTERNAL_TOKEN" \ -d '{"subaccountId":"<uuid>"}' -
O subaccount tem pelo menos 14 dias de histórico de corridas? Sem isso, o modelo não consegue ajustar uma previsão por subaccount. Verifique a contagem de corridas.
-
O cron de inferência rodou recentemente? Olhe
demand_forecasts.created_atpara o subaccount. Se a linha mais recente tem mais de 2 horas, o cron está travado.
O banner "Forecast may be stale" está aparecendo
Sintoma: Banner amarelo na página de heat maps com "Forecast may be stale — last refresh was X minutes ago."
O banner aparece quando a previsão mais recente tem mais de 90 minutos. Causas:
- O cron de inferência (
/api/cron/ai-ops-run-inference) está falhando. Veja os logs de cron no Vercel. - A Modal está fora e o forecaster local em fallback estoura tempo num subaccount grande.
- O construtor de features (
/api/cron/ai-ops-build-features) não está produzindo linhas, então a inferência não tem o que consumir.
Diagnostique pela tabela model_runs. Se há entradas em model_runs mas não em demand_forecasts, a inferência está rodando mas as gravações falham — verifique a conexão com o banco.
Nenhuma recomendação de rebalanceamento aparece
Sintoma: /dashboard/operations/rebalance está vazio.
Verifique na ordem:
ai_ops_tierestá emproouenterprise? O nível Starter não gera recomendações.- O cron do recomendador já rodou? Ele roda no minuto 25 de cada hora. Aguarde um ciclo após definir
ai_ops_tier. - Existem hexes candidatos? O recomendador precisa de um hex subabastecido (previsão > fornecimento) e um hex superabastecido (fornecimento > previsão) no mesmo subaccount. Se sua frota está bem distribuída, nenhuma recomendação é gerada — comportamento correto.
- O ganho projetado é positivo? Cada candidato é descartado se
(dest_gain - src_loss) * avg_fare - distance * tech_cost_per_mile_usdficar negativo. Umtech_cost_per_mile_usdalto pode suprimir todas as recomendações.
Se suspeitar que a matemática está conservadora demais, reduza temporariamente tech_cost_per_mile_usd para 0.25 e aguarde a próxima execução do cron.
Todos os veículos foram para maintenance sem motivo aparente
Sintoma: Vários veículos em um subaccount foram para maintenance e você não fez isso.
É a regra de auto-manutenção em ação — a Fase 3 marca cada veículo de parada pickup como maintenance quando um técnico aceita uma rota. É intencional, mas limitada:
- Só ocorre quando
ai_ops_tier='enterprise'. - Só ocorre depois que o técnico toca em Accept numa rota
planned. - Reverte automaticamente quando a rota é concluída ou abandonada.
Para desativar, rebaixe o subaccount para ai_ops_tier='pro'. Rotas deixam de ser geradas e a regra não se aplica.
Para resgatar veículos presos agora, encontre a rota em rebalance_routes (status in_progress) e abandone-a. Os veículos em auto-manutenção voltam a available.
A aba Route do técnico está vazia
Sintoma: O técnico abre a aba Route, mas nenhuma rota é exibida.
Verifique na ordem:
- O subaccount está em
ai_ops_tier='enterprise'? Caso contrário, nenhuma rota é gerada. - O técnico está logado no subaccount correto? A aba é scoped por subaccount.
- O cron do solver de rotas rodou hoje? Ele roda a cada 30 min, entre 06:00 e 22:00 (horário local). Fora desse intervalo, nenhuma rota nova é construída.
- Existem paradas a rotear? O solver precisa de pelo menos um veículo com bateria baixa ou uma recomendação aceita para produzir uma rota. Se a frota está saudável e nenhuma recomendação foi aceita, nenhuma rota é construída.
- O técnico está atribuído ao turno de hoje? Rotas são por técnico — só aparecem rotas atribuídas a esse
technician_id.
Conclusões offline nunca sincronizam
Sintoma: Um técnico concluiu paradas sem sinal, voltou a ficar online, e as paradas continuam "pending sync."
A operator-app esvazia a fila offline a cada evento de foco e a cada 60 segundos. Se a sincronização falha por vários minutos:
- Pull-to-refresh na aba Route força a sync.
- Force-close e reabra o app.
- Confira se a sessão de auth do técnico não expirou. Se necessário, faça login novamente.
Se a API retorna 4xx em chamadas complete-stop, veja o Sentry para o ID da rota — em geral, a causa é a rota ter sido abandonada nesse meio-tempo.
Recomendações parecem visivelmente erradas
Sintoma: O recomendador sugere mover veículos para um hex que você sabe estar inutilizável (rua fechada, problema de licença etc.).
O modelo não conhece fechamentos de rua nem restrições regulatórias. Dois caminhos:
- Dispensar a recomendação. O modelo aprende com padrões de dismiss — dismissals repetidos do mesmo hex de destino reduzem a confiança futura ali.
- Usar zonas de estacionamento. Se um hex está fora de qualquer zona de estacionamento válida, o fornecimento não se acumula ali e o recomendador deixa de sugerir movimentos para esse destino. Mantenha sua geometria de zonas refletindo a realidade operacional.
Pico de custo na Modal
Sintoma: Alerta de cobrança da Modal disparou.
O retreinamento noturno em todos os subaccounts deve custar ~US$ 15-30/mês na nossa escala. Picos costumam significar:
- Um subaccount com volume de features anormalmente grande domina o tempo de treino.
- A Modal escalou mais contêineres automaticamente do que o esperado.
Inspecione a tabela model_runs em busca de linhas com duration_ms excepcionalmente longas. Faça cap ou shard do subaccount afetado no script de treino.
Onde buscar ajuda
- Sentry — a maioria dos erros do AI Ops é taggeada com
ai-ops. Filtre por essa tag. - Logs de cron no Vercel — confira o status de execução dos cinco crons do AI Ops.
- Tabela
model_runs— linha de auditoria por chamada de inferência, com MAPE, RMSE e duração. - Suporte — escreva para support@levyelectric.com.