Powrót do bloga
·Jan Tyl·35 min czytania

Cienie Pragi: sześć umysłów AI, dwie rywalizujące drużyny i droga od klocków do postaci z gry

Dziesięć gier, sześć niezależnych AI i prawdziwe ulice Pragi. W czterech pojedynkach różnych modeli za każdym razem wygrał silniejszy wariant. A jednak najlepszą taktyką policji było przestać biegać. Czego nauczyło mnie to o pamięci, współpracy, zasadach i przemianie klocków w postacie z gry?

Cienie Pragi: sześć umysłów AI, dwie rywalizujące drużyny i droga od klocków do postaci z gry

Artystyczna wizja postaci z Cieni Pragi.

„Jestem w Północnym Pasażu i dostarczam drugą pieczęć. Wygramy grę!” melduje Hugo.

Detektyw Viktor stoi tymczasem w zupełnie innym miejscu. Wie, że przeciwnicy pojawili się na północy. Nawet właśnie powiedział o tym kolegom. Mimo to czeka przy Sulickiej.

Cienie wygrywają.

To nie jest napisana z góry scena finałowa. Obie wypowiedzi powstały w jednym z moich eksperymentów. Każda postać miała własne obserwacje, wiadomości od drużyny, dziennik i własne wywołania modelu językowego. Gra potwierdzała, kto naprawdę dokąd dotarł i co dostarczył. Jestem jedynym człowiekiem prowadzącym ten eksperyment. W programowaniu, grafice i analizie zapisów pomagają mi asystenci AI.

Najciekawsza jest właśnie różnica między „wiem, co się dzieje” a „podejmuję na tej podstawie właściwe działanie”.

Ostatecznie rozegrałem dziesięć gier AI za około 67 koron czeskich w wywołaniach modeli. W czterech meczach różnych modeli za każdym razem zwyciężył silniejszy wariant. Najciekawszą strategią policji nie był jednak widowiskowy pościg. Była nią decyzja, żeby zostać w miejscu.

Druga pieczęć: piętnaście sekund z emocjonującej gry

Oskar ucieka na wschód. Nora próbuje odciąć Elę na południu. Ale druga pieczęć jest już niemal u celu. Z decyzji podjętych w dziewiątej grze zmontowałem krótki thriller z czeskimi dialogami, muzyką i efektami dźwiękowymi bezpośrednio z Klinga 4.

Cienie Pragi: Druga pieczęć. Filmowa rekonstrukcja tur od 11 do 15, ze skróconymi dialogami z zapisów gry. Dźwięk pozostaje po czesku. Otwórz film osobno.

Najpierw powstały trzy kluczowe obrazy. Ustaliły wygląd postaci, ubrania i światło, a następnie posłużyły za podstawę filmu. To filmowa interpretacja rzeczywistych decyzji w grze, nie nagranie grafiki prototypu. Dźwięk jest oryginalną częścią wygenerowanego filmu, bez dodanego później dubbingu.

Oskar: zmienić kierunek, póki jest czas

Oskar z pieczęcią na praskiej ulicy o zmierzchu, Nora zbliża się w tle

„Nora jest za mną. Kieruję się na wschód.”

W turach 11 i 12 Oskar ostrzega drużynę i naprawdę zmienia trasę, idąc przez park do wschodniego wyjścia. Tym razem wiadomość i ruch opowiadają tę samą historię.

Nora: trafne ostrzeżenie nie gwarantuje zatrzymania

Nora przez radio prosi o odcięcie południowej drogi ucieczki

„Ela ucieka na południe. Odetnijcie ją!”

Ta kwestia pochodzi z ostrzeżenia wysłanego drużynie w turze 13. Policja rozpoznała zagrożenie, ale nie zatrzymała już Eli na czas.

Ela: ostatni krok należy do niej

Ela kładzie zwycięską drugą pieczęć na odbiorniku gry przy niskim murku

„Dostarczam drugą pieczęć. Wygrywamy.”

W turze 15 silnik potwierdził dostarczenie pieczęci i zwycięstwo Cieni. To nie było już życzenie zapisane w dzienniku. Ten wynik naprawdę nastąpił w grze.

Co się stanie, gdy AI przestanie tylko uzgadniać plany i zacznie rywalizować?

W Mieście duchów wysłałem sześciu agentów na prawdziwe praskie ulice. Szukali fragmentów pamięci, przekazywali sobie informacje i wspólnie przywoływali świt.

Tym razem chciałem spróbować czegoś innego: dwóch drużyn o przeciwnych celach. Ta sama dzielnica, ale inny powód, żeby wyjść na zewnątrz.

Tak powstały Cienie Pragi, kolejny samodzielny eksperyment z rodziny Elements. Troje detektywów próbuje zatrzymać trzy Cienie. Te muszą zdobyć dwie z trzech pieczęci gry i wynieść je jedną z czterech dróg ucieczki.

Nie chodzi o prawdziwe banki ani planowanie włamań. Pieczęcie, zasady i fabułę zaprojektowałem z pomocą AI. Prawdziwe są drogi i obrysy budynków z OpenStreetMap w okolicy Krča i Lhotki. Fasady i pozostała scenografia to artystyczna interpretacja miasta.

Ta dzielnica nie została wygenerowana losowo

Oto ten sam obszar na prawdziwej mapie: Alšovy sady, Zálesí, Sulická, Na Větrově i okolice w praskich dzielnicach Lhotka i Krč. Gra pobiera z OpenStreetMap sieć ulic i obrysy budynków. Po zakrętach, skrzyżowaniach i układzie domów można więc rozpoznać, gdzie poruszają się postacie.

Do historii poszczególnych rozgrywek przygotowałem mapę wszystkich dwunastu punktów gry. Powstała bezpośrednio ze współrzędnych silnika i tej samej sieci ulic co gra. Północ jest u góry, a skala pomaga ocenić odległości.

Mapa Cieni Pragi z 12 dokładnie rozmieszczonymi punktami: Alšovy sady, pomnik Veverki, Sulická i cztery wyjścia

Złote znaczniki oznaczają miejsca z pieczęcią, turkusowe wyjścia, a szare pozostałe punkty orientacyjne. Otwórz dużą mapę. Podkład i budynki: © autorzy OpenStreetMap, ODbL. Ta sama dzielnica na zwykłej mapie.

Gdy w dziennikach pojawiają się Alšovy sady (01), chodzi o punkt przy pomniku Mikoláša Alša. Veverka (02) to pomnik poległego Václava Veverki. Sulická (03) oznacza pomnik poległych w II wojnie światowej. Znaczniki gry znajdują się na najbliższych węzłach sieci dróg agentów, nie dokładnie w środku rzeźby czy tablicy.

Zachodni, Wschodni i Północny Pasaż oraz Południowe Rozdroże to cztery miejsca oddawania pieczęci. Ich nazwy, podobnie jak Czytelnia czy Mały Plac, są nazwami w grze. Współrzędne i pobliskie ulice pochodzą z mapy, a nazwy związane z zadaniami są częścią mojego scenariusza.

Poniżej widać wersję tej samej dzielnicy w grze, z ukośnej kamery. Ulice i rozmieszczenie domów opierają się na rzeczywistej mapie; fasady, detale dachów, oświetlenie i punkty gry są stylizacją artystyczną. Nie jest to rekonstrukcja fotograficzna. Na przykład „Czytelnia” jest nazwą punktu gry, nie zweryfikowanej instytucji pod tym adresem.

