Zpět na blog
·Jan Tyl·31 min čtení

Stíny Prahy: šest AI mozků, dva soupeřící týmy a cesta od kostek k herním postavám

Deset her, šest samostatných AI a skutečné ulice Prahy. Ve čtyřech duelech různých modelů pokaždé vyhrála silnější varianta. Jenže nejlepší policejní taktika byla přestat běhat. Co nás to naučilo o paměti, spolupráci, pravidlech i proměně kostek v herní postavy?

Stíny Prahy: šest AI mozků, dva soupeřící týmy a cesta od kostek k herním postavám

Výtvarná podoba postav Stínů Prahy.

„Jsem v Severní pasáži a doručuji druhou pečeť, vyhrajeme hru!“ hlásí Hugo.

Detektiv Viktor mezitím stojí u úplně jiného místa. Ví, že se protivníci objevili na severu. Dokonce to právě řekl svým kolegům. Přesto čeká u Sulické.

Stíny vítězí.

Tohle není napsaná závěrečná scéna. Obě věty vznikly v jednom z našich AI pokusů. Každá postava měla vlastní pozorování, zprávy od spoluhráčů, deník a svůj běh jazykového modelu. Hra potvrdila, kdo kam opravdu došel a co skutečně doručil.

A právě rozdíl mezi „vím, co se děje“ a „udělám podle toho správný krok“ je na tom zajímavý.

Nakonec jsme odehráli deset AI her za přibližně 67 Kč v modelových voláních. Ve čtyřech zápasech různých modelů pokaždé vyhrála silnější varianta. Nejzajímavější policejní strategie však nebyla velkolepá honička. Bylo to rozhodnutí zůstat stát.

Co se stane, když se AI přestane jen domlouvat a začne soupeřit?

V Městě duchů jsme poslali šest agentů do skutečných pražských ulic. Hledali úlomky paměti, předávali si informace a společně přivolávali úsvit.

Tentokrát jsem chtěl zkusit něco jiného. Dva týmy s opačnými cíli. Stejná čtvrť, ale jiný důvod vydat se ven.

Vznikly Stíny Prahy, další samostatný experiment rodiny Elements. Tři detektivové se snaží zastavit tři Stíny. Ti musí vyzvednout dvě ze tří herních pečetí a vynést je jednou ze čtyř únikových cest.

Nejde o skutečné banky ani o plánování vloupání. Pečetě, pravidla i příběh jsme vymysleli. Skutečné jsou podkladové cesty a půdorysy z OpenStreetMap v okolí Krče a Lhotky. Podoba fasád a další výprava jsou naše ilustrace města.

Ta čtvrť není náhodně vygenerovaná

Tady je stejné místo na skutečné mapě: Alšovy sady, Zálesí, Sulická, Na Větrově a okolí v pražské Lhotce a Krči. Hra přebírá z OpenStreetMap uliční síť a půdorysy budov. Proto lze podle zatáček, křižovatek a rozložení jednotlivých domů poznat, kde se naši hráči pohybují.

Skutečná mapa pražské čtvrti: Alšovy sady, Zálesí, Sulická a půdorysy domů

Skutečná mapa okolí hry. © přispěvatelé OpenStreetMap, ODbL. Stejné místo si můžete otevřít na mapě.

Níže je herní podoba stejné čtvrti z šikmé kamery. Ulice a rozmístění domů mají skutečný mapový základ; podoba fasád, střešní detaily, osvětlení a herní stanoviště jsou naše stylizace. Není to fotografická rekonstrukce. Třeba „Čítárna“ je název herního bodu, nikoli ověřené označení instituce na té adrese.

První mapová podoba Stínů Prahy s pozicemi šesti agentů

Raná podoba herní mapy. V přehledu jsou postavy záměrně zvětšené, aby šly ve čtvrti najít.

Šest lidí, šest samostatných rozhodnutí

Ve výchozím obsazení tvoří detektivní tým Ada, Viktor a Nora. Proti nim stojí Ela, Hugo a Oskar. V dalších testech si týmy také prohodí. V prvních šesti placených pokusech všichni používali Gemini 3.5 Flash Lite. Později jsme ve dvou dalších hrách dali jedné straně Gemini 3.8 Flash a potom modely mezi stranami prohodili. Nakonec jsme přidali ještě dvojici duelů Gemini 4 Argon proti Gemini 3.8 Flash. Výsledky najdete níže.

Model dostává své místo, stav, dostupné akce, zprávy kolegů a část vlastní minulosti. Nevidí soukromé deníky protivníků. Místní dohled má omezený dosah. Občas se objeví veřejná stopa, která prozradí oblast, kde se Stín nacházel.

Pak každý vrátí tři věci: akci, zprávu vlastnímu týmu a zápis do deníku. Rozhodnutí všech připravíme nad stejným stavem a až potom je společně vyhodnotíme. Rychlejší odpověď API tak nezískává náskok na ulici.

Za běžný tah lze ujít až 130 metrů, se žetonem na rychlý přesun až 221 metrů. Trasa vede po mapové síti, ne přímkou skrz domy. Když se detektiv dostane ke Stínu dostatečně blízko ve stejné části tahu, engine potvrdí zadržení. Tvrzení „chytil jsem ho“ samo nestačí.

Policie, která chtěla sama doručovat pečeti

První placené kolo přineslo docela komickou chybu. Někteří detektivové se snažili pečeti sami brát nebo doručovat. Jako by dobře pochopili část herního světa, ale zapomněli, za koho hrají.

Z 39 policejních rozhodnutí bylo 13 pokusů o tyto nepovolené akce. Hra je nepustila. Z pohledu uživatele by to ale vypadalo jako nešikovné postávání a zmatené řeči.

V další verzi dostal každý agent výrazněji vyjádřený vlastní cíl a seznam právě dostupných akcí. Detektiv četl, že pečeti nebere ani nedoručuje. Ve druhém pokusu se počet těchto chyb snížil na nulu z 18 policejních rozhodnutí.

