Przejdź do treści

Skills

chimera-budget-the-context

Wydawaj w ramach budżetu mniejszego niż realne okno i licz schematy narzędzi, które wysyłasz ponownie na każdym kroku — to podłoga, poniżej której kompaktowanie nie zejdzie.

WzorzecPochodzenie: cleanStatus: activev0.1.0 · Apache-2.0

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

  • przebieg padł przez przepełnienie kontekstu
  • zwiększanie max-steps
  • agent zapomniał, co robił
  • dodawanie kolejnego serwera MCP
  • decyzja, co wyciąć z promptu

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

Prowadzisz pętlę, która na każdym kroku dopisuje do listy wiadomości — agent ReAct, tura kodowania, asystent wywołujący narzędzia — a lista tylko rośnie. Objawy: dostawca zgłasza błąd długości kontekstu albo uruchomienie przeżywa, ale po dłuższym odcinku zaczyna pracować na złym pliku.

Nie dotyczy to pojedynczego wywołania, którego prompt sam złożyłeś i możesz zmierzyć raz. Nie ma polityki wypierania do zaprojektowania, gdy nic się nie kumuluje.

Rób

  1. Zapisz dwie liczby, zanim dotkniesz pętli: deklarowane okno modelu i ten jego ułamek, który wydasz na prompt. Chimera wydaje 0,6 (DEFAULT_BUDGET_FRACTION w chimera/core/context_budget.py). Reszta płaci za dopełnienie i za różnicę między twoim oszacowaniem tokenów a prawdziwym licznikiem dostawcy.
  2. Odpalaj kompaktowanie na ułamku budżetu, nie okna — Chimera wyzwala je przy 0,8 budżetu. Kompaktowanie potrzebuje miejsca, do którego kompaktuje; wyzwalacz ustawiony na oknie odpala wtedy, gdy tego miejsca już nie ma.
  3. Mierz stałą podłogę osobno od części rosnącej. Wiadomość systemowa plus ładunek tools= są wysyłane ponownie na każdym kroku i żadna ilość kompaktowania wiadomości ich nie dotyka. Uruchom chimera schema-bench (albo policz JSON sam), zanim założysz, że to historia jest droga. Rozwlekły import MCP albo OpenAPI potrafi podłożyć dziesiątki tysięcy tokenów pod każdy pojedynczy krok uruchomienia.
  4. Jeśli problemem jest podłoga, obniż podłogę: usuń klucze schematu będące wyłącznie adnotacjami (examples, title, default, $comment) i przytnij prozę parametrów do pierwszego zdania, zostawiając type, properties, required i enum nietknięte, żeby wybór narzędzia i poprawność argumentów pozostały bez zmian. Dokładnie to robi chimera/tools/schema_compact.py. Jeśli to wciąż za dużo, ogłaszaj mniej narzędzi.
  5. Ustal kolejność wypierania jawnie: wiadomość systemowa nigdy, ostatnie tury dosłownie (Chimera trzyma 6), starszy odcinek zastąpiony podsumowaniem albo notatką z faktami. Nigdy nie przepisuj wiadomości systemowej — to stabilny prefiks, na którym kluczowany jest cache promptów, a jej edycja unieważnia każdą zbuforowaną turę za nią.
  6. Po kompaktowaniu wstrzyknij z powrotem to, czego uruchomienie potrzebuje, żeby wciąż być sobą: zadanie dosłownie, plan, listę zadań ze statusami i plik aktualnie edytowany. Odczytaj plik na nowo z dysku, zamiast przywracać zapamiętaną kopię.
  7. Gdy sam szacujesz rozmiar w tokenach, licz ładunek tool_calls tak samo jak content. Argumenty narzędzi jadą na wiadomości asystenta i nie ma ich w content; oszacowanie rozmiaru czytające tylko content zaniża dokładnie te wiadomości, które urosły.

Unikaj