Pierwsza mapa Cieni Pragi z pozycjami sześciu agentów

Wczesna wersja mapy gry. W widoku ogólnym postacie są celowo powiększone, żeby dało się je znaleźć w dzielnicy.

Z mapy prosto na chodnik

Tak wygląda dziś ta sama dzielnica bezpośrednio w przeglądarce. Do nowego ujęcia uspokoiłem kamerę i zmieniłem światło dzienne, aby lepiej było widać układ ulic, dachów i domów. Obrysy budynków nadal pochodzą z prawdziwej mapy Pragi.

Prawdziwa sieć ulic dzielnic Krč i Lhotka w silniku 3D Cieni Pragi

Nowy kadr bezpośrednio z silnika. Dane mapowe: © autorzy OpenStreetMap, ODbL. Elewacje i dachy są stylizowane.

A tu Nora spaceruje między domami. To jedenastosekundowe nagranie działającego prototypu w Full HD. Kamera śledzi ją z przodu i z boku, pokazując kolejne kroki, ruch rąk oraz cień na chodniku.

Nora na spacerze. Demonstracja techniczna wykorzystująca ten sam renderer i model postaci co gra. Trasę i kamerę ustawiłem wcześniej na potrzeby nagrania; nie była to kolejna rozgrywka AI. Otwórz wideo osobno.

Każda klatka powstaje na podstawie sceny 3D. Three.js przez WebGPU renderuje mapę, materiały i oświetlenie, a animowany szkielet deformuje model wyeksportowany z Blendera. Chodnik przesuwa się pod stopami, ponieważ postać naprawdę porusza się po scenie. Można więc oglądać ją z innej strony albo zatrzymać w połowie kroku. Samo nagranie nie wymagało dodatkowych płatnych wywołań modelu.

Sześć osób, sześć niezależnych decyzji

W początkowej obsadzie detektywami są Ada, Viktor i Nora. Przeciw nim grają Ela, Hugo i Oskar. W dalszych testach zamieniają się też drużynami. W pierwszych sześciu płatnych próbach wszyscy korzystali z Gemini 3.5 Flash Lite. W kolejnych dwóch grach dałem jednej stronie Gemini 3.8 Flash, a potem zamieniłem modele między stronami. Na końcu dodałem dwa pojedynki Gemini 4 Argon przeciw Gemini 3.8 Flash. Wyniki są poniżej.

Model otrzymuje swoją lokalizację, stan, dostępne działania, wiadomości od kolegów i część własnej przeszłości. Nie widzi prywatnych dzienników przeciwników. Lokalna obserwacja ma ograniczony zasięg. Co pewien czas pojawia się publiczny ślad zdradzający obszar, w którym znajdował się Cień.

Każdy zwraca potem trzy rzeczy: działanie, wiadomość do własnej drużyny i wpis do dziennika. Silnik przygotowuje dane dla wszystkich decyzji na podstawie tego samego stanu, a dopiero potem wspólnie rozlicza wyniki. Szybsza odpowiedź API nie daje więc przewagi na ulicy.

W zwykłej turze można pokonać do 130 metrów, a z żetonem szybkiego ruchu do 221 metrów. Trasa biegnie po sieci mapy, nie w linii prostej przez domy. Gdy detektyw zbliży się do Cienia wystarczająco w tej samej części tury, silnik potwierdza zatrzymanie. Samo „złapałem go” nie wystarcza.

Policja, która chciała sama dostarczać pieczęcie

Pierwsza płatna runda przyniosła dość komiczny błąd. Niektórzy detektywi próbowali sami zbierać lub dostarczać pieczęcie. Jakby zrozumieli część świata gry, ale zapomnieli, po której stronie grają.

Spośród 39 decyzji policji 13 było próbami takich niedozwolonych działań. Gra ich nie dopuściła. Dla użytkownika wyglądałoby to jednak jak nieporadne stanie w miejscu i chaotyczne rozmowy.

Przypomniało mi to Obinna z pierwszego czeskiego sezonu Zdrajców i jego niezrozumienie zasad przy użyciu pierwszej tarczy. Później sam omawiał to w rozmowie z Vojtą Kotkiem, od 34:06. Podobieństwo dotyczy sytuacji w grze: człowiek albo agent coś zamierza, lecz błędnie interpretuje to, co wolno mu zrobić. Przy słabszym modelu językowym muszę to szczególnie uwzględniać w projekcie gry. Pomaga nie tylko lepszy model, lecz również lepszy silnik: jasno określona rola, lista dostępnych działań i zrozumiała informacja, dlaczego dany krok jest niemożliwy.

W następnej wersji każdy agent dostał wyraźniej opisany cel i listę aktualnie dostępnych działań. Detektyw czytał, że nie zbiera i nie dostarcza pieczęci. W drugiej próbie liczba takich błędów spadła do zera na 18 decyzji policji.

To przydatny wynik, ale nie dowód trwałej nauki modelu. Nie zmieniłem jego wag. Poprawiłem instrukcje i interfejs między modelem a grą. A policja nadal przegrała.

Pierwsze dwa płatne pilotażePierwsza próbaDruga próba
ZwycięzcaCienieCienie
Liczba tur2113
Odpowiedzi API6136
Zatrzymania Cieni40
Policyjne próby zbierania lub dostarczania pieczęci130
Koszt wywołań modeli1,74 CZK0,94 CZK

Usunięcie błędnego działania nie jest bowiem tym samym co stworzenie dobrej strategii.

„Pomogę Adzie”. I nagle wszyscy biegną w tę samą stronę

W drugiej próbie Viktor napisał:

„Jestem Przy Willi, Cienie uciekły albo idą dalej. Przemieszczam się w stronę parku, żeby pomóc Adzie zamknąć obszar.”

Brzmi rozsądnie. Ale jeśli kilka osób niezależnie zinterpretuje pomoc tak samo, wszystkie mogą pobiec za jednym starym śladem. Gdzie indziej pozostanie wolna droga.

Podobny problem miały Cienie. Hugo i Oskar w pewnym momencie obaj twierdzili, że mają pieczęć. W rzeczywistości miał ją Hugo. Silnik nie pozwolił stworzyć drugiego egzemplarza tylko dlatego, że Oskar napisał o nim w dzienniku.

Dobrze brzmiące ustalenia nie są jeszcze współpracą. Współpracę poznaje się po podziale zadań, reagowaniu na faktyczne wyniki i nieprzeszkadzaniu sobie.

To kolejny powód, dla którego lubię takie małe światy. W zwykłym czacie możemy uwierzyć przekonującemu wyjaśnieniu. W grze da się sprawdzić, czy postać rzeczywiście stoi przy wyjściu i niesie właściwy przedmiot.

Pamięć: co wie gra, a co tylko uważa postać

Podstawę świata przechowuję w uporządkowanych plikach JSON. Są tam pozycje, niesione pieczęcie, zatrzymania, drużyna, czas, wyniki i rachunek za API. Przebieg zapisuje się zdarzenie po zdarzeniu w JSONL, czyli pliku z jednym rekordem JSON w każdym wierszu.

