Istoricul conversațiilor
O conversație lungă se lovește de un zid dur: fereastra de context a modelului. Tot ce se află pe această pagină există din cauza acelui zid, iar partea interesantă este ce se aruncă, ce se păstrează și ce poate fi recuperat.
Patru modalități de a recupera context
Secțiune intitulată „Patru modalități de a recupera context”Nu sunt atât alternative, cât o scară, de la cea mai ieftină în sus.
| Mecanism | Cost | Păstrează | Pierde |
|---|---|---|---|
| Eliziune | Nimic | Fiecare cuvânt din narațiune | Rezultate de instrument mai vechi, lipsite de evenimente |
| Eliminarea imaginilor | Nimic | Textul din jurul lor | Capturi de ecran vechi |
| Snapshoturi | Nimic | Fiecare cuvânt, ca pixeli | Lizibilitatea pentru un model fără viziune |
| Rezumat | Un apel de model | O narațiune | Detaliile pe care nu le-a ales |
Eliziunea și eliminarea imaginilor rulează primele pentru că sunt gratuite și fără pierderi în sensul care contează: aruncă un volum pe care nimeni nu avea de gând să îl recitească.
De ce rezumarea este ultima soluție
Secțiune intitulată „De ce rezumarea este ultima soluție”Un rezumat este singurul dintre cele patru care consumă un apel de model și singurul care decide în locul tău ce a contat. Ambele sunt costuri reale. Apelul este cel mai interesant, din cauza momentului în care are loc.
Compactarea rulează de obicei înaintea zidului, la un prag. Dar rulează și reactiv, după ce providerul însuși respinge o cerere ca fiind prea mare — estimarea euristică a subevaluat ce a măsurat efectiv providerul. În acea situație, un compactor care rezumă trebuie să facă o cerere pentru a micșora contextul, iar cererea pe care o face este exact cea care tocmai a depășit limita.
Snapshoturi
Secțiune intitulată „Snapshoturi”Compactarea prin snapshoturi redă istoricul aruncat pe pagini dense de glife în pixeli și le înapoiază sub formă de imagini.
Premisa este o particularitate de facturare: un model de viziune taxează o imagine la un tarif fix sau proporțional cu suprafața, care nu are nicio legătură cu câte caractere conține. Douăsprezece mii de caractere dintr-o conversație aruncată costă echivalentul a douăsprezece mii de caractere în tokenuri de text. Aceleași caractere redate pe o singură pagină costă o imagine.
Ceea ce o face demnă de folosit, nu doar deșteaptă, este că nu are nevoie de niciun apel de model, nicio cheie și nicio rețea. Este singura strategie disponibilă întotdeauna în timpul recuperării după depășirea limitei.
Forma reconstrucției este: cap verbatim, mijloc redat ca imagine, coadă verbatim. Capul este sarcina și constrângerile la care se raportează tot ce urmează; coada este locul unde se află munca în acest moment. Mijlocul este partea recitită cel mai rar și care costă cel mai mult.
Snapshoturile sunt redate din nou din textul sursă păstrat la fiecare trecere, niciodată din pixelii trecerii anterioare. A reda o imagine ca imagine degradează glifele cu o generație la fiecare compactare, până când nimic nu le mai poate citi.
De la ce reia de fapt o rulare
Secțiune intitulată „De la ce reia de fapt o rulare”Istoric, fiecare rulare a harness-ului pornea de la un istoric gol și reconstruia continuitatea dintr-un bloc <context> din prompt — un rezumat al conversației, nu conversația în sine. Din asta decurgeau trei lucruri:
- Reluarea era o repovestire. Modelul nu-și vedea niciodată propriul raționament anterior sau octeții efectivi pe care i-au returnat instrumentele, ci doar o descriere a lor.
- Rewind murea împreună cu procesul. Un
checkpointeste un index în lista de mesaje active, așa că o repornire pierdea fiecare etichetă pe care o stabilise modelul. - Reîncercarea nu putea distinge „nimic de reîncercat” de „nimic încărcat”. După o repornire, turul eșuat dispare din starea activă în ambele cazuri.
Toate trei sunt rezolvate prin persistarea transcriptului. Acesta este salvat la fiecare limită de tur și niciodată la mijlocul unui tur: un istoric capturat între un apel de instrument și rezultatul lui este unul pe care niciun provider nu îl acceptă, așa că un crash în acel moment restaurează turul precedent, nu un jumătate de tur care nu poate fi redat.
O rulare reluată este redusă la cele mai noi mesaje ale sale, tăind la o limită care nu este un rezultat de instrument orfan — un rezultat al cărui apel a fost eliminat este o cerere pe care providerii o resping direct, iar un transcript care nu poate fi trimis este mai rău decât unul scurt.
Arborele de sesiuni
Secțiune intitulată „Arborele de sesiuni”Fiecare mesaj înregistrează mesajul din care continuă, iar fiecare conversație își numește vârful ramurii curente. Acea singură decizie este întreaga funcționalitate.
Ramificarea nu scrie nimic. Mută pointerul. Calea pe care ai părăsit-o este încă acolo, așa că revenirea este o altă mutare de pointer, nu o restaurare — iar editarea unui prompt pentru a-l rula din nou nu te mai costă răspunsul cu care îl comparai.
Fără ea, orice formă de a te întoarce trebuie să ascundă sau să șteargă mesaje, iar ascunderea este o minciună pe care următorul cititor nu o poate vedea.
Ramură versus fork
Secțiune intitulată „Ramură versus fork”| Ramură | Fork | |
|---|---|---|
| Ce se întâmplă | Pointerul se mută | Calea este copiată |
| Unde ajunge | Aceeași conversație | O conversație nouă |
| Cost | Nimic | O copie a ramurii |
Un fork copiază cu id-uri noi, în loc să partajeze rânduri. Două conversații care ar partaja rânduri ar arăta mesajele ulterioare ale celeilalte, iar asta este singurul lucru pe care un fork nu trebuie să îl facă.
Rewind folosește același pointer
Secțiune intitulată „Rewind folosește același pointer”Perechea checkpoint / rewind din timpul rulării marchează o limită de tur curată și revine la ea după o explorare, păstrând un digest. Deoarece checkpointurile sunt persistate împreună cu transcriptul, o etichetă pe care modelul a stabilit-o înainte de o repornire ajunge tot acolo unde a fost stabilită. Un checkpoint al cărui țintă nu a supraviețuit unei tăieri este eliminat, nu ajustat la cea mai apropiată limită — un Rewind „la etichetă” care aterizează în altă parte este exact eșecul pe care o etichetă există ca să îl prevină.
- Ramifică o conversație — navigatorul de arbore, fork-urile și exportul
- Contextul instrumentelor și cache-ul prompturilor — cealaltă jumătate din ce umple o fereastră de context
- Comenzi slash —
/compact,/shake,/context,/tree