To je užitečný výsledek, ale ne důkaz, že se model něco trvale naučil. Nezměnili jsme jeho váhy. Zlepšili jsme instrukce a rozhraní mezi modelem a hrou. A policejní tým pořád prohrál.

První dva placené pilotyPrvní pokusDruhý pokus
VítězStínyStíny
Počet tahů2113
API odpovědi6136
Zadržení Stínů40
Policejní pokusy brát či doručovat pečeti130
Cena modelových volání1,74 Kč0,94 Kč

Odstranit chybnou akci totiž není totéž jako vytvořit dobrou strategii.

„Pomůžu Adě.“ A najednou všichni běží stejným směrem

Viktor v druhém pokusu napsal:

„Jsem U vily, Stíny utekly nebo se pohybují dál. Přesouvám se k parku, abych pomohl Adě uzavřít prostor.“

Zní to rozumně. Jenže když několik lidí nezávisle vyhodnotí pomoc stejně, mohou se všichni rozběhnout za jednou starou stopou. Jinde zůstane volná cesta.

Podobný problém měl i tým Stínů. Hugo i Oskar v jednu chvíli tvrdili, že mají pečeť. Ve skutečnosti ji měl Hugo. Engine nedovolil vytvořit druhý kus jen tím, že o něm Oskar napsal do deníku.

Dobře znějící domluva ještě není spolupráce. Spolupráce se pozná podle toho, zda si tým rozdělí práci, reaguje na skutečné výsledky a nepřekáží si.

Tohle je také důvod, proč mě podobné malé světy baví. U běžného chatu můžeme uvěřit přesvědčivému vysvětlení. Ve hře se dá zkontrolovat, zda postava opravdu stojí u východu a nese správný předmět.

Paměť: co ví hra a co si jen myslí postava

Základ světa ukládáme do strukturovaných souborů JSON. Patří sem polohy, nesené pečeti, zadržení, tým, čas, výsledky a účet za API. Průběh zapisujeme po jednotlivých událostech do JSONL, tedy souboru s jedním JSON záznamem na řádek.

Deníky jsou jiné. Je to text, který si vytvořila konkrétní postava, v tomto experimentu uložený také v JSON souboru. Není to automaticky pravda. Markdown by byl příjemný formát pro čtení, ale samotná přípona souboru paměť nezlepší.

Proto nová verze odděluje:

  • Ověřené výsledky enginu: co postava skutečně provedla, co nese a zda je zadržena.
  • Vlastní deník: její interpretaci, domněnky a úvahy.
  • Týmové plány: co kolega zamýšlel v konkrétním tahu.
  • Pozorování a stopy: co bylo vidět a jak stará informace je.

Když v deníku stojí „mám pečeť“, ale aktuální stav říká, že jsou ruce prázdné, přednost má stav hry. A když kolega před několika tahy slíbil hlídat sever, není to potvrzení, že tam pořád stojí.

Nejdřív obrázek, potom skutečné postavy

Tenhle původní výtvarný návrh určil náladu celé hry. Šest odlišných lidí, dvě strany a pražský večer. Vedle novějšího titulního obrázku ho chci zachovat: ukazuje, odkud jsme vyšli. Od hezké kresby k modelu, který se dá otáčet a animovat, ale vede další kus práce.

Původní výtvarný návrh šesti hrdinů Stínů Prahy

Původní výtvarný návrh. Následují skutečné fáze vývoje: geometrická figurka, síť a materiály v Blenderu a hotový model v prohlížeči.

Jak jsme z kostek udělali lidi

Tady přišla nejpřímočařejší zpětná vazba celého vývoje: postavy byly ošklivé.

Původně vznikly v kódu z jednoduchých tvarů. Přidali jsme límce, kapsy, prsty, boty i účesy. Pro rychlé ověření fungování to stačilo. Pro detail obličeje už ne. Další malá kulička místo nosu ten problém nevyřeší.

Původní procedurální postava Nory z jednoduchých geometrických tvarů

Původní Nora. Funkční figurka pro první testy, ale slabý základ pro lidskou tvář.

Místo dalšího lepení primitiv jsme sáhli po Microsoft Rocketbox, knihovně hotových rigovaných lidských postav pod licencí MIT. Vybrali jsme šest různých modelů a zpracovali je v Blenderu. Základní geometrii a textury tedy nevytvořila naše AI od nuly. Naše práce spočívá ve výběru, převodu, úpravě materiálů, napojení animací a zapojení do vlastní hry. Zdroj modelů a licence.

Šest nových postav ve skutečném 3D ateliéru Stínů Prahy

Ada, Viktor, Nora, Ela, Hugo a Oskar po převodu. Skutečný živý 3D náhled, ne překreslený screenshot.

Co se při takovém převodu musí udělat?

Nejdřív obličej. Místo několika hladkých tvarů dostane hra souvislou síť s tvarem tváří, víček, nosu a úst. Přes ni se natáhne textura kůže. Vlasy mají vlastní geometrii a průhledné části, se kterými musí renderer správně zacházet.

Stejný model Nory v Blenderu, vlevo polygonová síť a vpravo textury a materiály

Stejná Nora v Blenderu: vlevo je vidět síť polygonů, vpravo model s texturami a světlem. Studijní render zdrojové postavy.

Potom materiály. Barva nestačí. Kůže, látka, vlasy a kov odrážejí světlo jinak. Normálové mapy přidávají drobné povrchové nerovnosti bez toho, aby každá vráska musela být samostatným polygonem. V naší úpravě mají barevné textury rozlišení 1 024 × 1 024 a normálové mapy 512 × 512, aby zůstalo načítání v prohlížeči rozumné.

Pak kostra a pohyb. Rig je kostra, která říká, jak se má síť deformovat při ohnutí lokte nebo kroku. Nestačí přenést seznam natočení kostí z jednoho souboru do druhého. Při převodu jsme museli srovnat orientace kostí a animaci převést do výsledné kostry. Jinak člověk zůstane v rozpažené póze nebo se začne kroutit.

