Projekty  /  Autonomiczny agent publikujący

Nic nie jest przypadkowe

Agent, który sam prowadzi publikację na Substacku — pisze notatki, komentuje u innych autorów, odpowiada na reakcje i obserwuje nowe osoby. Działa według harmonogramu, trzy razy dziennie, bez ani jednego pytania do człowieka.

LIVEJawność · PełnaAI · Automatyzacja

01

Publikacja, która prowadzi się sama

Publikacja tłumaczy, dlaczego zwyczajne rzeczy wyglądają tak, jak wyglądają — jaka decyzja, regulacja albo czyj interes za nimi stoi. Notatka o tym, że amerykański znak stop jest jedynym ośmiokątnym znakiem w kraju, bo federalna norma rezerwuje ten kształt wyłącznie dla niego, dzięki czemu pozostaje czytelny, gdy śnieg zakryje napis.

Pisanie tego codziennie nie jest trudną częścią. Trudne jest robienie tego bez nadzoru. System musi zdecydować, co warto powiedzieć, sprawdzić, czy to prawda, opublikować, zauważyć, co wróciło, i wiedzieć, kiedy się nie odzywać — trzy razy dziennie, na własnym serwerze, bez nikogo, kto patrzy.

Moje pierwsze podejście do tego nie zadziałało. Warto powiedzieć dlaczego, bo wszystko, czym jest obecny system, wzięło się z tamtej porażki.

02

Ograniczenie, które ukształtowało wszystko

Pierwsza wersja miała 71 598 linii Pythona, 2 817 testów, 236 wyzwalaczy bazodanowych i 42 migracje schematu. Wyprodukowała dwa artykuły. Ciągle przewracała się o własną infrastrukturę — kolejki zadań, trwałe intencje, dzierżawy, kwalifikacje modeli — z których żadna nie miała nic wspólnego z pisaniem.

Druga wersja zaczęła się od budżetu, nie od listy funkcji.

pierwsza wersja

linii Pythona71 598

plików .py200+

migracji schematu42

wyzwalaczy bazodanowych236

Wynik: dwa artykuły.

druga wersja

linii Pythona6 526

plików .py10

migracji schematu0

wyzwalaczy bazodanowych0

Wynik: konto, które działa codziennie.

budżet złożoności, ustalony przed pierwszą liniąlimitfaktycznie
plików .pymaks. 1010
tabel w baziemaks. 44
warstw abstrakcji między harmonogramem a wywołaniem modelumaks. 11
migracje, wyzwalacze, kolejki zadań, trwałe intencjebrakbrak

Limity zostały zapisane przed jakimkolwiek kodem i nie podlegały negocjacji w trakcie budowy. Ten sam zakres, jedenaście razy mniej jego samego.

Z pierwszej wersji wyszła jeszcze jedna zasada: liczba mieszka w jednym miejscu. Tam, gdzie naprawdę musi istnieć w dwóch — limit czasu przebiegu, który pojawia się i w konfiguracji, i w pliku usługi — test je porównuje i wywala się, jeśli się rozjadą.

03

Co naprawdę było trudne

Czytanie i publikowanie okazały się różnymi problemami. Nie ma tu publicznego API do publikowania, więc agent pracuje tak, jak pracuje człowiek — przez zalogowaną przeglądarkę. Nie spodziewałem się, że czytanie danych platformy i pisanie do niej to nie ten sam przywilej. Podejście, które czyta niezawodnie, może i tak zostać odrzucone, gdy próbuje opublikować. Większość wczesnej pracy poszła na odkrycie tego, a nie na pisanie funkcji.

Sesja jest kruchą częścią. Zalogowana sesja to jedyna zależność, której agent nie potrafi wytworzyć sobie sam. Wygasa, a jej odtworzenie wymaga człowieka — mniej więcej raz na kwartał. To jest uczciwa granica słowa autonomiczny w tym projekcie: system działa bez nadzoru miesiącami, a potem potrzebuje mnie na pięć minut. Kontrola stanu ostrzega czternaście dni przed wygaśnięciem sesji, bo zauważenie tego w dniu, w którym umiera, to zauważenie za późno.

Tempo jest ograniczeniem projektowym, nie ustawieniem. Agent, który pracuje tak szybko, jak technicznie może, jest gorszy od takiego, który tego nie robi — dla platformy, z której korzysta, i dla konta, które prowadzi. System ogranicza, ile robi w ciągu dnia, i rozkłada tę pracę na godziny, a nie na sekundy. Częściej też odmawia, niż działa: komentuje tylko wtedy, gdy ma coś własnego do dodania, a kiedy zdecyduje, że nie, zapisuje powód.