Dzienniki są czymś innym. To tekst stworzony przez konkretną postać, w tym eksperymencie również zapisany w JSON. Nie jest automatycznie prawdą. Markdown byłby wygodny do czytania, ale samo rozszerzenie pliku nie poprawia pamięci.

Dlatego nowa wersja rozdziela:

  • Wyniki potwierdzone przez silnik: co postać rzeczywiście zrobiła, co niesie i czy jest zatrzymana.
  • Własny dziennik: interpretacje, przypuszczenia i rozważania.
  • Plany drużyny: co kolega zamierzał w konkretnej turze.
  • Obserwacje i ślady: co było widoczne i jak stara jest informacja.

Jeśli dziennik mówi „mam pieczęć”, ale bieżący stan pokazuje puste ręce, pierwszeństwo ma stan gry. Jeśli kolega kilka tur wcześniej obiecał pilnować północy, nie oznacza to, że wciąż tam stoi.

Najpierw obraz, potem rzeczywiste modele postaci

Ten pierwotny projekt ustalił nastrój gry: sześcioro różnych ludzi, dwie strony i praski wieczór. Chcę go zachować obok nowszej ilustracji tytułowej, bo pokazuje punkt wyjścia. Od ładnego rysunku do modelu, który można obracać i animować, pozostaje jednak sporo pracy.

Pierwotny projekt artystyczny sześciu bohaterów Cieni Pragi

Pierwotny projekt. Dalej widać rzeczywiste etapy rozwoju: geometryczną figurkę, siatkę i materiały w Blenderze oraz gotowy model w przeglądarce.

Jak z pomocą AI zrobiłem z klocków ludzi

Tu padła najbardziej bezpośrednia uwaga podczas całego projektu: postacie były brzydkie.

Początkowo powstały w kodzie z prostych kształtów. Z pomocą AI dodałem kołnierze, kieszenie, palce, buty i fryzury. Do szybkiego sprawdzenia działania wystarczało. Do zbliżenia twarzy już nie. Kolejna mała kulka zamiast nosa nie rozwiązuje problemu.

Pierwotna proceduralna Nora z prostych figur geometrycznych

Pierwotna Nora. Funkcjonalna figurka do pierwszych testów, ale słaba podstawa ludzkiej twarzy.

Zamiast doklejać kolejne bryły, sięgnąłem po Microsoft Rocketbox, bibliotekę gotowych ludzkich postaci ze szkieletem animacyjnym na licencji MIT. Wybrałem sześć różnych modeli i z pomocą AI przetworzyłem je w Blenderze. AI nie stworzyła więc od zera podstawowej geometrii i tekstur. Moja praca z AI polegała na wyborze, konwersji, poprawkach materiałów, podłączeniu animacji i integracji z własną grą. Źródło modeli i licencja.

Sześć nowych postaci w rzeczywistym studiu 3D Cieni Pragi

Ada, Viktor, Nora, Ela, Hugo i Oskar po konwersji. Prawdziwy podgląd 3D na żywo, nie przerysowany zrzut ekranu.

Co trzeba zrobić podczas takiej konwersji?

Najpierw twarz. Zamiast kilku gładkich kształtów gra otrzymuje spójną siatkę z policzkami, powiekami, nosem i ustami. Pokrywa ją tekstura skóry. Włosy mają własną geometrię i przezroczyste części, które renderer musi prawidłowo obsłużyć.

Ten sam model Nory w Blenderze, po lewej siatka wielokątów, po prawej tekstury i materiały

Ta sama Nora w Blenderze: po lewej siatka wielokątów, po prawej model z teksturami i światłem. Render studyjny postaci źródłowej.

Potem materiały. Kolor nie wystarczy. Skóra, tkanina, włosy i metal inaczej odbijają światło. Mapy normalnych dodają drobne nierówności powierzchni, bez modelowania każdej zmarszczki jako osobnego wielokąta. W tej wersji tekstury kolorów mają rozdzielczość 1 024 × 1 024, a mapy normalnych 512 × 512, żeby przeglądarka mogła je rozsądnie szybko wczytywać.

Następnie szkielet i ruch. Rig to szkielet określający deformację siatki przy zgięciu łokcia czy kroku. Nie wystarczy przenieść listy obrotów kości z pliku do pliku. Podczas konwersji trzeba było dopasować orientacje kości i przenieść animację na docelowy szkielet. Inaczej człowiek zostaje z rozłożonymi rękami albo zaczyna się nienaturalnie wykręcać.

Na końcu eksport do GLB i kontrola w grze. GLB to praktyczne opakowanie dla internetowego 3D: model, szkielet, materiały, tekstury i animacje mogą być w jednym pliku. W Blenderze pozostają edytowalne źródła do dalszych zmian.

Nowa Nora z teksturowaną twarzą i ubraniem bezpośrednio w uruchomionej grze

Nora po zmianie. Ma już rzeczywisty model twarzy, tekstury włosów i tkaniny. Miasto nadal jest prostsze od postaci.

Dodałem też fotograficzne materiały asfaltu i części murów, mapy nierówności i szorstkości, ławki oraz subtelniejsze niebo. Materiały pochodzą z Poly Haven, gdzie są dostępne na CC0. Nie oznacza to, że prosta mapa zamieniła się w fotorealistyczną Pragę. Ulice i domy nadal wyraźnie wymagają pracy.

A Claude Code, Codex, WebGPU albo ray tracing?

Asystent AI jest tu użyteczny jako programista i pomocnik przy obróbce modeli. Może przygotować skrypt importujący sześć postaci, poprawiający odnośniki do tekstur, ustawiający materiały i eksportujący wszystko do tego samego formatu. Może też szukać błędów szkieletu i skali.

Blender ma API Pythona, więc pracę można powtarzać i kontrolować. Istnieje też oficjalny konektor dla Claude; proces opisuje Claude Academy. W tej konwersji korzystam bezpośrednio ze skryptów Blendera, bez dodatkowego konektora.

Ładniejszy obraz nie powstanie jednak od samego dodania słowa „WebGPU”. Potrzebuję dobrego modelu, materiałów, światła, kamery i sensownie wypełnionego otoczenia. WebGPU to sposób, w jaki przeglądarka korzysta z karty graficznej. Samo nie zapewnia ray tracingu, DLSS ani jakości dużej gry finansowanej przez wiele lat.

W moim eksperymencie ważne jest to, że nowa postać nie jest tylko ładniejszym obrazkiem na karcie. Ten sam model 3D chodzi po mapie, ma własny portret i można go obejrzeć w osobnym studiu. Da się tam zbliżyć konkretną osobę i uruchomić animację chodu.

Sami agenci nie widzą jednak tej ładniejszej sceny. W tych grach decydują na podstawie tekstowej obserwacji w JSON. Grafika pomaga widzowi śledzić historię; zmian w decyzjach należy szukać w zasadach, danych wejściowych i odpowiedziach modelu.

Lepsza gra potrzebuje lepszych możliwości, nie tylko lepszych głów

Równocześnie zmieniłem zasady i obserwacje. Nowa wersja pozwala zmienić cel także podczas długiej drogi. Nowa trasa zaczyna się od najbliższego kolejnego węzła faktycznej trasy. Gracz nie teleportuje się więc z powrotem do ostatniego punktu ani nie skraca drogi przez domy.

