Kiedy rój ma przestać: budżet czasu i tokenów zadania

Cela obliczeniowa obok mechanicznego licznika z trzema okienkami, z których jedno pokazuje zero, i opuszczoną czerwoną dźwignią stop

Mała firma zleca rojowi uporządkowanie katalogu produktów: znaleźć duplikaty, poprawić jednostki, oznaczyć pozycje bez dostawcy. Zadanie rusza w piątek po południu. W poniedziałek osoba, która je uruchomiła, patrzy najpierw na rachunek, potem na wynik. Rachunek jest duży. Wynik to katalog uporządkowany do połowy, a druga połowa jest ruszona według wzoru, którego nikt nie umie wyjaśnić.

Rojowi nikt nie powiedział, kiedy ma przestać. Więc nie przestał. Jeden podagent przez większość soboty ponawiał nieudane wyszukiwanie. Drugi przy każdej pozycji od nowa czytał tę samą listę dostawców, bo nic mu nie powiedziało, że lista się nie zmieniła. Planista dopisywał do swojej listy kolejne punkty w miarę odkrywania przypadków brzegowych i lista rosła szybciej, niż malała.

Według zasad, które miał, nikt nie zrobił nic złego. Zasady po prostu nie przewidywały końca.

Prawdziwa przyczyna: cel bez limitu to otwarta pętla

Opis zadania mówi, jak wygląda „zrobione”. Nie mówi, ile wysiłku „zrobione” jest warte. Bez tej drugiej liczby agent ma tylko jeden sposób, żeby zdecydować, czy ma działać dalej: zapytać sam siebie, czy już skończył, a agent w środku trudnej roboty prawie zawsze odpowie, że nie. Wysiłek płynie w zadanie, aż coś spoza zadania, saldo konta albo cierpliwość człowieka, zamknie pętlę.

Dlatego koszt zadania jest najtańszym wczesnym sygnałem, że coś poszło nie tak, o czym pisze tekst agent, który reguluje sam siebie. Budżet zamienia ten sygnał w regułę.

Jak kończy się zadanie bez budżetu

Ponawianie, które nigdy nie odpuszcza. Wywołanie narzędzia się nie udaje, podagent próbuje ponownie, wywołanie nie udaje się tak samo. Każda próba z osobna wygląda rozsądnie. Bez limitu ponowień ta sekwencja nie ma naturalnego końca, a zapis przebiegu wypełnia ten sam krok powtórzony w kółko.

Podagent, który pracuje ciężej, niż jego punkt jest wart. Jeden punkt na liście zasługuje na minutę uwagi. Podagent, który go wziął, tego nie wie, więc spędza godzinę na byciu dokładnym w sprawie, której nikt nie przeczyta.

Plan, który rośnie. Każde odkrycie staje się nowym punktem. Plan, któremu wolno rosnąć bez ograniczeń, to zadanie, które po drodze definiuje się na nowo, a takiego zadania nie da się skończyć.

Pętla narzędzi. Agent czyta plik, uznaje, że potrzebuje drugiego, czyta drugi, uznaje, że znów potrzebuje pierwszego. Pojedyncze wywołanie jest tanie, więc nic nie sygnalizuje wzorca, dopóki licznik nie dojdzie do tysięcy.

Wydawanie, żeby nie pytać. Najtrudniejsza do zauważenia porażka. Rój mógłby się zatrzymać i zadać człowiekowi krótkie pytanie, ale pytanie oznacza przyznanie, że utknął, więc zamiast tego próbuje innego podejścia. I kolejnego. Każde kosztuje więcej niż kosztowałoby pytanie.

Zatrzymanie, którego nie da się wznowić. Gdy pieniądze w końcu się kończą, przebieg jest zabijany z zewnątrz. Nie ma zapisu, które punkty zostały skończone, więc jedyny bezpieczny ruch to zacząć od nowa, czyli wydać te pieniądze drugi raz.

Jak powinien wyglądać budżet

W naszym projekcie budżet jest częścią zadania: zapisany obok celu i rozdzielany w miarę, jak planista dzieli pracę.

Cztery limity, nie jeden. Czas zegarowy, tokeny modelu, wywołania narzędzi i ponowienia na krok. Każdy łapie inną porażkę. Limit ponowień zatrzymuje zacięte wyszukiwanie; limit tokenów zatrzymuje zbyt dokładnego podagenta; limit czasu zatrzymuje zadanie, które po prostu okazało się większe, niż ktokolwiek sądził. Jeden limit na sam koszt przepuszcza pętle, które są tanie na krok.

Każdy podagent dostaje przydział, nie całość. Gdy planista przekazuje punkt, przekazuje razem z nim kawałek budżetu. Podagent, który wyczerpie swój przydział, nie pożycza od innych. Zatrzymuje się, zapisuje to, co ma, i zwraca raport, który o tym mówi: tyle skończyłem, tu utknąłem, to próbowałem. Jego pliki robocze zostają w jego celi KyberCell dla tego, kto następny weźmie ten punkt.

Planista decyduje, co znaczy krótki raport. Ma trzy uczciwe wyjścia. Dać punktowi drugi, jawnie większy przydział, bo pierwsze oszacowanie było błędne. Zawęzić punkt, bo raport pokazuje, że był za duży. Albo oddać punkt KyberBotowi, który zapyta Ciebie. Czego nie robi, to po cichu wydaje resztę przydziału innego punktu.

Poza zakresem znaczy węziej, a nie szybciej. To homeostat ze strony głównej zastosowany do budżetu. Gdy wydatki wychodzą ponad swoją wartość zadaną, rój uruchamia mniej podagentów i robi mniejsze kroki. Nie próbuje zdążyć, dokładając gazu.

Zatrzymanie to krok w zapisie. Zatrzymanie z powodu budżetu trafia do zapisu przebiegu jak każda inna decyzja: który limit został osiągnięty, w którym miejscu planu, z którymi punktami skończonymi. Plik planu jest punktem wznowienia. Człowiek albo późniejszy przebieg może przeczytać plan, zobaczyć odhaczone punkty i ten oznaczony jako zatrzymany, i podjąć pracę stamtąd ze świeżym przydziałem, a nie od zera.

Dla jasności: nic z tego nie jest wydane. Nie mamy jeszcze składni budżetu do pokazania i nie będziemy udawać, że ją mamy. Ustalony jest kształt: budżet mieszka przy zadaniu, dzieli się razem z pracą, a wyczerpanie go jest zapisaną decyzją, a nie awarią.

Test, który możesz zrobić dziś

Zanim dasz jakiemukolwiek agentowi następne długie zadanie, zapisz na kartce cztery liczby: ile powinno trwać, mniej więcej ile może kosztować, ile razy wolno ponowić jeden krok i w którym momencie chcesz zostać zapytany zamiast pozwolić mu działać dalej.

Potem uruchom zadanie i nie wtrącaj się. Gdy się skończy, porównaj kartkę z tym, co się stało.

Jeśli zadanie zatrzymało się samo, przed którąkolwiek z Twoich liczb, i powiedziało dlaczego, masz agenta z budżetem. Jeśli zatrzymało się, bo je zabiłeś albo bo skończyły się pieniądze, masz otwartą pętlę, a liczby na kartce to początek reguły, której brakuje. Gdzie budżet mieści się między planistą a celami, pokazuje strona główna KyberAgent, a co się dzieje, gdy dwaj podagenci w ramach jednego budżetu wracają z różnymi odpowiedziami, opisuje tekst dwa agenty się nie zgadzają.