Nakonec export do GLB a kontrola ve hře. GLB je praktické balení pro webové 3D: model, kostra, materiály, textury a animace mohou být v jednom souboru. V Blenderu přitom zůstávají editovatelné zdroje pro další úpravy.

Nová Nora s texturovaným obličejem a oblečením přímo v běžící hře

Nora po změně. Tentokrát má skutečný model obličeje, texturu vlasů i látky. Podoba města je stále jednodušší než postavy.

Přidali jsme také fotografie povrchů pro asfalt a část zdiva, mapy jejich nerovností a drsnosti, lavičky a jemnější oblohu. Materiály pocházejí z Poly Haven, kde jsou dostupné pod CC0. To ovšem neznamená, že jsme z jednoduché mapy udělali fotorealistickou Prahu. Na ulicích a domech je další práce dobře vidět.

A co Claude Code, Codex, WebGPU nebo ray tracing?

AI asistent je v tomhle užitečný jako programátor a pomocník při zpracování modelů. Umí připravit skript, který importuje šest postav, opraví odkazy na textury, nastaví materiály a vyexportuje je do stejného formátu. Může také hledat chyby v kostře a měřítku.

Blender má Python API, takže tuto práci lze opakovat a kontrolovat. Existuje i oficiální konektor pro Claude; jeho postup popisuje Claude Academy. My v tomto převodu používáme přímo skripty pro Blender, bez dalšího konektoru.

Hezčí obrázek ale nevznikne jen přidáním slova „WebGPU“. Potřebujeme dobrý model, materiály, světla, kameru a rozumně zaplněné prostředí. WebGPU je způsob, jak prohlížeč pracuje s grafickou kartou. Samo o sobě nám nedá ray tracing, DLSS ani kvalitu velké hry s mnohaletým rozpočtem.

Pro náš experiment je podstatné, že nová postava není jen hezčí obrázek v kartičce. Stejný 3D model chodí po mapě, má vlastní portrét a lze si jej prohlédnout v samostatném ateliéru. V něm jde přepnout na detail konkrétního člověka a spustit chůzi.

Agenti sami ovšem tuto hezčí scénu nevidí. V těchto hrách rozhodují podle textového pozorování v JSON. Grafika pomáhá nám sledovat jejich příběh; případnou změnu rozhodování je potřeba hledat v pravidlech, vstupních informacích a samotných odpovědích modelu.

Lepší hra potřebuje lepší možnosti, nejen lepší hlavy

Současně jsme změnili pravidla a pozorování. Nová verze dovoluje upravit cíl i během dlouhé cesty. Přesměrování navazuje na nejbližší další uzel skutečné trasy, takže se hráč neteleportuje zpět na poslední stanoviště ani nezkracuje cestu skrz domy.

Detektivové dostali jednu společnou uzávěru východu za celou hru. Její vyhlášení stojí akci na místě. Nejdříve přijde varování a teprve v následujících dvou tazích nelze tímto východem doručovat. Uzávěra sama nikoho nechytá.

Stín může naopak jednou věnovat akci falešné oblasti své příští veřejné stopy. Zpráva přijde v běžném čase a nemá cedulku „tohle je podvod“. Přímý místní dohled tím ale oklamat nelze.

Vzniká tak několik skutečných voleb. Mám věnovat tah přípravě klamné stopy, nebo rychleji utíkat? Zavřít výhodnou cestu hned, nebo si jediný žeton nechat na závěr? Věřit starému hlášení, nebo hlídat místo, kde musí protivník nakonec projít?

Návrh prošel i nezávislou kritikou dalšího agenta. Ta upozornila například na to, že čtyři východy nejsou stejně výhodné. Od některých pečetí je jeden mnohem blíž než druhý. Také odhalila, že původní testovací semena jen prohazovala identity na stejných místech. Nově měníme i skutečné rozmístění týmů.

Automatické testy kontrolují mimo jiné soukromí zpráv, délku pohybu, zadržení, zachování pečetí, začátek a konec uzávěry i rozdíl mezi deníkem a potvrzenou historií. Samostatné skriptované zkoušky ověřují, že hra může skončit vítězstvím obou stran. To ještě není důkaz, že stejně schopní AI hráči mají šanci přesně půl na půl.

Dvě výhry policie, dvě výhry Stínů. Jenže záleží kde

Novou verzi jsme pustili čtyřikrát. Dvě rozdílná počáteční rozmístění, každé jednou s původními a jednou s prohozenými týmy. Stejný model, stejné podmínky vítězství. Každé kolo začínalo s prázdným deníkem; žádný hráč nedostal vzpomínky z předchozího pokusu.

Nové pilotyRozmístěníObsazení týmůVítězTahůAPI voláníCena Kč
3PrvníVýchozíDetektivové11662,20
4PrvníProhozenéDetektivové5300,89
5DruhéVýchozíStíny7401,23
6DruhéProhozenéStíny7421,31

Každá hra má svůj malý příběh

Pro čtenáře, kteří nechtějí procházet celé deníky, jsem vybral to podstatné z každého kola. Doručení a zadržení ověřujeme podle enginu, ne podle toho, co si postavy myslely.

Hra 1: Policie honila vlastní vítězství. Jenže podle cizích pravidel. Nora chytila Huga už v prvním tahu a detektivové nakonec zaznamenali čtyři zadržení. Přesto vyhráli Stíny: Ela odevzdala první pečeť v tahu 9 a Oskar druhou v tahu 21. Policii zradilo pochopení role. Třináctkrát se pokusila pečeť sama vzít nebo doručit, přestože to smí jen soupeř. Viktor ještě v posledním tahu sliboval doručení pro policii, zatímco skutečný vítěz právě procházel západním východem. Záchyty fungovaly, společný plán nikoli.