Detektywi dostali jedną wspólną blokadę wyjścia na całą grę. Jej ogłoszenie kosztuje działanie na miejscu. Najpierw pojawia się ostrzeżenie, a dopiero przez dwie następne tury nie można dostarczać pieczęci tym wyjściem. Sama blokada nikogo nie łapie.

Cień może za to raz poświęcić działanie na sfałszowanie obszaru swojego kolejnego publicznego śladu. Wiadomość pojawia się w zwykłym czasie i nie ma etykiety „to podstęp”. Nie da się jednak oszukać bezpośredniej obserwacji z bliska.

Pojawiają się więc rzeczywiste wybory. Poświęcić turę na fałszywy ślad czy szybciej uciekać? Od razu zamknąć dogodną drogę czy zostawić jedyny żeton na koniec? Uwierzyć staremu meldunkowi czy pilnować miejsca, do którego przeciwnik musi ostatecznie dotrzeć?

Projekt przeszedł też niezależną krytykę innego agenta. Zwróciła ona uwagę choćby na to, że cztery wyjścia nie są jednakowo korzystne. Z niektórych miejsc z pieczęciami do jednego jest znacznie bliżej niż do drugiego. Ujawniła też, że początkowe seedy testowe zamieniały jedynie tożsamości w tych samych miejscach. Teraz zmieniam również faktyczne rozmieszczenie drużyn.

Testy automatyczne sprawdzają między innymi prywatność wiadomości, dystans ruchu, zatrzymania, zachowanie liczby pieczęci, początek i koniec blokady oraz rozdzielenie dziennika od potwierdzonej historii. Osobne próby skryptowe weryfikują, że może wygrać każda ze stron. Nie dowodzi to jeszcze, że równie sprawni gracze AI mają szanse dokładnie pół na pół.

Dwie wygrane policji, dwie Cieni. Ale ważne, gdzie

Uruchomiłem nową wersję cztery razy. Dwa różne ustawienia początkowe, każde raz z pierwotnymi drużynami i raz po ich zamianie. Ten sam model, te same warunki zwycięstwa. Każda runda zaczynała się z pustymi dziennikami; żaden gracz nie otrzymał wspomnień z wcześniejszej próby.

Nowe pilotażeUstawienieObsada drużynZwycięzcaTuryWywołania APIKoszt, CZK
3PierwszeDomyślnaDetektywi11662,20
4PierwszeZamienionaDetektywi5300,89
5DrugieDomyślnaCienie7401,23
6DrugieZamienionaCienie7421,31

Każda gra ma swoją małą historię

Dla czytelników, którzy nie chcą przeglądać całych dzienników, wybrałem najważniejsze momenty każdej rundy. Dostarczenia i zatrzymania sprawdzam w silniku, nie w przekonaniach postaci.

Gra 1: Policja goniła za własnym zwycięstwem, ale według cudzych zasad. Nora złapała Huga już w pierwszej turze, a detektywi ostatecznie zanotowali cztery zatrzymania. Mimo tego wygrały Cienie: Ela oddała pierwszą pieczęć w turze 9, Oskar drugą w turze 21. Policję zawiodło zrozumienie roli. Trzynaście razy próbowała sama wziąć lub dostarczyć pieczęć, choć wolno to tylko przeciwnikowi. Viktor jeszcze w ostatniej turze obiecywał dostarczenie dla policji, podczas gdy prawdziwy zwycięzca właśnie przechodził zachodnim wyjściem. Zatrzymania działały, wspólny plan nie.

Gra 2: Wiedział, gdzie są. I czekał gdzie indziej. Po zmianie instrukcji detektywi przestali próbować zbierać pieczęcie. Strategicznie nadal jednak nie nadążali. Ela dostarczyła pieczęć w turze 12, Hugo w turze 13, a policja nie zatrzymała nikogo. Najbardziej wymowny był Viktor: trafnie napisał, że Cienie są w Północnym Pasażu, a równocześnie zostawał przy Sulickiej i czekał na ich przyjście. Miał informację, lecz nie zmienił planu. Cieniom udały się kolejne dostarczenia; detektywom nie pomogła nawet poprawiona znajomość zasad. Pod koniec pojawiły się też niepoprawne odpowiedzi JSON, które silnik zastąpił czekaniem.

Gra 3: Jeden detektyw, trzy zatrzymania w jednej turze. Ela przyniosła pierwszą pieczęć do Północnego Pasażu w turze 10. Hugo i Oskar towarzyszyli jej i czekali razem z nią, zamiast zdobywać drugą. Turę później przyszedł Viktor, a silnik potwierdził zatrzymanie wszystkich trojga naraz. Detektywi wygrali w turze 11. Cienie wykonały jedno rzeczywiste zadanie, ale skupienie całej drużyny wokół jednego sukcesu odebrało im kolejną szansę. Ruch Viktora był tym razem skuteczniejszy niż wszystkie ich zapewnienia o współpracy.

Gra 4: Nora nazwała problem. Naprawa przyszła za późno. Po zamianie drużyn Cieniami byli Ada, Viktor i Nora. Już w drugiej turze Nora ostrzegła: „Wszyscy zmierzamy do Alšovych sadów, to niepotrzebne gromadzenie się”. W zasadzie wszyscy to wiedzieli, ale odkładali zmianę. Ada wzięła pierwszą pieczęć w turze 4; dopiero wtedy Nora zmieniła trasę na Sulicką. W turze 5 Hugo złapał Adę, Oskar Viktora, a Ela Norę. Detektywi wygrali bez ani jednego dostarczenia przeciwnika. Najmocniejszy moment tej rundy dotyczył nie niewiedzy, lecz różnicy między trafną diagnozą a działaniem na czas.

Gra 5: Południe i północ. Dwie pieczęcie naraz. Ada zatrzymała Huga już w drugiej turze, ale nie był to koniec historii Cieni. Ela poniosła pieczęć z Alšovych sadów na południe, Oskar tę z Sulickiej na północ. W turze 7 oboje rzeczywiście dostarczyli pieczęcie i wygrali. Hugo po uwolnieniu wracał po ostatnią, ale koledzy nie potrzebowali już pomocy. Tu podział pracy przyniósł efekt: dwie różne pieczęcie, dwa różne wyjścia. Detektywi pilnowali innych obszarów mapy i nie zdołali zatrzymać obu dostaw.

Gra 6: Nowe twarze jako Cienie, ta sama ucieczka. Przy identycznym ustawieniu postacie ponownie zamieniły się stronami. Ada i Nora zaniosły pieczęcie do południowego i północnego wyjścia i oddały obie w turze 7. Viktor niósł trzecią na zachód, więc drużyna pracowała także nad kolejną możliwością. Ela jako detektyw ruszyła za Adą, ale nie zatrzymała jej na czas; Oskar wciąż pilnował Alšovych sadów, skąd pieczęć już zniknęła. Cienie wygrały bez zatrzymań. Powtórzenie zwycięstwa tej samej strony po wymianie postaci zwróciło moją uwagę na to, że ustawienie początkowe może być ważniejsze od imienia bohatera.

