chimera-carry-the-failure-forward
Pętla ponawiania, która nadpisuje swoją zmienną z feedbackiem, pokazuje próbie 3 tylko porażkę próby 2 — więc na nowo wyprowadza łatkę, którą próba 1 już wypróbowała.
Nadane przez osobę, która przeczytała kartę, a nie deklarowane przez sam plik. Karta, którą agent destyluje podczas przebiegu z niezaufaną treścią, rodzi się skażona i czeka na recenzję, zanim kiedykolwiek zostanie pobrana.
Kiedy przychodzi na myśl
- pisanie pętli ponawiania
- agent w kółko próbuje tej samej poprawki
- podawanie modelowi wyniku weryfikatora
- próby wciąż zawodzą tak samo
- cofanie zmian między próbami
Wartość zwykle kryje się w Unikaj i Sprawdź. Rób to sekcja, którą pisze każdy.
Treść karty powyżej to tłumaczenie. Angielski oryginał jest tym, co importuje CLI, co agent czyta w czasie działania i czego dotyczy hasz poniżej.
Wyzwalacz
Masz pętlę, która uruchamia próbę, ocenia ją i uruchamia kolejną z feedbackiem: agent z weryfikatorem, naprawiacz kodu wobec zestawu testów, potok generuj-i-sprawdź. Budżet to więcej niż dwie próby, a workspace jest cofany między nimi, więc każda próba zaczyna od czysta.
Nie dotyczy to idempotentnego ponowienia po zawodnym transporcie — wywołania sieciowego, które padło z przyczyn niezwiązanych z tym, co wysłałeś. Z próby 1 nie ma się tam czego nauczyć, a przenoszenie jej dalej to sam ładunek.
Rób
- Przechowuj próby w liście, a nie w zmiennej, którą nadpisujesz. Jeden rekord na próbę: wyjście weryfikatora, łatka, którą próba faktycznie zapisała, i który krok narzędzia zawiódł pierwszy.
- Weź łatkę ze snapshotu workspace'u, przed cofnięciem — prawdziwy diff, a nie opis modelu, co zmienił. To właśnie cofnięcie czyni to koniecznym: gdy drzewo zostanie wycofane, nic na dysku nie zapisuje również złej ścieżki, więc następna próba nie ma żadnej przeszkody, by wyprowadzić tę samą na nowo.
- Złóż prompt ponowienia ze wszystkich rekordów, od najstarszego, każdy opisany numerem próby i jej werdyktem, pod nagłówkiem mówiącym, że to już zostało wypróbowane i cofnięte.
- Ogranicz każdy rekord. Chimera ucina zwracany diff na 2000 znakach i skraca go znacznikiem; nieograniczona historia trzech prób zdominuje prompt.
- Deduplikuj po sygnaturze porażki. Jeśli dwie próby padły tak samo, zachowaj jedną i zanotuj, że się powtórzyła — powtórzenie jest sygnałem, druga kopia nie jest nową informacją.
- Gdy sygnatura się powtarza, przestań dopisywać i zmień coś strukturalnie: przeplanuj, podając
zebrane przyczyny jako kontekst dla plannera (
TaskLedger.context()renderuje je pod "Why earlier attempts failed (do NOT repeat these):"), albo eskaluj do mocniejszego modelu. Więcej feedbacku o tej samej ślepej uliczce nie wyprowadza ze ślepej uliczki. - Emituj policzalne zdarzenie za każdym razem, gdy wstrzykujesz historię, żeby ramię benchmarku mogło udowodnić, że wstrzyknięcie w ogóle zadziałało.
Unikaj
Nadpisanie. W chimera/core/autonomous.py feedback pętli jest odbudowywany w każdej rundzie:
feedback = "\n\n".join(p for p in (fb, _verify_fb) if p) or "The attempt did not pass verification."
więc próba 3 jest składana z porażką próby 2 i niczym z próby 1. Przeniesienie tego dalej oznacza dopisywanie do struktury — naszkicowane, nie zacytowane, bo wersja kumulująca to coś, za czym ta karta się opowiada, a nie to, co plik obecnie robi:
records.append(record_for(index, verdict, patch)) # one entry per attempt
feedback = render(records) # every attempt, oldest first
Bądź precyzyjny co do tego, która połowa już istnieje, gdy czytasz to w Chimerze: treść feedbacku
jest dobrze pokryta — --diff-feedback pokazuje ponowieniu łatkę, którą faktycznie zapisało
(chimera/core/autonomous.py, ograniczone przez _DIFF_FEEDBACK_MAX_CHARS = 2000), a TaskLedger
kumuluje przyczyny dla plannera. Niepokryta jest kumulacja między próbami z linii powyżej. Karta,
która przedstawiałaby to wszystko jako brakujące, spierałaby się z pracą już wykonaną.
Unikaj też mówienia ponowieniu, że zawiodło, bez pokazania, co zapisało. "The attempt did not pass verification" plus zawodzący test wystarczy, by model spróbował ponownie, i nie wystarczy, by spróbował czegoś innego — zła łatka jest dla niego niewidoczna, a workspace już jej nie zawiera, więc wyprowadzenie jej na nowo jest ścieżką najmniejszego oporu.
I unikaj przenoszenia samej prozy menedżera przy porzuceniu wyjścia weryfikatora. Zawodzący assert jest najbardziej użyteczną linią w całej pętli; akapit recenzenta o nim to parafraza o ściśle mniejszej ilości informacji.
Sprawdź
Oprzyrząduj składacz promptu, uruchom zadanie, o którym wiesz, że zawodzi trzy razy, i przegrepuj prompt próby 3 w poszukiwaniu ciągu istniejącego wyłącznie w próbie 1 — nazwy pliku, którego dotknęła, identyfikatora z jej diffa. Jest albo go nie ma; nie ma punktów częściowych.
Drugie sprawdzenie, równie zero-jedynkowe: policz wstrzyknięcia. Uruchomienie, w którym historia nigdy nie została złożona, bo strażnik był zły albo lista diffów była pusta, nie zmierzyło zupełnie niczego — a ramię benchmarku na tym zbudowane mierzy hydraulikę, nie ideę. Jeśli licznik pokazuje zero, wynik jest nieważny niezależnie od tego, co mówi wskaźnik sukcesu.
Ryzyko
Zakotwiczenie (anchoring) to zarejestrowana kontrhipoteza, nie hipotetyczna możliwość: pokazanie
modelowi złej łatki potrafi przykuć jego uwagę do tej łatki i wyprodukować warianty martwego
podejścia zamiast innego. Dlatego to zachowanie jest w Chimerze opcjonalne i mierzone
(--diff-feedback), a nie włączone domyślnie. Traktuj je jako twierdzenie do przetestowania na
własnych zadaniach, a nie jako ustalone ulepszenie.
Drugim kosztem jest budżet kontekstu. Trzy diffy, trzy zrzuty weryfikatora i przegląd menedżera potrafią przepchnąć prompt ponad próg kompaktowania — a wtedy kompaktor bez przywracania wyrzuci dokładnie tę zebraną historię, za której zbudowanie zapłaciłeś. Ogranicz rekordy i poznaj swój budżet, zanim to włączysz, bo inaczej oba mechanizmy będą ze sobą walczyć, a widocznym objawem nie będzie żaden z nich.
Jak użyć
Karta to dane. Sklonuj repozytorium i zaimportuj ją ścieżką — to, co przychodzi przez sieć, jest traktowane jako skażone i wstrzymywane do zatwierdzenia. Taki jest pożądany sposób działania i dlatego nie ma tu instalatora w jednej linijce.
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/chimera-carry-the-failure-forward/SKILL.mdIntegralność
SHA-256 pliku w postaci opublikowanej. Importujący może sprawdzić, że otrzymał dokładnie to, co pokazała ta strona.
62dcc2aa830e5eb35c554bebf2c1a24454a054bf17bf152ccd59f3497b5e043d