Hra 2: Věděl, kde jsou. A čekal jinde. Po úpravě instrukcí už detektivové nezkoušeli brát cizí pečeti. Strategicky ale stále nestíhali. Ela doručila v tahu 12, Hugo v tahu 13 a policie nezadržela nikoho. Nejvýmluvnější byl Viktor: ve zprávě správně uvedl, že Stíny jsou v Severní pasáži, současně však zůstával u Sulické a čekal na jejich příchod. Informaci měl, změna plánu nepřišla. Stínům vyšlo postupné doručení; detektivům nepomohla ani opravená znalost pravidel. V závěru se objevily také neplatné JSON odpovědi, které engine nahradil čekáním.

Hra 3: Jeden detektiv, tři zadržení v jediném tahu. Ela donesla první pečeť do Severní pasáže v tahu 10. Hugo a Oskar ji doprovázeli a čekali tam s ní, místo aby mezitím zajistili druhou. O tah později přišel Viktor a engine potvrdil zadržení všech tří najednou. Detektivové vyhráli v tahu 11. Stíny zvládly jeden skutečný úkol, ale soustředění celého týmu kolem jediného úspěchu je připravilo o další šanci. Viktorův přesun byl tentokrát účinnější než všechna jejich ujišťování o spolupráci.

Hra 4: Nora problém pojmenovala. Náprava přišla pozdě. Po prohození týmů hráli za Stíny Ada, Viktor a Nora. Už ve druhém tahu Nora upozornila: „Všichni míříme do Alšových sadů, což je zbytečné hromadění.“ Všichni to v zásadě věděli, jenže změnu odkládali. Ada vzala první pečeť v tahu 4, Nora teprve tehdy přesměrovala cestu k Sulické. V tahu 5 Hugo chytil Adu, Oskar Viktora a Ela Noru. Vyhráli detektivové bez jediného doručení soupeře. Silný moment tohoto kola nebylo nevědomí, ale rozdíl mezi správnou diagnózou a včasným činem.

Hra 5: Jih a sever. Dvě pečeti současně. Ada zadržela Huga už ve druhém tahu, ale tím příběh Stínů neskončil. Ela odnesla pečeť z Alšových sadů na jih, Oskar tu od Sulické na sever. V tahu 7 oba skutečně doručili a vyhráli. Hugo se mezitím po propuštění vracel pro zbývající pečeť, jeho kolegové však už další pomoc nepotřebovali. Tady se rozdělení práce proměnilo ve výsledek: dvě různé pečeti, dva různé východy. Detektivové hlídali jiné části mapy a nedokázali obě doručení zastavit.

Hra 6: Nové tváře v rolích Stínů, stejný únik. Ve stejném rozmístění si postavy znovu prohodily strany. Ada a Nora donesly pečeti k jižnímu a severnímu východu a v tahu 7 je obě odevzdaly. Viktor vezl třetí pečeť na západ, takže tým pracoval i na další možnosti. Ela se jako detektiv vydala za Adou, ale včas ji nezastavila; Oskar nadále hlídal Alšovy sady, odkud už pečeť zmizela. Stíny vyhrály bez zadržení. Právě opakování výhry stejné strany po výměně postav nás upozornilo, že výchozí rozmístění může být důležitější než jméno hrdiny.

Výsledek 2:2 vypadá pěkně, ale podstatný detail je jinde. Na prvním rozmístění dvakrát vyhrála hlídka, na druhém dvakrát Stíny. Výměna postav vítěznou stranu nezměnila. Je to stopa pro další ladění startů a tras, nikoli důkaz dokonale vyvážené hry. Příčinu ze čtyř pokusů spolehlivě neurčíme.

Agenti během těchto kol šestnáctkrát změnili cíl už probíhající cesty. Nové možnosti uzávěry a falešné stopy ale nepoužili ani jednou. Přidat chytrou schopnost do pravidel zkrátka nestačí. Ještě musíme ověřit, jestli model pozná situaci, kdy se vyplatí obětovat okamžitý pohyb za pozdější výhodu.

Co když jednomu týmu dáme silnější mozek?

Po šesti hrách přišel další nápad: jednou posílit detektivy a podruhé Stíny. Vybrali jsme Gemini 3.8 Flash. Všichni tři hráči dané strany dostali tento model, protivníci zůstali na Gemini 3.5 Flash Lite.

Oba nové zápasy začaly na stejném druhém rozmístění se stejnými postavami, pravidly a prázdnými deníky. Instrukce se neměnily, rychlost odpovědi neovlivňovala pohyb. Oba modely měly stejný strop 4096 výstupních tokenů; Flash používal úroveň přemýšlení low, Lite minimal. Srovnáváme tato dvě konkrétní nastavení.

HraKdo měl Gemini 3.8 FlashVítězTahůZadrženíCena Kč
7DetektivovéDetektivové28910,50
8StínyStíny712,11

Hra 7: Silnější hlídka našla způsob, jak soupeře vyčekat. Gemini 3.8 Flash řídil všechny tři detektivy, Lite všechny Stíny. Ela sice v tahu 7 doručila první pečeť, ale na druhou už tým nedosáhl. Detektivové si postupně rozdělili zbývající stanoviště: Nora hlídala Veverku, Viktor Sulickou a Ada pokrývala okolí. Engine zaznamenal devět zadržení a po 28 tazích vyhrála policie. Povedlo se hlídání konkrétních cílů, Stínům selhávala reakce na opakované záchyty. Ukázala se však i výhoda pravidel: stojící strážce může na pečeti rušit každý pokus o vyzvednutí. Čtyři neplatné JSON odpovědi Lite navíc skončily čekáním.