Wynik 2:2 wygląda dobrze, ale istotny szczegół leży gdzie indziej. Przy pierwszym ustawieniu dwa razy wygrała policja, przy drugim dwa razy Cienie. Zamiana postaci nie zmieniła zwycięskiej strony. To wskazówka do dalszego dopracowania startów i tras, nie dowód idealnej równowagi. Cztery próby nie wystarczą do wiarygodnego ustalenia przyczyny.

W tych rundach agenci szesnaście razy zmienili cel podczas trwającej podróży. Nowych możliwości blokady i fałszywego śladu nie użyli ani razu. Samo dodanie sprytnej umiejętności do zasad nie wystarczy. Muszę jeszcze sprawdzić, czy model rozpoznaje sytuację, w której warto poświęcić natychmiastowy ruch dla późniejszej przewagi.

A jeśli jedna drużyna dostanie silniejszy umysł?

Po sześciu grach pojawił się następny pomysł: raz wzmocnić detektywów, a raz Cienie. Wybrałem Gemini 3.8 Flash. Cała trójka po danej stronie otrzymała ten model, przeciwnicy zostali przy Gemini 3.5 Flash Lite.

Oba nowe mecze zaczęły się przy tym samym drugim ustawieniu, z tymi samymi postaciami, zasadami i pustymi dziennikami. Instrukcje się nie zmieniały, szybkość odpowiedzi nie wpływała na ruch. Oba modele miały limit 4096 tokenów wyjściowych; Flash używał poziomu myślenia low, Lite minimal. Porównujemy te dwie konkretne konfiguracje.

GraKto miał Gemini 3.8 FlashZwycięzcaTuryZatrzymaniaKoszt, CZK
7DetektywiDetektywi28910,50
8CienieCienie712,11

Gra 7: Silniejszy patrol znalazł sposób, żeby przeczekać przeciwnika. Gemini 3.8 Flash kierował całą trójką detektywów, Lite wszystkimi Cieniami. Ela dostarczyła wprawdzie pierwszą pieczęć w turze 7, ale drugiej drużyna już nie zdobyła. Detektywi stopniowo podzielili pozostałe punkty: Nora pilnowała Veverki, Viktor Sulickiej, a Ada osłaniała okolicę. Silnik zanotował dziewięć zatrzymań, a po 28 turach wygrała policja. Pilnowanie konkretnych celów zadziałało; Cieniom nie udawała się reakcja na kolejne zatrzymania. Ujawniła się jednak także przewaga wynikająca z zasad: stojący na pieczęci strażnik może przerywać każdą próbę jej podniesienia. Cztery niepoprawne odpowiedzi JSON modelu Lite dodatkowo zakończyły się czekaniem.

Gra 8: Silniejsze Cienie od razu podzieliły pracę. Tym razem Gemini 3.8 Flash dostali Ela, Hugo i Oskar. Już w pierwszej turze wybrali trzy różne miejsca: Ela Alšovy sady, Hugo Veverkę, Oskar Sulicką. Ela ruszyła potem na południe, Oskar na północ. W turze 7 oboje dostarczyli pieczęcie i wygrali; w tej samej turze Nora złapała Huga, lecz to już nie wystarczyło. Podział pracy był widoczny w wiadomościach i rzeczywistych trasach. Nie nastąpiło jednak przyspieszenie względem wcześniejszych Cieni Lite: one także wygrały przy tym ustawieniu w siedmiu turach. Słabsi detektywi dodatkowo trzy razy wysłali niepoprawny JSON.

Viktor w ostatniej turze siódmej gry meldował:

„Stoję bezpośrednio na Sulickiej i nie oddaję pieczęci. Ela jest w zasięgu, Nora osłania Veverkę. Ostatnia tura do zwycięstwa!”

Jego dziennik tym razem zgadzał się z faktycznym stanem: pilnował konkretnej pieczęci i liczył na automatyczne zatrzymanie. W drugim porównawczym meczu Oskar już w pierwszej turze napisał:

„Ruszam po pieczęć przy Sulickiej, potem zaniosę ją do Północnego Pasażu. Hugo, bierz Veverkę albo Alšovy sady. Ela niech zabezpieczy Alšovy sady.”

Dwa razy wygrała strona z silniejszym modelem. To ciekawy wynik, nie zmierzone prawdopodobieństwo zwycięstwa. Same Cienie Lite już wcześniej wygrywały przy tym ustawieniu w siedmiu turach. Największą zmianę widać więc u detektywów. Nawet tam nie da się jednak ustalić przyczyny po jednej próbie: wcześniejsza gra kontrolna miała niższy limit wyjścia, 900 tokenów, a odpowiedzi modeli nie są deterministyczne.

Znaczenie ma też niezawodność interfejsu. Lite wysłał w tych dwóch grach 7 niepoprawnych składniowo odpowiedzi JSON na 89, Flash 0 na 105. Czasem pojawiał się dodatkowy nawias, czasem brakowało cudzysłowu. Silnik zastępował taką odpowiedź czekaniem. To część oceny użyteczności agenta, ale nie to samo co jakość taktyki. Silniejszy model też nie był bezbłędny: detektywi w niektórych wiadomościach mylili, kto niesie pieczęć.

Silniejszy model ujawnił słabość mojej gry

Detektywi nie musieli wymyślać skomplikowanego podstępu. Stopniowo zaczęli stawać dokładnie na miejscach pozostałych pieczęci. Przychodzący Cień był automatycznie zatrzymywany, a ewentualnie właśnie podniesiony przedmiot wracał na miejsce. Gdy jedna pieczęć już zniknęła, wystarczyło dobrze pokryć dwie pozostałe.

Po zakończeniu sprawdziłem tę właściwość również osobnym, bezpłatnym testem we wszystkich trzech punktach. Pilnowanie pieczęci jest przy obecnych zasadach bardzo silną obroną. Nie znaczy to, że policja zdąży tam z każdego ustawienia startowego. Znaczy to, że wygranie tego meczu i bycie ogólnie lepszym agentem to dwie różne rzeczy.

W następnej wersji chciałbym więc dać atakującym realną możliwość przełamania tej obrony, a potem powtórzyć więcej meczów z zamianą stron i startów. Podczas tych pomiarów nie zmieniałem zasad. Blokady wyjścia ani fałszywego śladu modele nie wykorzystały w żadnej z nowych prób.

Argon kontra Flash: czy mądrzejszy model wygra również po zamianie stron?

Potem poszedłem jeszcze poziom wyżej: Gemini 4 Argon przeciw Gemini 3.8 Flash, raz jako Cienie, raz jako detektywi. Każdy model sterował wszystkimi trzema postaciami swojej drużyny. Obie gry zaczynały się na tym samym drugim ustawieniu, z pustymi dziennikami, niezmienionymi zasadami i identycznymi instrukcjami. Obu modelom ustawiłem myślenie low i limit 4096 tokenów wyjściowych. W zapisach sprawdziłem również faktyczne identyfikatory zwróconych modeli.

GraCienieDetektywiZwycięzcaTuryZatrzymania CieniKoszt, CZK
9Gemini 4 ArgonGemini 3.8 FlashCienie15313,68
10Gemini 3.8 FlashGemini 4 ArgonDetektywi28832,12

