Uma interface de programação pede um objeto no formato de objeto estruturado com três campos. O modelo responde com texto antes do objeto, esquece uma aspa e ainda inventa um quarto campo. O programa tenta interpretar a resposta, falha, envia o erro de volta e espera outra geração. Quando finalmente funciona, a pergunta deixa de ser se o modelo consegue produzir um formato de objeto estruturado. A pergunta passa a ser: quanto custou obrigá-lo a chegar lá?

Já mostramos no paradoxo da verificação que conferir a resposta depois de gerada faz o sistema pagar duas vezes pela mesma tarefa. A comparação entre decodificação estruturada e correção iterativa é o passo seguinte dessa conversa: ela expõe um custo que costuma desaparecer nas demonstrações. Na primeira abordagem, o sistema restringe a geração para que a saída respeite um esquema desde o começo. Na segunda, o modelo gera livremente, recebe o erro e tenta consertar o resultado em um loop. As duas podem produzir uma resposta válida. Elas gastam recursos de maneiras diferentes e falham por motivos diferentes.

O primeiro token já decide parte da conta

Na decodificação estruturada, o modelo não escolhe qualquer próximo token. Um mecanismo externo acompanha o esquema esperado e elimina opções incompatíveis. Se o campo exige um número, texto que abriria uma string fica fora da disputa. Se o objeto precisa de uma chave específica, a geração é guiada para manter a forma permitida.

A analogia mais útil é um formulário com portas. O modelo continua decidindo o conteúdo, mas não consegue atravessar uma porta que levaria a uma estrutura inválida. Isso reduz erros sintáticos, como vírgulas ausentes, aspas quebradas e tipos incompatíveis.

A analogia falha em um ponto importante: uma estrutura válida não significa uma resposta verdadeira ou útil. O formato de objeto estruturado pode obedecer perfeitamente ao esquema e conter uma data errada, uma classificação incoerente ou uma justificativa inventada. A restrição controla a forma, não garante o significado.

Esquemas simples geralmente exigem menos regras de controle; isso deve ser medido na implementação escolhida. Nesse desenho, parte do esforço é deslocada da repetição para o controle da geração. Esta matéria não mede quantitativamente esse custo, então não dá para afirmar qual implementação será mais rápida em todos os casos.

O segundo caminho transforma erro em entrada

Na correção iterativa, o sistema aceita uma primeira tentativa. Depois valida a saída com um analisador, um esquema ou um teste de domínio. Se algo falhar, envia ao modelo o resultado, a mensagem de erro e uma instrução para corrigir apenas o necessário.

É a lógica de um depurador: executar, observar a falha, alterar o programa e executar de novo. Essa estratégia resolve problemas que uma gramática não enxerga. Um campo pode ter o tipo correto e ainda violar uma regra de negócio. Um código pode compilar e produzir um resultado fisicamente errado. A validação externa fecha essa lacuna ao testar o comportamento, não apenas a aparência.

Estudos iniciais relatam melhora em alguns cenários de geração de código quando testes, histórico do projeto e memória estruturada entram no ciclo de revisão. O resultado não transforma o agente em autoridade. Ele apenas dá ao modelo uma forma concreta de descobrir que a primeira resposta não bastava.

O problema é que cada tentativa adiciona tokens, chamadas e espera. E o erro pode se repetir. Um modelo que recebeu apenas “formato inválido” ganhou pouca informação. Uma mensagem como “o campo idade precisa ser inteiro, mas a resposta contém texto; preserve os demais campos” oferece um alvo de correção muito melhor.

Uma conta simples mostra onde a latência aparece

Suponha, apenas como exemplo hipotético, que cada chamada leve 300 milissegundos e cada rodada de inferência demore 2 segundos. Uma tentativa inicial seguida de várias correções acumula chamadas e rodadas. As chamadas acrescentam latência de comunicação, enquanto as rodadas de inferência dominam o tempo total. O tempo total cresce aproximadamente com o número de tentativas.

Na decodificação estruturada, o mesmo exemplo hipotético usa uma única chamada e uma rodada de inferência. A estratégia evita a repetição da correção iterativa, mas transfere parte do trabalho para o controle da geração. A comparação real precisa medir as duas implementações no mesmo ambiente.

Tokens também acumulam. Suponha, como exemplo hipotético, uma primeira resposta com 600 tokens e uma sequência de correções, cada uma acrescentando 250 tokens. O consumo de saída cresce a cada reparo e pode chegar a 1.350 tokens nesse cenário ilustrativo. A conta real depende do protocolo e do que é reenviado, mas o princípio permanece: um resultado curto pode carregar uma história longa de tentativas.

O erro mais comum é comparar só a taxa de sucesso

Quase todo mundo mede quantas respostas terminam válidas e para por aí. Esse teste favorece a correção iterativa quando ela recupera falhas, mas esconde quantas chamadas foram necessárias. Também favorece a decodificação estruturada quando o esquema é simples, mas não revela que ela pode bloquear saídas semanticamente aceitáveis ou ficar difícil de manter em regras complexas.

A comparação correta registra pelo menos quatro coisas: validade estrutural, validade de negócio, número de tentativas e tempo até a resposta final. Acrescente tokens consumidos e o tipo de falha. Um sistema que acerta em uma tentativa pode ser melhor que outro que acerta sempre depois de várias, dependendo do custo de uma resposta errada e da urgência da aplicação.

Esse ponto é resultado consolidado na engenharia de sistemas: uma métrica isolada quase nunca descreve o comportamento operacional. O que ainda exige medição no seu caso é a distribuição dos erros. Se a maioria for sintática, restringir a saída ataca o problema diretamente. Se a maioria for semântica, o esquema sozinho terá pouco efeito.

A escolha prática é combinar as duas camadas

Use decodificação estruturada para impor o contrato mínimo: campos obrigatórios, tipos, enumerações e formato. Depois aplique validação externa para regras que dependem do mundo ou de outros campos. Só acione correção iterativa quando a falha tiver uma mensagem acionável e quando o custo de uma nova tentativa fizer sentido.

Um limite de tentativas evita que o sistema transforme um erro persistente em uma fila infinita. Um orçamento de tokens impede que a correção consuma mais do que a tarefa vale. E a validação deve separar erro de sintaxe, erro de esquema e erro de significado. Cada classe pede uma resposta diferente.

Para uma interface de programação de baixa latência, comece com estrutura rígida e uma única tentativa. Para um agente que escreve código ou executa um fluxo verificável, aceite o loop, mas devolva testes específicos e guarde o histórico das falhas. A correção iterativa faz sentido quando existe um verificador melhor que o próprio modelo.

Uma abordagem híbrida combina as duas camadas. Uma estratégia prática é dividir o trabalho: o decodificador impede que a resposta quebre a forma, enquanto testes e validadores decidem se ela merece ser aceita. O modelo não precisa tentar sozinho em todos os casos. Ele precisa receber liberdade exatamente onde há algo que possa ser verificado depois.

Antes de trocar sua arquitetura, instrumente uma semana de execução. Conte tentativas, tokens, tempo e motivo da rejeição. Essa medição ajuda a identificar quais erros consomem mais recursos. O formato de objeto estruturado é apenas a porta de entrada. O custo verdadeiro está no caminho até ele.