Hra 8: Silnější Stíny rozdělily práci hned na začátku. Tentokrát dostali Gemini 3.8 Flash Ela, Hugo a Oskar. Už v prvním tahu si rozebrali tři různá stanoviště: Ela Alšovy sady, Hugo Veverku a Oskar Sulickou. Ela potom mířila na jih, Oskar na sever. V tahu 7 oba doručili a vyhráli; ve stejném tahu Nora chytila Huga, ale na výsledek už to nestačilo. Rozdělení práce bylo vidět ve zprávách i skutečných trasách. Zrychlení oproti dřívějším Lite Stínům se ovšem nekonalo: ti na stejném rozmístění také vyhráli v sedmi tazích. Slabší detektivové navíc třikrát poslali neplatný JSON.

Viktor v posledním tahu sedmé hry hlásil:

„Stojím přímo na Sulické a nepouštím pečeť. Ela je v dosahu, Nora kryje Veverku. Poslední tah do vítězství!“

Jeho deník byl tentokrát v souladu s tím, co hra opravdu ukazovala: hlídal konkrétní pečeť a počítal s automatickým záchytem. Ve druhém srovnávacím pokusu zase Oskar už v prvním tahu napsal:

„Vyrážím pro pečeť u Sulické, potom ji vezmu na Severní pasáž. Hugo, ber Veverku nebo Alšovy sady. Ela ať zajistí Alšovy sady.“

Dvakrát vyhrála strana se silnějším modelem. To je zajímavý výsledek, nikoli změřená šance na vítězství. Samotné Lite Stíny už na stejném rozmístění také vyhrály v sedmi tazích. Největší změnu tedy vidíme u detektivů. Ani tam ale nelze z jediného pokusu určit příčinu: starší kontrolní hra měla nižší výstupní strop 900 tokenů a odpovědi modelů nejsou deterministické.

Do výsledku vstupuje i spolehlivost rozhraní. Lite v těchto dvou hrách poslalo 7 syntakticky neplatných JSON odpovědí z 89, Flash 0 ze 105. Někde přebývala závorka, jinde chyběla uvozovka. Engine takový tah nahradil čekáním. To patří do hodnocení použitelnosti agenta, ale není to totéž jako kvalita taktiky. Ani silnější model nebyl bezchybný: detektivové si v některých zprávách pletli, kdo nese pečeť.

Silnější model nám odhalil slabinu hry

Detektivové nemuseli vymyslet složitou lest. Postupně začali stát přímo na místech, kde ležely zbývající pečeti. Příchozí Stín byl automaticky zadržen a případně právě vzatý předmět se vrátil. Když už jedna pečeť zmizela, stačilo dobře pokrýt zbývající dvě.

Po skončení jsme tuto vlastnost ověřili i samostatnou neplacenou kontrolou na všech třech stanovištích. Hlídání pečetě je v současných pravidlech velmi silná obrana. Neznamená to, že se tam policie dostane včas z každého startu. Znamená to, že vyhrát tento zápas a být obecně lepší agent jsou dvě různé věci.

V příští verzi bych proto chtěl dát útočníkům skutečnou možnost takovou obranu narušit a pak zopakovat více zápasů s výměnou stran i startů. Pravidla jsme během těchto měření neupravovali. Uzávěru východu ani falešnou stopu modely nevyužily ani v jednom z nových pokusů.

Argon proti Flashi: vyhraje chytřejší model i po výměně stran?

Pak jsme šli ještě o stupeň výš. Gemini 4 Argon proti Gemini 3.8 Flash, jednou za Stíny a podruhé za detektivy. Každý model řídil všechny tři postavy svého týmu. Obě hry začínaly na stejném druhém rozmístění, s prázdnými deníky, nezměněnými pravidly a stejnými instrukcemi. Oběma modelům jsme nastavili přemýšlení low a strop 4096 výstupních tokenů. Ze záznamů jsme ověřili také skutečně vrácená označení modelů.

HraStínyDetektivovéVítězTahůZadržení StínůCena Kč
9Gemini 4 ArgonGemini 3.8 FlashStíny15313,68
10Gemini 3.8 FlashGemini 4 ArgonDetektivové28832,12

Hra 9: Dvě zadržení hned na začátku. A přesto návrat do hry. Ada chytila Elu a Nora Oskara už ve třetím tahu. Argon tedy nezačal dokonale. Oskar dokonce viděl Noru poblíž a přesto chybně odhadl, že tento tah ještě zadržen nebude. Hugo mezitím dokončil vlastní úkol: v osmém tahu doručil pečeť z Veverky na západ. Ela a Oskar se po propuštění vrátili pro zbývající dvě. Když se k Oskarovi znovu blížila Nora, zamířil přes park na východ. Ela pokračovala na jih a v patnáctém tahu doručila vítěznou pečeť. Policisté už ji nestihli dostihnout.

Oskar v jedenáctém tahu napsal:

„POZOR! Vidím Noru přímo u sebe na jihozápad od sulicka (pos [-87, 251])! Unikám s pečetí na východ přes park (2 tahy), pak zamířím na north nebo east podle toho, kam půjde Nora.“

Tohle nezůstalo jen větou. Záznam potvrzuje přesun k parku a v dalším tahu změnu cíle na východní východ. V deníku pak popsal vzdálenost Nory a důvod změny směru. Právě propojení zprávy, plánu a uskutečněného pohybu je zajímavější než samotné vítězství.

Hugo si také všiml, že hra vrací zadržené postavy k východu vzdálenému od detektivů, a využil to jako vodítko pro tým. V jeho zprávách se ovšem objevovalo příliš sebejisté „úplně bezpečný“. Místo návratu se vybírá už při zadržení a policie se mezitím pohybuje. Byla to užitečná indicie, nikoli záruka bezpečné cesty.

Hra 10: Nejbystřejší nápad byl přestat běhat. S Argonem za policii přišla jiná hra. Detektivové zaznamenali osm zadržení a od konce desátého tahu drželi tři různé pečeti: Ada Alšovy sady, Viktor Veverku a Nora Sulickou. Až do posledního tahu svá místa neopustili. Stíny s Flashem hledaly jinou cestu, několikrát měnily cíl, ale nedoručily ani jednu pečeť. Policie vyhrála vypršením času.