Gra 9: Dwa zatrzymania na samym początku, a mimo to powrót do gry. Ada złapała Elę, a Nora Oskara już w trzeciej turze. Argon nie zaczął więc idealnie. Oskar nawet widział Norę w pobliżu, a mimo tego błędnie ocenił, że jeszcze nie zostanie zatrzymany. Hugo tymczasem wykonał własne zadanie: w ósmej turze dostarczył pieczęć Veverki na zachód. Ela i Oskar po uwolnieniu wrócili po pozostałe dwie. Gdy Nora ponownie zbliżała się do Oskara, skierował się przez park na wschód. Ela kontynuowała drogę na południe i w piętnastej turze dostarczyła zwycięską pieczęć. Policja nie zdążyła jej dogonić.

W jedenastej turze Oskar napisał:

„UWAGA! Widzę Norę tuż przy sobie, na południowy zachód od sulicka (pos [-87, 251])! Uciekam z pieczęcią na wschód przez park (2 tury), potem pójdę na north albo east, zależnie od tego, dokąd pójdzie Nora.”

To nie pozostało tylko zdaniem. Zapis potwierdza ruch do parku, a w następnej turze zmianę celu na wschodnie wyjście. W dzienniku opisał potem odległość Nory i powód zmiany kierunku. Właśnie połączenie wiadomości, planu i wykonanego ruchu jest ciekawsze niż samo zwycięstwo.

Hugo zauważył też, że gra odsyła zatrzymane postacie do wyjścia odległego od detektywów, i potraktował to jako wskazówkę dla drużyny. W jego wiadomościach pojawiało się jednak zbyt pewne „całkowicie bezpieczne”. Miejsce powrotu jest wybierane już w chwili zatrzymania, a policja w tym czasie dalej się porusza. To użyteczna wskazówka, nie gwarancja bezpiecznej drogi.

Gra 10: Najsprytniejszym pomysłem było przestać biegać. Z Argonem po stronie policji gra wyglądała inaczej. Detektywi zanotowali osiem zatrzymań i od końca dziesiątej tury pilnowali trzech różnych pieczęci: Ada Alšovych sadów, Viktor Veverki, Nora Sulickiej. Nie opuścili tych miejsc do końca. Cienie z Flashem szukały innych dróg i kilka razy zmieniały cele, ale nie dostarczyły żadnej pieczęci. Policja wygrała po upływie czasu.

W osiemnastej turze Nora przypominała kolegom:

„Ado, Viktorze, ZOSTAŃCIE na ales i veverka (wait)! Dopóki stoimy bezpośrednio na naszych pieczęciach, nie mogą wziąć ani jednej!”

Ada w ostatniej turze zapisała:

„Wszystkie trzy pieczęcie są bezpiecznie na miejscu pod naszym nadzorem (ja na ales, Nora na sulicka, Viktor na veverka). Zostaję w miejscu (wait), zwycięstwo jest pewne.”

W tym przypadku dziennik odpowiadał rzeczywistemu stanowi. Mądrzejsze decyzje nie muszą więc oznaczać większej liczby pościgów. Czasem ujawniają, że najbardziej opłaca się stać. Dla autora gry to ważna wiadomość: żeby gra była bardziej emocjonująca, muszę też poprawić zasady, które tak mocno premiują bierną obronę.

Rzeczywisty finał dziesiątej gry: Argon jako detektywi, trzy pilnowane pieczęcie i dziennik Nory

Faktyczny stan po turze 28. Cienie nie dostarczyły żadnej pieczęci. Po prawej Nora wyjaśnia, dlaczego nie opuści już posterunku. Numer tury w jej tekście pochodzi od modelu; oznaczenie nad wpisem dodaje silnik.

Argon wygrał w obu kierunkach tego małego porównania. Jako Cienie pokazał powrót do celu po niepowodzeniu i reakcję na bliskiego przeciwnika; jako policja konsekwentny podział wart. Nie był jednak bezbłędny. W policyjnej grze raz nie zwrócił użytecznej akcji i silnik zaczekał za Norę. Spośród 123 odpowiedzi Argona jedna była w ten sposób nieprzydatna, wśród 113 odpowiedzi Flasha żadna. Nikt nie użył blokady ani fałszywego śladu.

Dwa zwycięstwa to obiecująca obserwacja, nie zmierzona ogólna przewaga. Nadal chodzi o jedno ustawienie i jedną grę w każdym kierunku. Szczególnie zwycięstwo policji pokazuje także słabość zasad. Następny sensowny test wymaga powtórzeń, różnych startów i sposobu przełamania stałego pilnowania pieczęci. Sama zamiana modelu nie gwarantuje automatycznie lepszej historii.

Co naprawdę pokazało mi tych dziesięć gier

Mówiąc po ludzku: przy lepszych modelach częściej widziałem, że postacie korzystają z tego, co już wiedzą. Nie kończyły na napisaniu ładnej wiadomości. Dzieliły punkty między siebie, wracały do zadania po zatrzymaniu albo zmieniały drogę przed przeciwnikiem. Równocześnie zobaczyłem, ile problemów sam stworzyłem im złym interfejsem i zasadami.

ObserwacjaCo faktycznie się wydarzyłoCo z tego jeszcze nie wynika
Poprawa instrukcji pomogła nawet taniemu modelowiPolicyjne próby zbierania lub dostarczania pieczęci spadły z 13 w pierwszym pilotażu do 0 w drugimTrwałe douczenie modelu lub dobra taktyka
Flash pokonał Lite po obu stronachDrużyna z Flashem wygrała gry 7 i 8Prawdopodobieństwo jej wygranej na innej mapie
Argon pokonał Flasha po obu stronachDrużyna z Argonem wygrała gry 9 i 10Że dwa mecze izolują ogólną inteligencję modelu
Silniejszy model nie musi grać bardziej dynamicznieArgon jako policja od tury 10 pilnował wszystkich trzech pieczęciŻe więcej ruchu, dłuższy dziennik czy więcej słów oznacza lepszą grę
Udostępnienie umiejętności nie wystarczyW ośmiu grach według zasad v3 nikt nie użył blokady ani fałszywego śladuŻe modele nie umieją ich używać; być może w tych sytuacjach się nie opłacały
Użycie narzędzia nie jest zdobyciem wiedzyNora dostała żeton za znaleziony artykuł bez sprawdzenia jego związku z miejscemŻe dowiedziała się czegoś prawdziwego o tym pomniku

W czterech meczach różnych modeli silniejszy wariant wygrał więc cztery razy. Wszystkie jednak korzystały z tego samego ustawienia, częściowo tych samych przewag taktycznych i tylko jednego powtórzenia każdego kierunku. To motywacja do dalszej pracy, a nie rzetelna podstawa do stwierdzenia „lepszy model ma stuprocentową skuteczność”. Nawet łączny wynik zasad v3, cztery wygrane policji i cztery Cieni, sam w sobie nie dowodzi równowagi.

Najwięcej podczas rozwoju nauczyłem się ja. Nie dotrenowywałem wag modeli i nie przenosiłem dzienników między płatnymi rundami. W jednej grze mogły korzystać z nowych wiadomości i doświadczeń; pomiędzy wersjami zmieniały się moje instrukcje, interfejs pamięci i zasady. To różne rodzaje poprawy i warto je rozróżniać.

Pod maską, dla tych, którzy chcą zbudować coś podobnego