Podnoszenie --max-steps, bo zadanie się nie skończyło. To ruch oczywisty i to on zabija uruchomienie: więcej kroków oznacza dłuższą listę wiadomości przy tym samym oknie.

Porzucanie treści zadania. Przychodzi jako wiadomość użytkownika na początku, więc jest pierwszą rzeczą, którą naiwny kompaktor wypiera, i ostatnią, bez której agent potrafi pracować. Efektem jest agent wykonujący plan, którego cel został usunięty — wciąż pewny siebie, wciąż produkujący edycje, nigdzie żadnego błędu. Plik może odczytać ponownie; instrukcji nie.

Zostawianie wiadomości tool na czele zachowanego ogona:

older, recent = body[:-keep_recent], body[-keep_recent:]   # can orphan a tool result

kontra

older, recent = body[:-keep_recent], body[-keep_recent:]
while recent and recent[0].get("role") == "tool":
    older.append(recent.pop(0))                            # tail starts on a legal turn

Większość dostawców odrzuca wiadomość tool, której pasujące tool_call asystenta zniknęło, więc kompaktowanie, które miało uratować uruchomienie, jest tym, co je kończy.

Unikaj też strojenia najpierw pod maksymalną kompresję. Kalibruj najpierw pod odtwarzalność: trzymanie za dużo kosztuje tokeny, czyli rachunek; usunięcie za dużo gubi kontekst potrzebny później, a tych wiadomości już nie ma. Jedno jest kosztem, drugie jest nie do odzyskania.

Sprawdź

Ustaw okno celowo nisko — wyceluj budżet w fałszywe okno 4K albo uruchom zadanie, o którym wiesz, że jest długie — i potwierdź trzy rzeczy: kompaktowanie zadziałało, uruchomienie poszło dalej, a wiadomość, która po nim nastąpiła, zawierała oryginalny tekst zadania. Przegrepuj złożony prompt po kompaktowaniu w poszukiwaniu charakterystycznej frazy z zadania. Jeśli jej tam nie ma, przywracanie nie działa, cokolwiek mówią logi.

Potem sprawdź podłogę pytaniem zero-jedynkowym: czy prompt jednego kroku, przy pustej historii, już przekracza twój próg? Jeśli tak, kompaktowanie nigdy nie pomoże — compact() zwraca changed=False na liście, której nie potrafi skrócić, a uczciwym odczytaniem braku zmiany jest "to nie pomogło", a nie "ponów próbę w tę samą ścianę".

Ryzyko

Budżet ustawiony za nisko kompaktuje uruchomienia, które nigdy tego nie potrzebowały, a każde kompaktowanie przepisuje sufiks promptu i wyrzuca trafienia cache'u za nim. Na długiej sesji kodowania to prawdziwy rachunek, zapłacony za uniknięcie przepełnienia, które i tak by nie nastąpiło.

Kompaktowanie schematów ma własne ostrze: przycięcie opisu parametru do jednego zdania jest bezpieczne dla poprawności argumentów, ale może usunąć zdanie, które mówiło modelowi, kiedy użyć narzędzia. Zmienia zachowanie przy wyborze, nie zmieniając żadnego schematu sprawdzanego przez walidator, więc zawodzi jako nieco gorszy wybór narzędzia, a nie jako błąd. Mierz to jako A/B, nie włączaj dlatego, że oszczędza tokeny.

A cały ten wzorzec nic nie kupuje, jeśli zadanie jest naprawdę za duże dla modelu. Budżetowanie zamienia twardy sufit w miękki; nie tworzy miejsca, którego nie ma.

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.git
chimera skills-import chimera-agent/skills/chimera-budget-the-context/SKILL.md

Integralność

SHA-256 pliku w postaci opublikowanej. Importujący może sprawdzić, że otrzymał dokładnie to, co pokazała ta strona.

63f202117c1ffb79dcc016edf37d12760ef2edd00274900bf5177dc1ee6b33f2

Przeczytaj kartę w repozytorium