Přeskočit na obsah

Historie konverzací

Dlouhá konverzace narazí na tvrdou zeď: kontextové okno modelu. Tahle stránka je tu kvůli té zdi. Zajímavé je, co se zahodí, co zůstane a co se dá dostat zpátky.

Čtyři způsoby, jak uvolnit kontext

Sekce “Čtyři způsoby, jak uvolnit kontext”

Nejsou to alternativy. Je to žebřík a začíná se nejlevnějším.

Mechanismus Cena Ponechá Ztratí
Elize Nic Každé slovo vyprávění Starší výsledky nástrojů, ve kterých se nic nestalo
Odhození obrázků Nic Text kolem nich Staré snímky obrazovky
Snímky Nic Každé slovo, jako pixely Čitelnost pro model bez vidění
Shrnutí Jedno volání modelu Vyprávění Podrobnosti, které nevybralo

Elize a odhození obrázků jdou první, protože jsou zadarmo a bezeztrátové tam, kde na tom záleží: zahodí objem, ke kterému se už nikdo nevrátí.

Proč je shrnutí až poslední možnost

Sekce “Proč je shrnutí až poslední možnost”

Shrnutí je z těch čtyř jediné, které spotřebuje volání modelu, a jediné, které rozhodne za tebe, co bylo podstatné. Obojí je skutečná cena. Zajímavější je to volání, kvůli chvíli, kdy k němu dojde.

Komprimace obvykle běží před zdí, na prahu. Běží ale i reaktivně, až když poskytovatel sám odmítne požadavek jako příliš velký: heuristický odhad podhodnotil to, co poskytovatel skutečně naměřil. V té situaci musí komprimace shrnutím poslat požadavek, který kontext zmenší, a ten požadavek je právě ten, který přetekl.

Komprimace snímky vykreslí zahozenou historii na husté stránky pixelových glyfů a vrátí je jako obrázky.

Stojí to na zvláštnosti účtování: vizuální model účtuje obrázek paušálem nebo úměrně ploše, bez ohledu na to, kolik je v něm znaků. Dvanáct tisíc znaků zahozené konverzace stojí dvanáct tisíc znaků v textových tokenech. Tytéž znaky vykreslené na jednu stránku stojí jeden obrázek.

Není to jen chytrý trik. Vyplatí se to proto, že nepotřebuje žádné volání modelu, žádný klíč a žádnou síť. Je to jediná strategie, která je při zotavení z přetečení vždy po ruce.

Tvar rekonstrukce je doslovný začátek, střed jako obrázek a doslovný konec. Začátek je úkol a omezení, na která se odvolává všechno, co následuje. Konec je tam, kde práce právě je. Střed se čte znovu nejmíň a stojí nejvíc.

Snímky se při každém průchodu vykreslují znovu z uchovaného zdrojového textu, nikdy z pixelů předchozího průchodu. Snímek ze snímku kazí glyfy o jednu generaci s každou komprimací, dokud je nepřečte vůbec nic.

Z čeho se běh vlastně obnovuje

Sekce “Z čeho se běh vlastně obnovuje”

Historicky každý běh harnessu začínal s prázdnou historií a návaznost skládal z bloku <context> v promptu, tedy ze shrnutí konverzace, ne z konverzace samotné. Z toho plynuly tři věci:

  • Obnovení bylo převyprávění. Model nikdy neviděl vlastní dřívější uvažování ani skutečné bajty, které vrátily nástroje, jen jejich popis.
  • Přetočení zemřelo s procesem. checkpoint je index do živého seznamu zpráv, takže restart ztratil každý štítek, který model nastavil.
  • Opakování nerozeznalo „není co opakovat“ od „nic se nenačetlo“. Po restartu je neúspěšný tah z živého stavu pryč v obou případech.

Všechny tři řeší uložený přepis. Ukládá se na každé hranici tahu a nikdy uprostřed tahu: historie zachycená mezi voláním nástroje a jeho výsledkem je historie, kterou žádný poskytovatel nepřijme. Pád v tu chvíli proto obnoví tah předtím, ne půltah, který nejde přehrát.

Obnovený běh se ořízne na nejnovější zprávy a řez jde po hranici, která není osiřelý výsledek nástroje. Výsledek, jehož volání ořez odstranil, poskytovatelé rovnou odmítnou, a přepis, který nejde poslat, je horší než krátký.

Každá zpráva si pamatuje tu, na kterou navazuje, a každá konverzace pojmenuje aktuální špičku větve. Tohle jediné rozhodnutí je celá funkce.

Větvení nic nezapisuje. Posune ukazatel. Cesta, kterou jsi opustil, tam pořád je, takže návrat je další posun ukazatele, ne obnova. A úprava promptu kvůli novému běhu tě už nestojí odpověď, se kterou jsi porovnával.

Bez toho se každá cesta zpátky musí schovat nebo smazat zprávy a schování je lež, kterou další čtenář neprohlédne.

Větev Fork
Co se stane Ukazatel se posune Cesta se zkopíruje
Kam to jde Stejná konverzace Nová konverzace
Cena Nic Jedna kopie větve

Fork kopíruje s novými id a řádky nesdílí. Dvě konverzace se sdílenými řádky by si navzájem ukazovaly pozdější zprávy, a právě to fork nesmí.

Přetočení jede po stejném ukazateli

Sekce “Přetočení jede po stejném ukazateli”

Dvojice checkpoint / rewind uvnitř běhu označí čistou hranici tahu a po průzkumu se na ni vrátí, i s výtahem. Checkpointy se ukládají spolu s přepisem, takže štítek, který model nastavil před restartem, pořád sedí tam, kde byl nastaven. Checkpoint, jehož cíl ořez nepřežil, se zahodí, nepřipne se na nejbližší zbylou zprávu. Přetočit „na štítek“ a přistát jinde je přesně ta chyba, které má štítek zabránit.