Determinismo vira script: o teste que uso para saber quando parar de pedir para a IA
Toda ação que tem entrada e saída fixas devolve o mesmo resultado sempre — mas eu vivia pedindo para a IA refazer isso do zero, a cada chamada. Um teste simples, três exemplos práticos, e por que isso economiza token, tempo e confiança.
“Eu não sei Python. Desculpa, eu não sei Python. Eu falo: preciso que você faça um script que faça isso.” Foi mais ou menos assim que me peguei falando outro dia, numa conversa sobre agentes de IA. E o motivo não foi capricho — foi a ficha caindo, ao vivo, de uma coisa que eu já desconfiava fazia tempo: tem muita ação que é determinística, e a gente — eu incluído — insiste em deixar para a inferência.
Bora lá, porque isso dá para virar regra prática rápido.
O teste que uso: duas execuções, mesma saída?
A régua é simples, e uso ela toda vez que fico em dúvida se algo é “trabalho para a IA” ou não:
Se duas execuções corretas do mesmo passo produzem a mesma saída, é script. Se produzem saídas legitimamente diferentes, é inferência.
Contar quantos arquivos existem numa pasta? Mesma entrada, mesma saída — script. Confirmar se uma string bate com o padrão de uma credencial? Mesma entrada, mesma saída — script. Decidir se um parágrafo ambíguo pertence ao tema A ou ao tema B? Aí sim, cada leitura pode legitimamente pesar diferente — inferência.
O modelo fica com o que é irredutivelmente julgamento: ler contexto ambíguo, decidir escopo, cruzar informação, redigir. O resto é maquinaria. E maquinaria, a gente escreve uma vez e testa — não reexecuta por interpretação a cada chamada.
Por que isso importa (e não é só implicância)
Achei bobo na hora que percebi. Depois vi que tem argumento sério por trás: quando você tira uma ação determinística da inferência e bota num script, você economiza token, ganha confiabilidade e ainda automatiza de verdade — em vez de pagar o preço de reprocessar o mesmo texto, do mesmo jeito, toda vez que o agente passa por ali.
Não é troca simples de “IA vs. script”. É saber separar os dois. Deixei três exemplos práticos abaixo — um deles é do meu próprio projeto de wiki, então dá para ir conferir.
Exemplo 1: o script de credencial em que o agente passou a confiar sem reler
Um caso que vi surgir de um jeito bem direto: alguém sem saber programar pedindo para o agente escrever um script de checagem de credenciais vazadas num documento.
O fluxo foi assim — e reparei que é sempre esse fluxo, em qualquer variação do problema:
- Dar as regras. “Isso aqui é uma credencial, isso aqui não é.”
- O agente escreve o script. Não é o agente que decide na hora, é o script que decide depois.
- Testar contra exemplo real. Um documento cheio de credenciais espalhadas.
- Corrigir o que passou batido. “Olha, isso aqui era credencial e você não pegou” → o agente ajusta o script, não a instrução em prosa.
- A partir daí, confiar. “Agora, na skill, você usa esse script para credenciais. Não precisa analisar o texto de novo.”
O ponto que me chamou atenção foi o passo 5. Depois que o script está validado, a skill para de reprocessar aquele texto via IA a cada chamada. Ela só invoca o script e confia no resultado. É exatamente o teste lá de cima: “é credencial ou não” tem entrada e saída fixas — não devia estar sendo re-decidido, do zero, toda vez.
Exemplo 2: dogfooding no meu próprio projeto de wiki
Esse eu vivo, então posso mostrar sem parafrasear ninguém.
Mantenho uma wiki pessoal em markdown — fonte de conhecimento curada, que uso com Claude Code. Toda vez que uma página nova entra, três coisas têm que acontecer: o índice da área precisa listar a página nova, o contador do cabeçalho precisa bater com o número real de arquivos em disco, e o log do dia precisa registrar o que mudou.
Eu não deixo o modelo contar “quantas páginas tem” olhando para a pasta e chutando um número. Isso é ./scripts/wiki-index-sync.sh — conta de verdade, sempre a mesma saída para a mesma pasta. Fechar a sessão de edição roda ./scripts/wiki-finish.sh, que por baixo aciona index-sync, o índice do log (wiki-log-index.sh) e uma validação de estrutura (wiki-validate.sh) — nessa ordem, sempre.
E o outro lado da moeda, para não vender só metade da história: achar a seção certa dentro de um arquivo de 60 KB não é script, é busca — só que também não precisa ser o modelo relendo o arquivo inteiro toda vez. wiki-query.sh devolve arquivo:linha-início-linha-fim de onde a resposta provavelmente está, e só aí o modelo lê o trecho.
Contar página é determinístico. Achar a seção mais relevante para uma pergunta em português não é — é busca, tem ranking, tem ambiguidade. Script para o primeiro, ferramenta de recuperação para o segundo, e leitura + julgamento só na ponta.
Exemplo 3: o híbrido — script para o padrão, IA para o resto
Nem tudo em um fluxo é 100% determinístico. Um colega — desses que curte automatizar as próprias coisas em casa, fora do trabalho, só pelo gosto de testar — comentou uma ideia de classificar itens parecidos usando busca vetorial: transformar cada item num vetor, comparar a distância com os outros e ranquear os mais próximos.
Só que ranquear por distância semântica é probabilístico por natureza — dois itens “parecidos” nunca vão bater 100% do jeito que dois números batem. Então ele separou o problema: a busca de candidatos usa vetor (aí sim é inferência, porque não existe padrão fixo para “parecido”); a confirmação de que achou o caso certo usa um campo determinístico, escrito à mão, que descreve exatamente como confirmar aquele tipo de caso. Só depois de bater os dois — distância baixa e confirmação determinística — o sistema devolve resposta pronta, sem passar nem pelo desenvolvedor.
A frase dele resume o approach inteiro: parte é inferência, porque o padrão não é determinístico; parte vira script, porque já dá para extrair um padrão claro. Híbrido, não “tudo IA”.
Por fim
O que mudou para mim depois que comecei a aplicar isso de propósito: parei de tratar “deixa o agente resolver” como resposta padrão. Antes de pedir para a IA fazer algo pela enésima vez, faço a pergunta do teste: se eu rodasse isso duas vezes com a mesma entrada, o resultado seria sempre igual? Se for, viro script — testado, versionado, chamado quando precisar. Se não for, aí sim é hora de gastar inferência de verdade, no que só ela resolve.
Continuo confiando na IA do mesmo jeito. Só parei de gastar ela em pergunta que já tinha resposta certa.
E você, quantas vezes essa semana pediu para a IA reinventar algo que já tinha resposta fixa?