Ir para o conteúdo

Skills

chimera-carry-the-failure-forward

Um loop de retry que sobrescreve sua variável de feedback mostra à tentativa 3 apenas a falha da tentativa 2 — então ela re-deriva o patch que a tentativa 1 já testou.

PadrãoProcedência: cleanEstado: activev0.1.0 · Apache-2.0

Conferida por quem revisou e leu o cartão, não reivindicada pelo próprio arquivo. Um cartão que o agente destila durante uma execução que consumiu conteúdo não confiável nasce contaminado e fica retido para revisão antes de alguma vez ser recuperado.

Quando ele vem à mente

  • escrevendo um loop de retry
  • o agente insiste na mesma correção
  • devolvendo a saída do verificador ao modelo
  • as tentativas falham sempre igual
  • revertendo o workspace entre tentativas

Evite e Verifique são onde costuma estar o valor. Faça é a seção que todo mundo escreve.

O corpo do cartão acima é uma tradução. O original em inglês é o que a CLI importa, o que o agente lê em execução e o que o hash abaixo atesta.

Gatilho

Você tem um loop que roda uma tentativa, a julga, e roda outra com feedback: um agente com um verificador, um corretor de código contra uma suíte de testes, um pipeline de gerar-e-conferir. O orçamento é de mais de duas tentativas, e o workspace é revertido entre elas, de modo que cada tentativa começa limpa.

Não se aplica a um retry idempotente sobre um transporte instável — uma chamada de rede que falhou por razões sem relação com o que você enviou. Ali não há nada a aprender com a tentativa 1, e carregá-la adiante é só payload.

Faça

  1. Guarde as tentativas em uma lista, não em uma variável que você reatribui. Um registro por tentativa: a saída do verificador, o patch que a tentativa de fato escreveu, e qual passo de tool falhou primeiro.
  2. Tire o patch do snapshot do workspace, antes da reversão — o diff de verdade, não a descrição que o modelo deu do que mudou. A reversão é o que torna isso necessário: uma vez que a árvore volta atrás, nada em disco registra o caminho errado tampouco, então a próxima tentativa não tem obstáculo nenhum para re-derivar o mesmo caminho.
  3. Componha o prompt de retry a partir de todos os registros, do mais antigo para o mais novo, cada um rotulado com o número da tentativa e seu veredito, sob um cabeçalho que diga que essas já foram tentadas e revertidas.
  4. Limite cada registro. O Chimera trunca um diff realimentado em 2000 caracteres e marca o corte; um histórico de três tentativas sem limite vai dominar o prompt.
  5. Deduplique por assinatura de falha. Se duas tentativas falharam do mesmo jeito, mantenha uma e registre que aquilo se repetiu — a repetição é o sinal, a segunda cópia não é informação nova.
  6. Quando a assinatura se repetir, pare de acrescentar e mude algo estrutural: replaneje com as causas acumuladas como contexto do planejador (TaskLedger.context() as renderiza sob "Why earlier attempts failed (do NOT repeat these):"), ou escale para um modelo mais forte. Mais feedback sobre o mesmo beco sem saída não sai do beco sem saída.
  7. Emita um evento contável a cada vez que você injeta histórico, para que um braço de benchmark consiga provar que a injeção sequer disparou.

Evite

A sobrescrita. Em chimera/core/autonomous.py o feedback do loop é reconstruído a cada rodada:

feedback = "\n\n".join(p for p in (fb, _verify_fb) if p) or "The attempt did not pass verification."

de modo que a tentativa 3 é composta com a falha da tentativa 2 e nada da tentativa 1. Carregar a falha adiante significa acrescentar a uma estrutura em vez disso — esboçado, não citado, porque a versão que acumula é o que este card defende, e não o que o arquivo faz hoje:

records.append(record_for(index, verdict, patch))   # one entry per attempt
feedback = render(records)                          # every attempt, oldest first

Seja preciso sobre qual metade já existe quando você ler isto dentro do Chimera: o conteúdo do feedback está bem coberto — --diff-feedback mostra ao retry o patch que ele de fato escreveu (chimera/core/autonomous.py, limitado por _DIFF_FEEDBACK_MAX_CHARS = 2000), e o TaskLedger acumula causas para o planejador. O que não está coberto é o acúmulo entre tentativas na linha acima. Um card que apresentasse tudo isso como faltante estaria argumentando contra trabalho já feito.

Evite também dizer ao retry que ele falhou sem mostrar o que ele escreveu. "The attempt did not pass verification" mais um teste falhando é o bastante para fazer um modelo tentar de novo e não é o bastante para fazê-lo tentar algo diferente — o patch errado é invisível para ele e o workspace não o contém mais, então re-derivá-lo é o caminho de menor resistência.

E evite carregar só a prosa do gerente e descartar a saída do verificador. O assert que falha é a linha mais acionável do loop inteiro; um parágrafo de um revisor sobre ele é uma paráfrase com estritamente menos informação.

Verifique

Instrumente o compositor, rode uma tarefa que você sabe que falha três vezes, e faça um grep no prompt da tentativa 3 atrás de uma string que só existe na tentativa 1 — um arquivo que ela tocou, um identificador do diff dela. Presente ou ausente; não há crédito parcial.

Segunda checagem, igualmente binária: conte as injeções. Uma execução em que o histórico nunca foi montado porque a guarda estava errada, ou porque a lista de diffs estava vazia, não mediu nada — e um braço de benchmark construído sobre isso mede o encanamento, não a ideia. Se o contador marcar zero, o resultado é nulo, não importa o que a taxa de sucesso diga.

Risco

Ancoragem é a contra-hipótese registrada, não uma hipótese vaga: mostrar a um modelo o patch errado pode fixar a atenção dele naquele patch e produzir variações de uma abordagem morta em vez de uma abordagem diferente. É por isso que o comportamento é opt-in e medido no Chimera (--diff-feedback), em vez de ligado por padrão. Trate isso como uma afirmação a testar nas suas próprias tarefas, não como uma melhoria estabelecida.

O segundo custo é o orçamento de contexto. Três diffs, três dumps de verificador e uma revisão do gerente podem empurrar o prompt além do limiar de compactação — e aí um compactador sem restauração vai descartar exatamente o histórico acumulado que você pagou para construir. Limite os registros e conheça o seu orçamento antes de ligar isso, ou os dois mecanismos vão brigar e o sintoma visível não será nenhum dos dois.

Como usar

O cartão é dado. Clone o repositório e importe pelo caminho — o que chega pela rede é tratado como contaminado e fica retido para aprovação, que é o comportamento desejável e a razão de não haver um instalador de uma linha aqui.

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/chimera-carry-the-failure-forward/SKILL.md

Integridade

SHA-256 do arquivo como publicado. Quem importa pode conferir que o que recebeu é o que esta página mostrou.

62dcc2aa830e5eb35c554bebf2c1a24454a054bf17bf152ccd59f3497b5e043d

Leia o cartão no repositório