Ratchet Pattern Image: AI generated

Se o seu agente de IA diz “pronto” mas na verdade não terminou, se o agente pula tarefas difíceis, se você quer que uma máquina — não um humano — determine a conclusão — este artigo explica essa estrutura.

“Terminei”

Pedi a um agente AI que escrevesse testes para 527 funções. O agente concluiu o trabalho e reportou:

“Concluído.”

Funções que realmente receberam testes: 40.

Não mentiu. Fez 40 e julgou que “já era suficiente”. Ao encontrar uma função difícil, pulou. Depois de mais algumas, concluiu que “o restante segue o mesmo padrão, então está feito”.

LLM gera bem. Mas seu julgamento sobre conclusão não é confiável. Huang et al. demonstraram experimentalmente que a autocorreção do LLM sem feedback externo pode na verdade degradar o desempenho[1].


A catraca

Uma chave catraca tem dentes que travam em uma única direção. Gire e ela avança. Solte e ela para, mas não volta.

O Ratchet Pattern aplica esse mecanismo ao controle de agentes. O codigo de verificacao escrito com esse padrao e chamado de ratchet code — codigo que nunca permite regressao abaixo de um nivel de verificacao previamente aprovado.

Item 1: verificação mecânica → PASS → próximo
Item 2: verificação mecânica → FAIL → nova tentativa (com feedback)
Item 2: verificação mecânica → PASS → próximo
...
Item N: PASS → concluído. Parar.

Três regras:

  • Mostre apenas um item por vez.
  • Só avança após passar.
  • Quando todos passarem, pare.

Ao implementar essas regras como CLI, o agente precisa conhecer apenas um comando: next. O resto a máquina decide.


Agente para em 40, catraca completa 527

Mesmo modelo. Mesmo projeto. Mesmas 527 funções.

Agente autônomo:  40 / 527  (7.6%)  — agente declarou "concluído"
Ratchet CLI:     527 / 527 (100%)  — máquina declarou "ainda faltam 487"

A diferença não está no desempenho do modelo. Está em quem decide o “fim”.

No agente autônomo, o LLM julga o encerramento. O LLM é otimista. Faz 40 e “sente” que é suficiente. Na análise de rastreamento de 1.600 execuções de agentes de Cemri et al., a terminação prematura — declarar o objetivo atingido antes de realmente atingi-lo — representou 6,2% de todos os modos de falha[2]. Na catraca, a máquina julga. A máquina não sente. Declara “ainda não” até que o número de itens restantes chegue a zero.


Definição em uma frase

Coloque o agente probabilístico dentro de uma máquina de estados determinística.

PapelResponsável
GeraçãoLLM
Veredictoverifier
Gestão de progressoratchet

Muitos sistemas delegam geração, veredicto e decisão de parada inteiramente ao LLM. O Ratchet separa essas responsabilidades.


Cinco princípios

1. A condição de encerramento é mecânica

pass/fail. Não “looks good”. Se go test passa, é PASS. Se coverage chega a 100%, é PASS. Não há espaço para julgamento subjetivo.

2. PASS é imutável

Um item aprovado não se reabre. Sem retrocesso. O número de itens restantes só diminui.

remaining_work(t+1) ≤ remaining_work(t)

O que você construiu hoje não será desmontado amanhã. Só avança. Essa é a diferença fundamental em relação ao “agente de 24 horas”. Um agente sem condição de parada adiciona uma abstração hoje, remove amanhã e readiciona depois de amanhã. A catraca não permite essa oscilação.

3. LLM só gera

Gerar código, escrever testes, propor correções — esse é o papel do LLM. O que corrigir, se passou ou não, qual é o próximo, se terminou — tudo isso a máquina decide. LLM não é um planejador, é um constrained generator.

4. Revogar o direito do agente de declarar conclusão

Se o LLM diz “terminei”, para em 40. Se a máquina diz “terminou”, para em 527. A razão de existir da catraca se resume a essa linha.

5. Verifier deve ser determinístico

Nem tudo pode ser verifier.

Pode serNão pode ser
go test“looks cleaner”
medição de coverage“seems better”
AST validation“more scalable”
schema diff“clean architecture”

Condições do Verifier: deterministic, machine-checkable, resumable, localized feedback. Se essas quatro não forem atendidas, os dentes da catraca não engatam.


Feedback é gradient signal

Se a catraca retorna apenas “passou/falhou”, o LLM corrige sem direção. Quanto mais específico o feedback, mais precisa a correção do LLM.

