Vai al contenuto

Skills

chimera-carry-the-failure-forward

Un ciclo di retry che sovrascrive la propria variabile di feedback mostra al tentativo 3 solo il fallimento del tentativo 2 — così ricava di nuovo la patch che il tentativo 1 aveva già provato.

PatternProvenienza: cleanStato: activev0.1.0 · Apache-2.0

Conferita da chi ha letto la scheda, non rivendicata dal file su se stesso. Una scheda che l'agente distilla durante un'esecuzione che ha consumato contenuti non affidabili nasce contaminata e resta in attesa di revisione prima di essere mai recuperata.

Quando viene in mente

  • sto scrivendo un loop di retry
  • l'agente riprova sempre lo stesso fix
  • rimando l'output del verificatore al modello
  • i tentativi falliscono sempre allo stesso modo
  • ripristino il workspace tra i tentativi

Il valore di solito sta in Evita e Verifica. Fai è la sezione che scrivono tutti.

Il corpo della scheda qui sopra è una traduzione. L'originale inglese è ciò che la CLI importa, ciò che l'agente legge in esecuzione e ciò che l'hash qui sotto attesta.

Trigger

Hai un ciclo che esegue un tentativo, lo giudica, e ne esegue un altro con del feedback: un agente con un verificatore, un correttore di codice contro una suite di test, una pipeline genera-e-controlla. Il budget è di più di due tentativi, e il workspace viene riportato indietro tra l'uno e l'altro, così ogni tentativo parte pulito.

Non si applica a un retry idempotente su un trasporto instabile — una chiamata di rete fallita per motivi che non hanno nulla a che vedere con ciò che hai inviato. Lì non c'è niente da imparare dal tentativo 1, e portarselo dietro è solo zavorra.

Fai

  1. Conserva i tentativi in una lista, non in una variabile che riassegni. Un record per tentativo: l'output del verificatore, la patch che il tentativo ha effettivamente scritto, e quale passo di tool ha dato errore per primo.
  2. Prendi la patch dallo snapshot del workspace, prima del revert — il diff reale, non la descrizione che il modello dà di ciò che ha cambiato. È il revert a rendere tutto questo necessario: una volta che l'albero è tornato indietro, nulla su disco registra nemmeno la strada sbagliata, quindi il tentativo successivo non ha alcun ostacolo a riderivare la stessa.
  3. Componi il prompt del retry da tutti i record, dal più vecchio al più recente, ciascuno etichettato con il numero del tentativo e il suo verdetto, sotto un'intestazione che dica che questi sono già stati provati e annullati.
  4. Poni un limite a ogni record. Chimera limita un diff reimmesso a 2000 caratteri e tronca con un marcatore; una storia di tre tentativi senza limiti dominerà il prompt.
  5. Deduplica per firma del fallimento. Se due tentativi sono falliti allo stesso modo, tienine uno e annota che si è ripetuto — la ripetizione è il segnale, la seconda copia non è informazione nuova.
  6. Quando la firma si ripete, smetti di accodare e cambia qualcosa di strutturale: ripianifica usando le cause accumulate come contesto del planner (TaskLedger.context() le rende sotto "Why earlier attempts failed (do NOT repeat these):"), oppure sali a un modello più forte. Altro feedback sullo stesso vicolo cieco non fa uscire dal vicolo cieco.
  7. Emetti un evento contabile ogni volta che inietti la storia, così un braccio di benchmark può dimostrare che l'iniezione è davvero avvenuta.

Evita

La sovrascrittura. In chimera/core/autonomous.py il feedback del ciclo viene ricostruito a ogni giro:

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

quindi il tentativo 3 è composto con il fallimento del tentativo 2 e nulla del tentativo 1. Portarselo dietro significa invece accodare a una struttura — abbozzata, non citata, perché la versione che accumula è ciò che questa card sostiene, non ciò che il file fa oggi:

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

Sii preciso su quale metà è già presente quando leggi questo dentro Chimera: il contenuto del feedback è ben coperto — --diff-feedback mostra al retry la patch che ha effettivamente scritto (chimera/core/autonomous.py, limitata da _DIFF_FEEDBACK_MAX_CHARS = 2000), e TaskLedger accumula le cause per il planner. Ciò che non è coperto è l'accumulo tra un tentativo e l'altro della riga qui sopra. Una card che presentasse tutto questo come mancante starebbe argomentando contro lavoro già fatto.

Evita anche di dire al retry che è fallito senza mostrargli cosa aveva scritto. "The attempt did not pass verification" più un test che fallisce basta a far riprovare un modello e non basta a fargli provare qualcosa di diverso — la patch sbagliata gli è invisibile e il workspace non la contiene più, quindi riderivarla è la via di minor resistenza.

Ed evita di portarti dietro solo la prosa del manager scartando l'output del verificatore. L'assert che fallisce è la riga più azionabile di tutto il ciclo; il paragrafo che un revisore ci scrive sopra è una parafrasi con strettamente meno informazione.

Verifica

Strumenta il compositore, esegui un task che sai fallire tre volte, e cerca con grep nel prompt del tentativo 3 una stringa che esiste solo nel tentativo 1 — un nome di file che aveva toccato, un identificatore preso dal suo diff. Presente o assente; non c'è credito parziale.

Secondo controllo, altrettanto binario: conta le iniezioni. Un'esecuzione in cui la storia non è mai stata assemblata perché la guardia era sbagliata, o perché la lista dei diff era vuota, non ha misurato assolutamente nulla — e un braccio di benchmark costruito su quello misura l'impianto idraulico, non l'idea. Se il contatore segna zero, il risultato è nullo a prescindere da cosa dica il tasso di successo.

Rischio

L'ancoraggio è la contro-ipotesi registrata, non un'ipotesi teorica: mostrare a un modello la patch sbagliata può fissare la sua attenzione su quella patch e produrre variazioni di un approccio morto invece di uno diverso. È per questo che in Chimera il comportamento è opt-in e misurato (--diff-feedback) anziché attivo di default. Trattalo come una tesi da testare sui tuoi task, non come un miglioramento acquisito.

Il secondo costo è il budget di contesto. Tre diff, tre dump del verificatore e una revisione del manager possono spingere il prompt oltre la sua soglia di compattazione — e a quel punto un compattatore senza ripristino butterà via esattamente la storia accumulata che hai pagato per costruire. Poni un limite ai record e conosci il tuo budget prima di abilitare tutto questo, altrimenti i due meccanismi si scontreranno e il sintomo visibile non sarà nessuno dei due.

Come usarla

La scheda è un dato. Clona il repository e importala per percorso — ciò che arriva dalla rete è trattato come contaminato e trattenuto in attesa di approvazione, che è il comportamento desiderabile e il motivo per cui qui non c'è un installatore in una riga.

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

Integrità

SHA-256 del file così com'è pubblicato. Chi lo importa può verificare che ciò che ha ricevuto sia ciò che questa pagina mostrava.

62dcc2aa830e5eb35c554bebf2c1a24454a054bf17bf152ccd59f3497b5e043d

Leggi la scheda nel repository