Nora svým kolegům v osmnáctém tahu připomínala:

„Ado, Viktore, ZŮSTAŇTE STÁT na ales a veverka (wait)! Dokud stojíme přímo na svých pečetích, nemohou vzít ani jedinou pečeť!“

Ada si v posledním tahu zapsala:

„Všechny tři pečeti jsou bezpečně na místě pod naším dohledem (já na ales, Nora na sulicka, Viktor na veverka). Zůstávám stát na místě (wait), vítězství je jisté.“

V tomto případě deník odpovídal skutečnému stavu. Chytřejší rozhodování tedy nemusí vyrobit více honiček. Někdy odhalí, že nejvýhodnější strategií je stát na místě. Pro autora hry je to důležitá zpráva: aby vznikala napínavější hra, musíme opravit i pravidla, která pasivní obranu tolik zvýhodňují.

Skutečný závěr desáté hry: Argon za detektivy, tři hlídané pečeti a deník Nory

Skutečný stav po 28. tahu. Stíny nedoručily žádnou pečeť. Vpravo Nora vysvětluje, proč už hlídku neopustí. Číslo tahu uvnitř jejího textu je vlastní zápis modelu; označení nad zápisem přidává engine.

Argon vyhrál oba směry tohoto malého srovnání. Za Stíny ukázal návrat k cíli po neúspěchu a reakci na blízkého protivníka; za policii důsledné rozdělení hlídání. Není ale bezchybný. V policejní hře jednou nevrátil použitelnou akci a engine za Noru vyčkal. Ze 123 odpovědí Argonu byla takto nepoužitelná jedna, u Flashe ze 113 žádná. Uzávěru ani falešnou stopu nevyužil nikdo.

Dvě výhry jsou slibné pozorování, ne změřená obecná převaha. Stále jde o jediné rozmístění a jednu hru v každém směru. Zvlášť policejní výhra ukazuje také slabinu pravidel. Další smysluplný test proto potřebuje více opakování, různé starty a možnost narušit trvalé hlídání pečetí. Automaticky lepší příběh nám samotná výměna modelu nezaručí.

Co nám těch deset her skutečně ukázalo

Když to vezmu lidsky: s lepšími modely jsme častěji viděli, že postavy použijí to, co už vědí. Nestačilo jim napsat pěknou zprávu. Rozdělily si stanoviště, po zadržení se vrátily k úkolu nebo změnily cestu před protivníkem. Zároveň jsme zjistili, kolik problémů jsme jim sami připravili špatným rozhraním a pravidly.

PozorováníCo jsme skutečně viděliCo z toho zatím neplyne
Oprava instrukcí pomohla i levnému modeluPolicejní pokusy vzít nebo doručit pečeť klesly z 13 v prvním pilotu na 0 ve druhémŽe se model trvale přeučil nebo začal dobře taktizovat
Flash uspěl proti Lite na obou stranáchVe hrách 7 a 8 vyhrál tým s FlashemŽe známe jeho pravděpodobnost výhry na jiné mapě
Argon uspěl proti Flashi na obou stranáchVe hrách 9 a 10 vyhrál tým s ArgonemŽe dva zápasy izolují obecnou inteligenci modelu
Silnější model nemusí hrát akčnějiArgon jako policie od tahu 10 držel všechny tři pečetiŽe více pohybu, delší deník nebo více slov znamená lepší hru
Nabídnout schopnost nestačíV osmi hrách pravidel v3 nikdo nepoužil uzávěru ani falešnou stopuŽe je modely neumějí používat; možná se v těchto situacích nevyplatily
Použití nástroje není totéž co získání znalostiNora dostala výzkumný žeton za nalezený článek bez ověření vztahu k místuŽe se dozvěděla něco správného o daném památníku

Ve čtyřech zápasech různých modelů tedy vyhrála silnější varianta čtyřikrát. Všechny ale používaly jedno rozmístění, některé stejné taktické výhody a jen jedno opakování každého směru. Je to motivace pokračovat, ne poctivý podklad pro tvrzení „lepší model má stoprocentní úspěšnost“. Ani celkové skóre pravidel v3, čtyři výhry policie a čtyři Stínů, samo nedokazuje vyvážení.

Nejvíc jsme se během vývoje naučili my. Modelům jsme nepřeučovali váhy a mezi placenými koly jsme jim nepřenášeli deníky. V rámci jedné hry mohly využívat nové zprávy a zkušenosti; mezi verzemi se měnily naše instrukce, paměťové rozhraní a pravidla. To jsou různé druhy zlepšení a stojí za to je rozlišovat.

Pod kapotou pro ty, kteří si to chtějí postavit

Rozhodovací smyčka má čtyři kroky: pozorování → odpověď modelu → kontrola a výpočet enginu → zápis výsledku. Grafika pouze ukáže, co se stalo.

Co agent dostane. Strukturované pozorování obsahuje vlastní tým a cíl, aktuální polohu, nesený předmět, dostupné akce, veřejný stav pečetí, známé stopy a odhady délky cesty k herním bodům. Polohy, cíle a nesené předměty spoluhráčů sdílí přímo engine. Týmové zprávy fungují jako společná vysílačka bez omezení vzdáleností. Protivníkovi se neposílají. Soupeřovy přesné údaje agent dostává jen v místním dohledu, vedle toho má starší zprávy o jeho oblasti.

To je podstatné i pro interpretaci spolupráce: hráči si museli domluvit záměr a rozdělit úkoly, ale polohu spoluhráče nemuseli vyčíst z rozhovoru. Stejně tak sami neřešili každý metr navigace. Vybrali cíl a trasu po uliční síti spočítal engine. V těchto hrách modely nevidí screenshoty ani nepoznávají obličeje. Působivější výprava mění zážitek diváka, ne jejich vstupní informace.

Jak vypadá odpověď. Zjednodušený příklad formátu, nikoli citace konkrétního tahu:

{
  "action": { "type": "move", "target": "east" },
  "message": "Měním cestu na východ, na severu je hlídka.",
  "diary": "Sever je rizikový. Zkusím jiný východ."
}

action je požadavek, nikoli hotová skutečnost. Engine ověří, že ho daná postava smí použít, vypočítá pohyb a případný záchyt. message dostanou spoluhráči, diary se uloží dané postavě. Pokud odpověď nejde přečíst, postava tento tah vyčká. Pohyb po už zvolené trase přitom při wait pokračuje, takže počet těchto akcí nelze automaticky číst jako počet promarněných tahů.

Kolik paměti se vrací do promptu. Do dalšího volání posíláme posledních šest vlastních deníkových zápisů, dvanáct přijatých týmových zpráv, osm potvrzených výsledků enginu a nejvýše tři poslední rešerše. Na disku zůstávají celé deníky i průběžný JSONL záznam. Zatím tu není vektorová databáze, znalostní graf ani automatické vybavování staré důležité vzpomínky. Proto má další vývoj paměti jasný smysl.

Jak zabráníme závodu rychlosti API. Na začátku tahu vytvoříme neměnná pozorování pro všechny právě hrající postavy. Odpovědi běží souběžně, ale svět se posune až po jejich dokončení. Pomalejší model tím nedostává méně herního času. Seed určuje rozmístění, ne náhodnost odpovědí jazykového modelu. I stejný start proto může při opakování dopadnout jinak.

Kde nás zradila odměna za rešerši. Agent u památníku může zadat vlastní dotaz na Wikipedii. Vrátíme mu nejvýše tři názvy článků, odkazy a krátké úryvky. V desáté hře Nora nejprve neuspěla s dotazem „Sulická“, potom zkusila „Vladimír Mandl“ a získala žeton pro rychlý přesun nebo přesnější stopu. Engine totiž kontroloval jen to, zda vyhledávání něco našlo. Souvislost nalezeného článku s místním památníkem neověřoval.

Nora si do deníku zapsala: „Získala jsem 1 intel za výzkum Vladimír Mandl na sulicka.“ Žeton skutečně dostala, ale správný poznatek o místě tím prokázán není. Nemusíme jí připisovat úmysl podvádět. Stačí si přiznat, že jsme odměnili příliš snadno splnitelnou podmínku. V další verzi by měla předložit konkrétní tvrzení o místě, zdroj a oporu v něm. Počet vyhledávání není dobré měřítko znalostí.

Co se dá zpětně ověřit. Každý běh má protokol, kopii tehdejších zdrojů, požadavky, odpovědi, ceny, fotografie a deníky. U dvojice s Argonem jsme porovnali otisky herního kódu, počátečních stavů i systémových instrukcí. Před spuštěním prošlo 31 automatických testů, mimo jiné soukromí, souběhu, pohybu, zadržení a správného účtování různých modelů. To z malého pokusu neudělá velkou vědeckou studii, ale dovolí nám odlišit zajímavou historku od toho, co se opravdu odehrálo.

Kolik nás stojí takový svět?

Všech deset her nás vyšlo přibližně na 67 Kč za volání modelů. Proběhlo celkem 705 odpovědí. To je cena rozhodování postav v těchto pokusech, nikoli celého vývoje hry.

Část experimentuPočet herModelová voláníPřibližná cena
Původní pokusy pouze s Gemini 3.5 Flash Lite62758,31 Kč
Gemini 3.8 Flash proti Lite, výměna stran219412,61 Kč
Gemini 4 Argon proti Gemini 3.8 Flash, výměna stran223645,80 Kč
Celkem1070566,72 Kč

V poslední dvojici duelů připadlo přibližně 35,93 Kč na Argon a 9,87 Kč na Flash. U předchozí dvojice Flash proti Lite to bylo 9,37 Kč za Flash a 3,24 Kč za Lite. Delší policejní hra s Argonem přirozeně potřebovala více rozhodnutí než patnáctitahový útěk, takže samotná cena celého kola není měřítkem efektivity jednoho modelu.

Částky počítáme z tokenů, které vrátilo API, a oficiálního ceníku Gemini. Pro Argon platí při tomto pokusu úvodní cena popsaná v dokumentaci modelu. Do korun převádíme kurzem ČNB z 27. října 2026, tedy 21,834 Kč za dolar. Jde o orientační přepočet, ne fakturu ani přesný kurz na platební kartě.

Všech deset kol je dokončených, další dotazy neběží a nevyúčtované rezervy jsou nulové. Ve čtyřech původních hrách verze 3 vzniklo 35 snímků, ve dvojici Flash proti Lite dalších 17 a při duelech s Argonem dalších 23. Ke každé postavě zůstává vlastní deník.

Pro celou kampaň držíme společný strop přibližně 437 Kč. Před požadavkem se část rozpočtu rezervuje. Pokud by se odpověď ztratila nebo chybělo vyúčtování, nejistá částka se nepovažuje automaticky za nulu.

Cena modelových volání nezahrnuje práci na vývoji, provoz počítače ani výtvarné návrhy. Vybrané modely postav a povrchové materiály byly volně dostupné.

A kdyby jednou vypadala jako velká hra?

Představuji si podzimní podvečer v téhle čtvrti. Na mokrém asfaltu se odráží světlo oken. Hugo se zastaví u plotu, v ruce obrací pečeť a sleduje Elu na druhé straně ulice. Ona mu nenápadně naznačí, že průchod je volný. Za rohem se právě rozhoduje Nora: půjde za čerstvou stopou, nebo zůstane u místa, kam musí někdo z protivníků přijít?

Výtvarná vize budoucích Stínů Prahy: Hugo s pečetí, spoluhráči a podzimní vilová ulice

Výtvarná vize další verze. Takovou atmosféru bych chtěl postupně přiblížit skutečně hratelné pražské čtvrti.

