E19 · Os dois alertas
10 minRode o ensaio.
Pronto quando: ALERTA: ciclo 3 usou 88% do teto, ALERTA: 3 erros seguidos iguais e saída: 1.
Aula 7 · 18 min
Um loop que roda sozinho precisa deixar rastro: quanto tempo cada ciclo levou, quantos tokens gastou, o que decidiu e por quê. Sem isso, um laço de erro ou um ciclo que estoura a cota só aparece na fatura do fim do mês. Nesta aula você grava uma linha por ciclo e tira dela custo por ciclo, custo por keep e os alertas.
Começar a aula
Objetivo: gravar um rastro por ciclo (tempo, tokens, veredito) e tirar dele custo por ciclo, custo por keep e os alertas do meta-agente.
O mesmo papel do Meta-agente do LOOP-R: observa o sistema, não o problema, e só relata. Clique em cada bloco.
O alerta não para o loop: quem para é o teto do curso 2 (loop-longrun.sh) ou a pessoa. Aqui, a leitura do rastro.
Agentes falsos com tokens inventados: um ciclo caro e três falhas iguais (como um agente sem resposta por limite da sessão).
K=~/projetos/loop-r-eng-aprende-v72/kit
E=${TMPDIR:-/tmp}/ensaio-aprende/a7; rm -rf $E; mkdir -p $E
bash $K/novo-sistema.sh $E/sis > /dev/null; export RASTRO=$E/rastros.jsonl
c() { TOKENS_FALSOS="$2" AGENTE="bash $K/agente-falso.sh $1" bash $K/experimento.sh $E/sis "$1" > /dev/null; }
c comenta "8000 500"; c sinonimos "9000 700"; c estraga "41000 3000" # tokens inventados para o ensaio
c falha "0 0"; c falha "0 0"; c falha "0 0"
echo "## uma linha do rastro"; sed -n 2p $RASTRO
echo "## custo por ciclo"; python3 $K/custo-ciclo.py $RASTRO --teto 50000; echo "saída: $?"## uma linha do rastro
{"ciclo": 2, "descricao": "sinonimos", "segundos": 0, "tokens_entrada": 9000, "tokens_saida": 700, "status": "keep", "motivo": "melhorou"}
## custo por ciclo
ciclo status segundos tokens(ent+saída) motivo
1 discard 0 8500 não melhorou
2 keep 0 9700 melhorou
3 discard 0 44000 não melhorou
4 erro 0 0 agente falhou (saída 1): ERRO: sem resposta do m
5 erro 0 0 agente falhou (saída 1): ERRO: sem resposta do m
6 erro 0 0 agente falhou (saída 1): ERRO: sem resposta do m
total: 6 ciclos · 1 keep · 62200 tokens
custo por keep: 62200 tokens
ALERTA: ciclo 3 usou 88% do teto de 50000 tokens
ALERTA: 3 erros seguidos iguais: agente falhou (saída 1): ERRO: sem resposta do modelo (limit
saída: 1Os tokens deste ensaio são inventados (variável TOKENS_FALSOS); tempo, status e alertas são do script de verdade. O laço de erro é o caso que mais custa sem aparecer: no curso 1, o juiz real parou no limite da sessão a partir da 16ª chamada.
O agente-claude.sh pede ao claude -p --output-format json e escreve no rastro a soma de entrada (com cache) e a saída. Uma chamada pela assinatura.
K=~/projetos/loop-r-eng-aprende-v72/kit
E=${TMPDIR:-/tmp}/ensaio-aprende/a7 # o ensaio acima
RASTRO=$E/rastros.jsonl AGENTE="bash $K/agente-claude.sh" bash $K/experimento.sh $E/sis "claude"; echo "saída: $?"
tail -1 $E/rastros.jsonl | python3 -c 'import json,sys; d=json.load(sys.stdin); print("tokens:", "sim" if (d["tokens_entrada"] or 0) > 0 else "não", "·", d["status"])'ciclo 7 · keep · 0.800 → 1.000 · melhorou saída: 0 tokens: sim · keep
A linha gravada no rastro dessa rodada: 10 segundos, 247.492 tokens de entrada (somando leitura e escrita de cache) e 364 de saída. O pedido tem menos de 2 KB: quase toda a entrada é o contexto que a sessão do Claude Code carrega nesta máquina. Uma medição, Claude Code 2.1.303; a sua muda com as suas instruções, plugins e MCPs.
Estimar o custo do loop pelo tamanho do pedido. A conta que vale é a do rastro, por ciclo, com o contexto inteiro que a ferramenta carrega. Cache e custo de retomada são do curso 2, aula 4.
Dois casos locais, com a data de cada número.
Cada ciclo do vendas-whatsapp tem um custo.md por agente. Os quatro ciclos somam cerca de 1,7 milhão de tokens para uma promoção (README do exemplo).
Dados de vendas sintéticos, agentes de verdade: o custo é real, o efeito foi desenhado.
Hooks do Claude Code gravam eventos num SQLite local (sessão, ferramenta, erro, subagente) e um painel mostra o que está rodando. Medido: 3 a 5 mil chamadas de ferramenta por dia, cerca de 10 mil eventos e 2 MB por dia.
Regra de ouro do projeto: guarda nomes e números, nunca o texto de prompt, resposta ou comando.
Há convenções OpenTelemetry para agentes (spans de agente, de chamada de modelo e de ferramenta, com tokens), descritas como experimentais em fontes secundárias.
Antes de adotar, confira o estado na documentação do OpenTelemetry. Uma linha JSON por ciclo já cobre o que esta aula pede.
Ensaio, real e o seu loop.
Rode o ensaio.
Pronto quando: ALERTA: ciclo 3 usou 88% do teto, ALERTA: 3 erros seguidos iguais e saída: 1.
Rode o bloco real logo depois do ensaio.
Pronto quando: a última linha impressa começa com tokens: sim; se vier tokens: não · erro, o agente ficou sem resposta (limite da sessão): espere e rode de novo.
Ligue RASTRO no seu experimento (ou grave a mesma linha JSON no fim de cada ciclo do seu loop) e defina o teto de tokens por ciclo a partir da medição real do E20.
Pronto quando: python3 $K/custo-ciclo.py [seu rastro] --teto [seu teto] lista um ciclo por linha e termina em sem alerta ou em ALERTA: que você sabe explicar.
Pergunta 1 de 4
Seis ciclos, um keep, 62.200 tokens no total. Qual é o custo por keep?competência
Pergunta 2 de 4
Três ciclos seguidos terminam em erro com o mesmo motivo. O que isso costuma ser?competência
Pergunta 3 de 4
O que o rastro deve guardar?
Pergunta 4 de 4
Na chamada real medida, o pedido tinha menos de 2 KB e a entrada passou de 247 mil tokens. Por quê?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.