Před pár týdny jsem do chatu nahrál stostránkovou nájemní smlouvu a požádal model, ať mi vypíše všechny pasáže o výpovědní lhůtě. Napoprvé to zvládl bez chyby, citoval přesný odstavec i číslo stránky. Po hodině doplňujících otázek jsem se zeptal znovu, jen jinak formulovaně, a model mi klidně odpověděl, že o výpovědní lhůtě smlouva vůbec nemluví. Přitom jsme se o ní bavili na úplném začátku.

Nešlo o chybu ani o nějaký výpadek. Model prostě tu část textu už neměl k dispozici. Přesně tohle je kontextové okno v praxi, a stojí za to vědět, jak funguje, dřív než na něj narazíte při vlastní práci.

Krátkodobá paměť, ne knihovna

Kontextové okno je množství textu, které model zvládne mít najednou „přečtené” a brát ho v potaz při odpovědi. Patří sem všechno: vaše otázky, dokumenty, které nahrajete, i celá dosavadní historie konverzace. Model nemá stálou paměť jako člověk. Nepamatuje si včerejší chat, pokud mu to aplikace výslovně nezajistí. Má jen tohle jedno okno, a jakmile se z něj něco vysune, je to pryč.

Nejbližší přirovnání je poznámkový blok s pevným počtem stránek. Píšete do něj pořád dál, ale blok má limit. Jakmile dojdou stránky, nejstarší z nich vytrhnete, abyste měli místo na nové. Co bylo napsané na vytržené stránce, si už nezopakujete, leda byste ji měli někde uloženou zvlášť.

U krátkého dotazu typu „přelož mi tuhle větu” na to nikdy nenarazíte. Okno vám bohatě stačí. Problém přichází až s dlouhými dokumenty, rozsáhlým kódem nebo konverzací, která se táhne přes desítky zpráv.

Proč se to počítá v tokenech

Kontextové okno se neudává ve slovech ani stránkách, ale v tokenech. Token je kousek textu, se kterým model interně pracuje, obvykle kratší než celé slovo. Jak přesně tokenizace funguje a proč se v ní čeština chová jinak než angličtina, jsme podrobně rozepsali v článku o tokenech. Tady stačí vědět, že jeden token odpovídá zhruba pár znakům, a že český text se kvůli skloňování obvykle rozpadne na víc tokenů než stejně dlouhý anglický.

Z toho plyne nepříjemný důsledek. Stejně dlouhý dokument v češtině zabere v kontextovém okně víc místa než jeho anglický ekvivalent. Desetistránková smlouva v češtině tak může spotřebovat citelně víc z dostupného okna než desetistránková smlouva v angličtině.

Model navíc nezpracovává vstup jako celek najednou v tom smyslu, že by ho „přehrál” a zapomněl. Pracuje s ním token po tokenu způsobem, který jsme podrobněji popsali v textu o tom, jak funguje LLM. Kontextové okno je prostě horní hranice, kolik takových tokenů model zvládne najednou zohlednit.

Co se stane, když se okno zaplní

Konverzace, která překročí limit okna, se nezastaví chybovou hláškou. Většina aplikací s tím zachází potichu, jednoduše nejstarší část odsune. Model pak odpovídá jen na základě toho, co mu z okna zbylo.

Prakticky to vypadá přesně jako u mé smlouvy. Model najednou „neví”, co jste psali na začátku. Odkaz na jméno, číslo nebo dohodu z první zprávy najednou nefunguje, ačkoli o pár minut dřív fungoval bez problémů. Nejde o to, že by se model spletl. On tu informaci prostě už nemá.

Totéž se týká nahraných souborů. Když do chatu vložíte dlouhý PDF a pak se ptáte na desítky doplňujících otázek, historie konverzace postupně roste a ukusuje z okna kus po kuse. V jednu chvíli se může stát, že samotný obsah dokumentu vypadne dřív než vaše poslední otázky, protože byl v pořadí nejstarší.