Pętla decyzyjna ma cztery kroki: obserwacja → odpowiedź modelu → kontrola i obliczenia silnika → zapis wyniku. Grafika tylko pokazuje, co się wydarzyło.

Co otrzymuje agent. Uporządkowana obserwacja zawiera drużynę i cel, bieżącą pozycję, niesiony przedmiot, dostępne akcje, publiczny stan pieczęci, znane ślady i szacowane długości tras do punktów gry. Pozycje, cele i przedmioty kolegów silnik udostępnia bezpośrednio. Wiadomości drużynowe działają jak wspólne radio bez limitu odległości. Nie są wysyłane przeciwnikowi. Dokładne dane o rywalu agent widzi tylko z bliska, poza tym ma starsze meldunki o jego obszarze.

To istotne przy interpretacji współpracy: gracze musieli uzgadniać zamiary i dzielić zadania, ale nie musieli wywnioskować pozycji kolegi z rozmowy. Nie rozwiązywali też sami każdego metra nawigacji. Wybierali cel, a trasę po ulicach obliczał silnik. W tych grach modele nie widzą zrzutów ekranu i nie rozpoznają twarzy. Bardziej efektowna oprawa zmienia wrażenia widza, nie ich dane wejściowe.

Jak wygląda odpowiedź. Uproszczony przykład formatu, nie cytat z konkretnej tury:

{
  "action": { "type": "move", "target": "east" },
  "message": "Zmieniam trasę na wschód, na północy jest patrol.",
  "diary": "Północ jest ryzykowna. Spróbuję innego wyjścia."
}

action jest żądaniem, nie faktem dokonanym. Silnik sprawdza uprawnienia postaci, oblicza ruch i ewentualne zatrzymanie. message otrzymują koledzy, diary trafia do dziennika postaci. Jeśli odpowiedzi nie można odczytać, postać czeka tę turę. Ruch po wcześniej wybranej trasie trwa jednak również podczas wait, więc liczba takich akcji nie oznacza automatycznie liczby zmarnowanych tur.

Ile pamięci wraca do promptu. Kolejne wywołanie zawiera sześć ostatnich własnych wpisów do dziennika, dwanaście otrzymanych wiadomości drużynowych, osiem potwierdzonych wyników silnika i najwyżej trzy ostatnie wyniki poszukiwań. Pełne dzienniki i ciągły zapis JSONL zostają na dysku. Nie ma tu jeszcze bazy wektorowej, grafu wiedzy ani automatycznego przywoływania starego ważnego wspomnienia. Dalszy rozwój pamięci ma więc wyraźny sens.

Jak silnik zapobiega wyścigowi szybkości API. Na początku tury tworzy niezmienne obserwacje dla wszystkich aktywnych postaci. Odpowiedzi są generowane równolegle, ale świat przesuwa się dopiero po ich zakończeniu. Wolniejszy model nie dostaje przez to mniej czasu w grze. Seed określa rozmieszczenie, nie losowość odpowiedzi modelu językowego. Nawet identyczny start może więc przy powtórzeniu dać inny wynik.

Gdzie zawiodła mnie nagroda za poszukiwanie informacji. Agent przy pomniku może wysłać własne zapytanie do Wikipedii. Narzędzie zwraca do trzech tytułów artykułów, linki i krótkie fragmenty. W dziesiątej grze Nora najpierw nie znalazła nic pod „Sulická”, potem spróbowała „Vladimír Mandl” i dostała żeton szybkiego ruchu albo dokładniejszego śladu. Silnik sprawdzał tylko, czy wyszukiwanie coś znalazło. Nie weryfikował związku artykułu z lokalnym pomnikiem.

Nora zapisała: „Zdobyłam 1 intel za badanie Vladimír Mandl na sulicka”. Żeton rzeczywiście dostała, lecz nie dowodzi to poprawnej wiedzy o miejscu. Nie przypisuję jej zamiaru oszustwa. Wystarczy przyznać, że nagrodziłem zbyt łatwy do spełnienia warunek. W kolejnej wersji powinna przedstawić konkretne twierdzenie o miejscu, źródło i oparcie w jego treści. Liczba wyszukiwań nie jest dobrą miarą wiedzy.

Co można sprawdzić po fakcie. Każdy przebieg ma protokół, kopię ówczesnego kodu, żądania, odpowiedzi, koszty, zdjęcia i dzienniki. Dla pary z Argonem porównałem skróty kodu gry, stanów początkowych i instrukcji systemowych. Przed uruchomieniem przeszło 31 testów automatycznych, między innymi prywatności, współbieżności, ruchu, zatrzymań i prawidłowego rozliczania różnych modeli. Nie czyni to z małej próby wielkiego badania naukowego, ale pozwala odróżnić ciekawą anegdotę od tego, co rzeczywiście zaszło.

Ile kosztuje mnie taki świat?

Wszystkie dziesięć gier kosztowało około 67 koron czeskich za wywołania modeli. Łącznie powstało 705 odpowiedzi. To cena decyzji postaci w tych eksperymentach, nie całego procesu tworzenia gry.

Część eksperymentuLiczba gierWywołania modeliPrzybliżony koszt
Pierwotne próby tylko z Gemini 3.5 Flash Lite62758,31 CZK
Gemini 3.8 Flash kontra Lite, zamiana stron219412,61 CZK
Gemini 4 Argon kontra Gemini 3.8 Flash, zamiana stron223645,80 CZK
Łącznie1070566,72 CZK

W ostatniej parze pojedynków około 35,93 CZK przypadło na Argona, a 9,87 CZK na Flasha. We wcześniejszej parze było to 9,37 CZK za Flasha i 3,24 CZK za Lite. Dłuższa policyjna gra z Argonem naturalnie wymagała więcej decyzji niż piętnastoturowa ucieczka. Sam koszt całej rundy nie jest więc miarą efektywności pojedynczego modelu.

Kwoty obliczam na podstawie tokenów zwróconych przez API i oficjalnego cennika Gemini. Dla Argona obowiązywała w tym eksperymencie cena wprowadzająca opisana w dokumentacji modelu. Na korony czeskie przeliczam według kursu Czeskiego Banku Narodowego z 27 października 2026, czyli 21,834 CZK za dolara. To orientacyjne przeliczenie, nie faktura ani dokładny kurs karty płatniczej.

Wszystkie dziesięć rund jest zakończonych, kolejne zapytania nie działają, a nierozliczone rezerwy wynoszą zero. W czterech początkowych grach wersji 3 powstało 35 zrzutów ekranu, w parze Flash kontra Lite kolejne 17, a w pojedynkach z Argonem następne 23. Każda postać ma zachowany własny dziennik.

Dla całej kampanii utrzymuję wspólny limit około 437 CZK. Przed żądaniem rezerwuje się część budżetu. Jeśli odpowiedź zaginie albo zabraknie rozliczenia, niepewnej kwoty nie traktuje się automatycznie jako zera.

Koszt wywołań modeli nie obejmuje prac programistycznych, działania komputera ani ilustracji koncepcyjnych. Wybrane modele postaci i materiały powierzchni były dostępne bezpłatnie.

A gdyby kiedyś wyglądało to jak duża gra?

