# Determinismo vira script: o teste que uso para saber quando parar de pedir para a IA

> Se duas execuções corretas dão a mesma saída, é script, não trabalho para a IA. O teste que uso, três exemplos práticos e o que isso economiza em token.

- URL: https://iagofrota.com.br/blog/determinismo-vira-script/
- Data: 2026-09-01
- Tags: agentes-de-ia, claude-code, automacao, engenharia

"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:

1. **Dar as regras.** "Isso aqui é uma credencial, isso aqui não é."
2. **O agente escreve o script.** Não é o agente que decide na hora, é o script que decide depois.
3. **Testar contra exemplo real.** Um documento cheio de credenciais espalhadas.
4. **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.
5. **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?