Była droga na skróty i z niej nie skorzystałem. Konto nie ukrywa, czym jest — nigdy nie twierdzi, że jest człowiekiem, a zapytane wprost, nie zaprzecza. Nic w systemie nie jest zbudowane po to, żeby pokonywać zabezpieczenia przed botami; konfiguracja proxy dokładnie do tego była rozważana i została odrzucona. Te ograniczenia kosztują realny zasięg. Wybrałbym je ponownie: konto, które przetrwa, jest warte więcej niż konto, które skaluje się przez miesiąc.

04

Jak przebiega dzień

Sześć kroków i jedna pętla. Pętla jest na diagramie jedyna i to ona jest częścią, która ma znaczenie: to, czego agent uczy się z wczoraj, zmienia to, co robi dzisiaj.

05

Kliknięcie to nie dowód

Przycisk zawsze się klika. Treść nie zawsze dociera. Po każdym działaniu agent pyta platformę, czy to, co przed chwilą zrobił, naprawdę tam jest, i dopiero wtedy zapisuje to jako wykonane.

To nie jest programowanie defensywne dla samego siebie. To właśnie dzięki temu restart w środku przebiegu jest bezpieczny: system nie ufa własnej księgowości bardziej niż temu, co raportuje platforma. Trzy linie z prawdziwego przebiegu, w którym kliknięcie nastąpiło i nic po nim nie poszło:

-- obserwowanie --
  przycisk: 'Subscribe'
  KLIKNIETE, ALE STAN SIE NIE ZMIENIL

Działanie zostało podjęte, nie zostało potwierdzone i w związku z tym nie zostało policzone.

06

Co faktycznie zrobił

Dziewięć kolejnych notatek opublikowanych przez agenta na jego profilu na Substacku, każda z licznikami polubień i odpowiedzi czytelników, a pod nimi karta artykułu.
Dziewięć kolejnych notatek napisanych i opublikowanych bez udziału człowieka. Liczby przy serduszkach i dymkach to prawdziwe reakcje czytelników.

architektura — druga wersja

linii Pythona
6 526
plików .py
10
tabel w bazie
4
testów, każdy z kontrdowodem
139

Stałe tej wersji. Opisują konstrukcję, więc się nie starzeją.

migawka produkcyjna ·

komentarzy, w tylu samych publikacjach
18
koszt przebiegu, USD
0,15–0,27

Osiemnaście komentarzy w osiemnastu różnych publikacjach, bez powtórzeń — efekt zasady zakazującej komentowania dwa razy w tym samym miejscu. Mierzone w krótkim oknie; data jest tu dlatego, że te liczby się zmieniają.

== dzien zamkniety ==
   notatki: 2
   komentarze: 9
   odpowiedzi: 0
   polubienia: 6
== koszt przebiegu: $0.1890 w 59 wywolaniach ==

Ostatnie linie przebiegu. System sam zamyka swój dzień i raportuje, ile wydał.

07

Co już wiem, a czego wciąż nie

Budżet złożoności ustalony przed pierwszą linią jest wart więcej niż jakikolwiek refaktor po niej. Druga wersja nie jest mniejsza dlatego, że ją posprzątałem. Jest mniejsza dlatego, że limity istniały, zanim było co sprzątać.

Test, który nie potrafi wykryć błędu, do którego wykrywania służy, jest gorszy niż brak testu. Każdy test tutaj sprawdza dodatkowo, że wywala się na zepsutej wersji. Ten mechanizm wyłapał dwie usterki, których nikt nie szukał.

Sto dwudziesty siódmy komentarz jest niewidoczny i kosztuje tyle samo co pierwszy. Pierwsza wersja doboru celów sortowała po zaangażowaniu, więc wchodziła prosto w najbardziej zatłoczone wątki. Odwrócenie tego sortowania było zmianą na dwie linie i jedną z bardziej użytecznych rzeczy, jakie zrobiłem.

Wciąż nierozwiązane

  • Pula rozmów jest za wąska. Kanał w czytniku zwraca ich tylko garść, a wyszukiwanie po tych tematach zwraca głównie artykuły. Skrócenie progu świeżości pomogło, ale tym, czego naprawdę potrzeba, jest inne źródło.
  • Wyszukiwanie faktów to około 45% kosztu przebiegu. Potrafi też wrócić z komentarzem zamiast z danymi, co oznacza wyrzucone płatne wywołanie.
  • Agent pracuje siedem dni w tygodniu w równym tempie. Ludzie miewają dni, w których nic nie mówią. To ostatni oczywisty znak rozpoznawczy i nie zdecydowałem, co z tym zrobić.
← Wszystkie projektyStart