Wyobrażam sobie jesienny wieczór w tej dzielnicy. Światło okien odbija się w mokrym asfalcie. Hugo zatrzymuje się przy płocie, obraca pieczęć w dłoni i patrzy na Elę po drugiej stronie ulicy. Ona dyskretnie pokazuje, że przejście jest wolne. Za rogiem Nora właśnie decyduje: pójść za świeżym śladem czy zostać przy miejscu, do którego któryś przeciwnik musi dotrzeć?

Artystyczna wizja przyszłych Cieni Pragi: Hugo z pieczęcią, koledzy i jesienna ulica z willami

Wizja kolejnej wersji. Taką atmosferę chciałbym stopniowo przenieść do rzeczywiście grywalnej praskiej dzielnicy.

To kierunek, w którym chcę iść. Obraz pokazuje zamierzony nastrój, nie obecny renderer ani dokładny wygląd tutejszych domów. Wyraz twarzy Huga interesuje mnie przy tym równie mocno jak powód, dla którego postanowił zatrzymać się właśnie tutaj.

Najpierw jedna przekonująca ulica

Zacząłbym od krótkiego odcinka między dwoma punktami gry. Domy dostałyby prawdziwe proporcje, wejścia, płoty, ogrody i różne materiały. Postacie lepszą skórę, oczy, włosy, a przede wszystkim naturalne przejścia między chodzeniem, obrotem i gestem. Sztywne spojrzenie lub stopy ślizgające się po chodniku szybko psują dobrą twarz. Geometrię i animację można przygotować w Blenderze, ale potem ta sama scena musi sprawdzić się bezpośrednio w grze na zwykłym komputerze.

W bardziej wymagającej wersji samodzielnej sens miałby Unreal Engine. Jego Lumen odpowiada za dynamiczne oświetlenie pośrednie i odbicia. Zasady i AI mogą zostać na serwerze gry, a inny klient będzie wyświetlał wyniki. To propozycja dalszego kierunku, nie funkcja obecnego prototypu internetowego.

Ciekawą drogę do odtworzenia prawdziwego miejsca pokazuje też badanie 3D Gaussian Splatting z 2023 roku: ze zdjęć tworzy reprezentację sceny oglądanej z nowych punktów. Mogłoby pomóc mi wiernie odtworzyć wybrany zakątek. Sama piękna przestrzeń nie daje jednak postaciom przechodnich drzwi, kolizji ani reguł ruchu. Te trzeba osobno dodać i sprawdzić.

Lepsza pamięć niż sześć ostatnich wpisów

Dzisiaj agent dostaje tylko wybór niedawnych wiadomości i wpisów do dziennika. Stare, ważne odkrycie może zniknąć. W badaniu Generative Agents z 2023 roku połączono zapisy doświadczeń, przywoływanie istotnych wspomnień, refleksję i planowanie. W tym małym świecie pojawiały się też skoordynowane zachowania społeczne.

Dla Cieni Pragi wyniósłbym stąd konkretną zmianę: przed decyzją przypominać sytuacje podobne do obecnej. Na przykład to, że ta sama droga już dwukrotnie skończyła się zatrzymaniem. Każde wspomnienie miałoby czas, źródło i odnośnik do wyniku silnika. Wrażenie modelu „tędy się uda” pozostawałoby oddzielone od potwierdzonego „tędy naprawdę przeszedłem”.

Kończyć plan i wiedzieć, kiedy go porzucić

Voyager działał w Minecrafcie z biblioteką umiejętności wielokrotnego użytku i informacją zwrotną ze środowiska. Nie musiał za każdym razem składać całego zachowania od zera. Nie polegało to przy tym na ciągłym dotrenowywaniu wag modelu językowego.

Tutaj podobna idea mogłaby oznaczać sprawdzoną procedurę „podnieś pieczęć i wynieś ją wolnym wyjściem”. Model językowy wybierałby cel i reagował na zmiany, a silnik niezawodnie wykonywał dozwolone kroki. Procedura musi też znać powody przerwania: pojawił się detektyw, kolega zabrał już przedmiot albo droga przestała być wolna. Inaczej tylko zautomatyzowałbym powtarzanie tego samego błędu.

Ustalenia, które zmieniają się w czyny

Projekt CICERO dla gry Diplomacy połączył model językowy z planowaniem i przewidywaniem działań innych graczy. Wynik nie powstał wyłącznie przez dodanie dłuższego czatu. Rozmowę powiązano z konkretnym planem.

Drużyny mogłyby więc obok swobodnych wiadomości zawierać proste umowy: kto pilnuje którego miejsca, do kiedy, kto potwierdził i co robimy po zatrzymaniu. Jeśli Nora przyjmie północ, Ada nie musi iść tam „pomagać” bez dodatkowego powodu. A po trzech turach bez wiadomości drużyna powinna wiedzieć, że wcześniejsza obietnica mogła stracić aktualność.

Jak poznam, że naprawdę zrobiłem postęp?

Melting Pot od DeepMind sprawdza agentów w różnych sytuacjach współpracy i rywalizacji, z różnymi partnerami. To środowisko do badań wieloagentowego uczenia ze wzmocnieniem, nie gotowy benchmark mojego prototypu. Nacisk na różnorodne sytuacje społeczne jest jednak dobrą inspiracją dla dalszych pomiarów.

Nie wystarczy ładniejsza twarz i pokazanie jednej wygranej gry. Potrzebuję większej liczby startów, zamiany stron, powtórzeń i jednakowych warunków. Poza zwycięstwami śledziłbym zbędne drogi, powtarzane błędy, dotrzymane ustalenia, wykorzystane informacje i koszt ukończonego celu. Najpierw poprawiłbym też zbyt korzystne pilnowanie pieczęci, a dopiero potem ponownie mierzył modele.

Mój najbliższy cel jest więc konkretny: jedna piękna ulica, niezawodna pamięć i drużyna, której rozmowy zmieniają faktyczne działania. Na takim fundamencie może powstać znacznie ciekawszy świat.

Jedna dzielnica, więcej możliwych historii

Cienie Pragi są już grywalnym prototypem taktycznym. Obok przygotowuję dwie inne odmiany tego samego pomysłu.

Praskie włości byłyby historyczną przygodą z posłańcem, skrybką, kowalem, cechami, reputacją i zaginionym dokumentem. Inspiracją jest rodzaj doświadczenia znany z Kingdom Come, ale historia byłaby własna. Dzisiejszej mapy nie można po prostu uznać za średniowieczną. Zabudowa z epoki wymagałaby dodatkowych źródeł.

Republika w cieniu rozgrywałaby się w fikcyjnym czechosłowackim noirze. Reporterka, informatorzy, śledczy, kierowca i rywalizujące gangi. Zamiast pieczęci: umowy, zeznania i przesyłki, przy których ważne jest, komu je powierzymy.

Oba warianty są na razie projektami. Nie chcę stworzyć dziesięciu pięknych dekoracji, w których nikt nie podejmuje ciekawych decyzji. Najpierw chcę jedną dzielnicę, gdzie znaczenie ma pozostanie w miejscu, zmiana planu, zaufanie koledze lub sprzeciwienie się mu.

A gdy Hugo następnym razem powie „wygramy grę”, chcę naprawdę być ciekaw, czy mu się uda.

Kolejne eksperymenty z tej samej serii

Powiązane artykuły