Někteří poskytovatelé tenhle problém řeší jinak, třeba tím, že si dlouhý dokument model při každé nové otázce „přečte” znovu celý, místo aby si ho pamatoval z předchozích kroků. To má vlastní důsledek. Pokaždé se znovu platí za všechny tokeny toho dokumentu, což souvisí přesně s tím, jak se cena AI služeb počítá.

Od pár stránek po celé knihy

Velikosti kontextových oken se za poslední roky posunuly o pořádný kus. První veřejně dostupné chatboty zvládaly pojmout jen zlomek běžného dopisu, řádově tisíce tokenů na celou konverzaci. Dnešní běžné modely se pohybují v řádu desítek až stovek tisíc tokenů, u některých specializovaných nabídek jde o miliony.

Přesná čísla ale záměrně nevypisuju. Mění se v řádu měsíců, jednotliví poskytovatelé je zvětšují prakticky pořád a co je aktuální dnes, bude za půl roku zastaralé. Kdo potřebuje vědět, kolik textu konkrétní model unese, najde přesnou hodnotu v jeho oficiální dokumentaci, ne v článku, který zestárne dřív, než ho dočte.

Důležitější než konkrétní číslo je poměr. Krátký e-mail nebo jednoduchý dotaz spotřebuje jen zlomek dostupného okna, ať používáte model s menším, nebo větším limitem. Až u opravdu dlouhých vstupů, tlustého smluvního dokumentu, celého zdrojového kódu aplikace nebo hodiny trvající konverzace, se rozdíl mezi modely začne citelně projevovat.

Kde se to v praxi nejvíc pozná

Právníci a analytici, kteří nahrávají do AI dlouhé smlouvy nebo posudky, jsou první skupina, která na limit narazí. Čím delší dokument, tím dřív model začne „zapomínat” jeho úvodní části, pokud se s ním pracuje přes víc otázek za sebou.

Programátoři řeší podobný problém u velkých projektů. Když model pracuje s kódem, který se skládá z desítek souborů, nemusí mít v okně naráz všechno. Odpověď pak může vycházet jen z části kódu, aniž by to bylo na první pohled poznat.

A pak je tu obyčejná dlouhá konverzace, kdy se s modelem bavíte celý den o různých tématech. Ten pocit, že chatbot „zapomněl”, o čem jste se bavili ráno, není vrtoch. Je to přesně to, co dělá kontextové okno, když se naplní.

Na co si dát pozor

U dlouhých dokumentů si všímejte, jestli model odpovídá na základě celého textu, nebo jen jeho části. Pokud tvrdí, že něco v dokumentu není, přestože jste to tam sami viděli, zkuste se zeptat znovu s tou pasáží vloženou přímo do zprávy. Často to spolehlivě obnoví to, co z okna vypadlo.

U dlouhých konverzací pomáhá čas od času shrnout, na čem jste se zatím dohodli, a to shrnutí poslat jako novou zprávu. Zabere to míň místa než celá předchozí historie a model se k tomu snáz vrátí.

Nespoléhejte na to, že si model „pamatuje” něco, co jste zmínili dávno v dlouhém chatu, aniž byste to ověřili. U důležitých čísel, jmen nebo podmínek je lepší si je připomenout přímo, než věřit, že je model má stále po ruce.

Shrnutí

Kontextové okno určuje, kolik textu má model najednou k dispozici, ne kolik toho ví celkově. Měří se v tokenech, roste každým rokem, ale zůstává konečné, a jakmile se zaplní, nejstarší část konverzace nebo dokumentu z něj prostě vypadne.

Kdo pracuje s dlouhými smlouvami, kódem nebo hodinovými konverzacemi, udělá nejlíp, když si tenhle limit bude pamatovat sám za model. U mé smlouvy o pronájmu to nakonec vyřešilo jednoduché opatření: klíčové pasáže jsem vkládal do chatu znovu, pokaždé, když jsem se na ně ptal. Trvalo to o pár vteřin dýl. Za tu jistotu to stálo.