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.
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
- 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_FRACTIONwchimera/core/context_budget.py). Reszta płaci za dopełnienie i za różnicę między twoim oszacowaniem tokenów a prawdziwym licznikiem dostawcy. - 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.
- 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. Uruchomchimera 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. - 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ąctype,properties,requiredienumnietknięte, żeby wybór narzędzia i poprawność argumentów pozostały bez zmian. Dokładnie to robichimera/tools/schema_compact.py. Jeśli to wciąż za dużo, ogłaszaj mniej narzędzi. - 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ą.
- 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ę.
- Gdy sam szacujesz rozmiar w tokenach, licz ładunek
tool_callstak samo jakcontent. Argumenty narzędzi jadą na wiadomości asystenta i nie ma ich wcontent; oszacowanie rozmiaru czytające tylkocontentzaniż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.gitchimera skills-import chimera-agent/skills/chimera-budget-the-context/SKILL.mdIntegralność
SHA-256 pliku w postaci opublikowanej. Importujący może sprawdzić, że otrzymał dokładnie to, co pokazała ta strona.
63f202117c1ffb79dcc016edf37d12760ef2edd00274900bf5177dc1ee6b33f2