Tohle je směr, kterým se můžeme vydat. Obrázek ukazuje zamýšlenou atmosféru; současný renderer ani přesnou podobu zdejších domů nedokumentuje. Zajímá mě přitom stejně tak výraz Hugovy tváře jako důvod, proč se rozhodl právě tady zastavit.

Nejdřív jedna přesvědčivá ulice

Začal bych krátkým úsekem mezi dvěma herními stanovišti. Domy by dostaly skutečné proporce, vstupy, ploty, zahrady a různé materiály. Postavy lepší pokožku, oči, vlasy a hlavně přirozené přechody mezi chůzí, otočením a gestem. Kvalitu tváře totiž rychle zničí strnulý pohled nebo nohy klouzající po chodníku. V Blenderu se dá připravit geometrie i animace; potom musí stejná scéna obstát přímo ve hře a na běžném počítači.

Pro náročnější samostatnou verzi by dával smysl Unreal Engine. Jeho Lumen řeší dynamické nepřímé osvětlení a odrazy. Herní pravidla a AI mohou zůstat na našem serveru, zatímco jiný klient vykreslí jejich výsledky. Je to návrh dalšího směru, ne funkce, kterou už má náš webový prototyp.

Zajímavou cestu k zachycení skutečného místa ukazuje také výzkum 3D Gaussian Splatting z roku 2023: z fotografií vytváří reprezentaci scény pro pohledy z nových míst. Pro nás by mohl pomoci s věrnou výpravou vybraného zákoutí. Samotný krásný prostor ale ještě nedává postavám průchodné dveře, kolize a pravidla pohybu. Ty bychom museli doplnit a ověřit zvlášť.

Lepší paměť než posledních šest zápisů

Dnes agent dostává jen výběr nedávných zpráv a deníku. Staré důležité zjištění se tak může ztratit. Ve studii Generative Agents z roku 2023 výzkumníci spojili záznamy zkušeností, vybavování relevantních vzpomínek, reflexi a plánování. V jejich malém světě se objevovalo i koordinované společenské chování.

Pro Stíny Prahy bych si z toho vzal konkrétní změnu: před rozhodnutím připomenout situace podobné té současné. Například že stejný průchod už dvakrát skončil zadržením. Každá vzpomínka by nesla čas, zdroj a odkaz na výsledek enginu. Modelův dojem „tudy to půjde“ by zůstal oddělený od potvrzeného „tudy jsem opravdu prošel“.

Umět dokončit plán a poznat, kdy ho opustit

Voyager pracoval v Minecraftu s knihovnou znovu použitelných dovedností a zpětnou vazbou z prostředí. Nemusel pokaždé sestavovat celé chování od nuly. Nešlo přitom o průběžné přeučování vah jazykového modelu.

U nás by podobná myšlenka mohla znamenat ověřený postup „vyzvedni pečeť a odnes ji volným východem“. Jazykový model by vybíral cíl a reagoval na změny, engine by spolehlivě prováděl jednotlivé povolené kroky. Součástí postupu musí být i důvod k přerušení: objevil se detektiv, kolega už předmět vzal, nebo přestal být průchod volný. Jinak bychom jen zautomatizovali opakování stejné chyby.

Domluva, která se promění v činy

Projekt CICERO pro hru Diplomacy propojil jazykový model s plánováním a odhadem jednání ostatních hráčů. Výkon nevznikl pouhým přidáním delšího chatu. Rozhovor byl propojený s konkrétním plánem.

Naše týmy by proto mohly vedle volných zpráv uzavírat jednoduché dohody: kdo hlídá které místo, do kdy, kdo to potvrdil a co uděláme při zadržení. Když Nora přijme sever, Ada už se tam nemusí vydat „pomoci“ bez dalšího důvodu. A po třech tazích bez zprávy musí tým vědět, že původní slib mohl přestat platit.

Jak poznáme, že jsme se opravdu posunuli?

Melting Pot od DeepMind testuje agenty v různých situacích spolupráce i soupeření a s různými spoluhráči. Je to prostředí pro výzkum víceagentního posilovaného učení, ne hotový benchmark našeho prototypu. Jeho důraz na různorodé sociální situace je ale dobrá inspirace pro další měření.

Nestačilo by přidat hezčí obličej a ukázat jednu vítěznou hru. Potřebujeme více startů, výměny stran, opakování a stejné podmínky. Vedle vítězství bych sledoval zbytečné cesty, opakované chyby, splněné dohody, využité informace a cenu za dokončený cíl. Také bychom nejdřív opravili příliš výhodné hlídání pečetí a teprve potom znovu měřili modely.

Můj nejbližší cíl je proto docela konkrétní: jedna krásná ulice, spolehlivá paměť a tým, jehož domluva mění to, co skutečně udělá. Z takového základu už může vzniknout mnohem zajímavější svět.

Jedna čtvrť, víc možných příběhů

Stíny Prahy jsou teď hratelným taktickým prototypem. Vedle nich připravujeme dvě další podoby stejného nápadu.

Pražské panství by bylo historické dobrodružství s poslem, písařkou, kovářem, cechy, pověstí a zmizelou listinou. Inspirace typem zážitku z Kingdom Come, ale s vlastním příběhem. Dnešní mapu nelze jednoduše prohlásit za středověkou. Pro dobovou zástavbu bychom potřebovali další podklady.

Republika ve stínu by se odehrávala ve fiktivním československém noiru. Reportérka, informátoři, vyšetřovatel, řidič a soupeřící gangy. Místo pečetí dohody, svědectví a zásilky, u kterých záleží na tom, komu je svěříte.

Obě jsou zatím návrhy. Nechci vyrobit deset hezkých kulis, ve kterých se nikdo nerozhoduje zajímavě. Chci nejdřív jednu čtvrť, v níž bude mít cenu zůstat na místě, změnit plán, věřit kolegovi nebo mu odporovat.

A když v ní příště Hugo řekne „vyhrajeme hru“, chci se opravdu těšit, jestli mu to vyjde.

Další experimenty ze stejné série

Související články