Feedback fraco:   "teste falhou"              → LLM corrige sem direção
Feedback médio:   "coverage 65%"              → LLM reforça aproximadamente
Feedback forte:   "line 41, 44, 70 sem cobertura" → LLM cobre exatamente esses ramos

Números verificados em projeto real:

Sem feedback:  para em 60~70% de coverage
Com feedback:  atinge 100% (para funções alcançáveis)

Mesmo modelo. Uma única linha “line 41 not covered” funciona como gradient signal. A pesquisa Self-Debug de Chen et al. provou que a depuração iterativa, alimentando mensagens de erro do compilador/runtime de volta ao modelo, melhora drasticamente a precisão do código[3].

Quanto maior a resolução do feedback, maior a precisão das correções do LLM, menor o número de iterações do loop e menor o custo.


O agente morre. O progresso sobrevive.

O agente vai cair. Limite de tokens, erro de rede, sessão encerrada. Se a catraca persiste o estado de progresso, o próximo agente continua de onde o anterior parou.

Agente A: processa funções 1~200 → morre
Agente B: next → retoma a partir de 201
Agente C: next → retoma a partir de 401

O agente é descartável. O progresso se acumula.


Troque o Verifier, obtenha outra ferramenta

A catraca não está presa a um verificador específico. Troque o verificador e você tem outra ferramenta.

Catraca + verificadorUso
Catraca + go test + coverageGeração de testes por função
Catraca + regras estruturais validatorOrganização de estrutura de código
Catraca + hurl pass/failVerificação de endpoints de API
Catraca + verificação cruzada de especificaçõesGarantia de coerência SSOT
Catraca + Toulmin verdictAplicação de regras definidas pelo usuário

O padrão é um só. O verificador determina o domínio.


Perguntas

Quantos itens seu agente completou antes de dizer “terminei”?

Realmente terminou?

Quem decidiu o “fim” — o agente ou a máquina?


Artigos relacionados

  • Topologia de feedback importa mais que QI do modelo — O fundamento teórico do Ratchet Pattern. Por que a estrutura de feedback é mais importante que o desempenho do modelo.
  • tsma — Implementação do Ratchet Pattern para testes em Go. 527 funções, zero TODO.
  • filefunc — Implementação do Ratchet Pattern para estrutura de código. typer refatorado, 1155 testes aprovados.

Fontes

[1] Jie Huang, Xinyun Chen, Swaroop Mishra, Huaixiu Steven Zheng, Adams Wei Yu, Xinying Song, Denny Zhou. “Large Language Models Cannot Self-Correct Reasoning Yet.” ICLR 2024. arXiv:2310.01798

[2] Mert Cemri, Melissa Z. Pan, Shuyi Yang, Lakshya A. Agrawal, Tanay Chopra, Aditya Tiwari, Kurt Keutzer, Aditya Parameswaran, et al. “Why Do Multi-Agent LLM Systems Fail?” NeurIPS 2025 Datasets and Benchmarks Track. arXiv:2503.13657

[3] Xinyun Chen, Maxwell Lin, Nathanael Scharli, Denny Zhou. “Teaching Large Language Models to Self-Debug.” ICLR 2024. arXiv:2304.05128

[4] Noah Shinn, Federico Cassano, Ashwin Gopinath, Karthik Narasimhan, Shunyu Yao. “Reflexion: Language Agents with Verbal Reinforcement Learning.” NeurIPS 2023. arXiv:2303.11366

[5] Aman Madaan, Niket Tandon, Prakhar Gupta, Skyler Hallinan, Luyu Gao, Sarah Wiegreffe, Uri Alon, Nouha Dziri, Shrimai Prabhumoye, Yiming Yang, et al. “Self-Refine: Iterative Refinement with Self-Feedback.” NeurIPS 2023. arXiv:2303.17651

[6] Yujia Li, David Choi, Junyoung Chung, Nate Kushman, Julian Schrittwieser, Remi Leblond, Tom Eccles, et al. “Competition-Level Code Generation with AlphaCode.” Science 378(6624): 1092-1097, 2022. DOI:10.1126/science.abq1158

[7] Carlos E. Jimenez, John Yang, Alexander Wettig, Shunyu Yao, Kexin Pei, Ofir Press, Karthik R. Narasimhan. “SWE-bench: Can Language Models Resolve Real-World GitHub Issues?” ICLR 2024. arXiv:2310.06770


Changelog

  • 2026-05-15: Versão inicial