Cronologia delle conversazioni
Una conversazione lunga finisce contro un muro invalicabile: la finestra di contesto del modello. Tutto in questa pagina esiste a causa di quel muro, e la parte interessante è ciò che viene buttato via, ciò che viene conservato e ciò che si può recuperare.
Quattro modi per recuperare contesto
Sezione intitolata “Quattro modi per recuperare contesto”Non sono tanto alternative quanto i gradini di una scala, a partire dal più economico.
| Meccanismo | Costo | Conserva | Perde |
|---|---|---|---|
| Elisione | Niente | Ogni parola della narrazione | I risultati degli strumenti più vecchi e privi di eventi |
| Eliminazione delle immagini | Niente | Il testo che le circonda | Le vecchie schermate |
| Istantanee | Niente | Ogni parola, sotto forma di pixel | La leggibilità per un modello senza capacità visiva |
| Riepilogo | Una chiamata al modello | Una narrazione | I dettagli che non ha selezionato |
L’elisione e l’eliminazione delle immagini vengono eseguite per prime perché sono gratuite e senza perdite nel modo che conta: eliminano una mole di dati che nessuno avrebbe riletto.
Perché il riepilogo è l’ultima risorsa
Sezione intitolata “Perché il riepilogo è l’ultima risorsa”Un riepilogo è l’unico dei quattro che spende una chiamata al modello e l’unico che decide al posto tuo cosa contava. Entrambe sono costi reali. La chiamata è quella più interessante, per via di quando avviene.
La compattazione di solito viene eseguita prima del muro, su una soglia. Ma viene eseguita anche in modo reattivo, dopo che il provider stesso ha rifiutato una richiesta perché troppo grande: la stima euristica aveva sottostimato ciò che il provider aveva effettivamente misurato. In quella situazione un compattatore che riepiloga deve fare una richiesta per ridurre il contesto, e la richiesta che fa è proprio quella che è appena andata in overflow.
Istantanee
Sezione intitolata “Istantanee”La compattazione tramite istantanee renderizza la cronologia scartata su pagine dense di glifi in pixel e le restituisce come immagini.
Il presupposto è una stranezza della fatturazione: un modello con capacità visiva addebita un’immagine a una tariffa fissa o proporzionale all’area, che non ha nulla a che vedere con quanti caratteri contenga. Dodici mila caratteri di conversazione scartata costano quanto i token di testo di dodici mila caratteri. Gli stessi caratteri renderizzati su una sola pagina costano un’immagine.
Ciò che le rende utili e non solo ingegnose è che non richiedono alcuna chiamata al modello, alcuna chiave e alcuna rete. Sono l’unica strategia sempre disponibile durante il recupero da un overflow.
La forma della ricostruzione è: testa letterale, parte centrale come immagine, coda letterale. La testa è il compito e i vincoli a cui tutto ciò che segue fa riferimento; la coda è dove si trova attualmente il lavoro. La parte centrale è quella che viene riletta meno e costa di più.
Le istantanee vengono renderizzate di nuovo dal testo di origine conservato a ogni passaggio, mai dai pixel del passaggio precedente. Convertire un’immagine in un’immagine degrada i glifi di una generazione a ogni compattazione, finché nessuno riesce più a leggerli.
Da cosa riprende davvero un’esecuzione
Sezione intitolata “Da cosa riprende davvero un’esecuzione”In passato ogni esecuzione dell’harness partiva da una cronologia vuota e ricostruiva la continuità da un blocco <context> nel prompt: una sintesi della conversazione anziché la conversazione stessa. Ne derivavano tre cose:
- Riprendere significava raccontare di nuovo. Il modello non vedeva mai il proprio ragionamento precedente né i byte effettivi restituiti dai suoi strumenti, solo una loro descrizione.
- Il rewind moriva con il processo. Un
checkpointè un indice nella lista dei messaggi attivi, quindi un riavvio perdeva ogni etichetta impostata dal modello. - Il retry non sapeva distinguere “niente da riprovare” da “niente caricato”. Dopo un riavvio, il turno fallito in ogni caso non è più nello stato attivo.
Tutti e tre i problemi si risolvono rendendo persistente la trascrizione. Viene salvata a ogni confine di turno e mai a metà turno: una cronologia catturata tra una chiamata a uno strumento e il suo risultato è una cronologia che nessun provider accetterà, quindi un crash in quell’istante ripristina il turno precedente anziché mezzo turno che non può essere riprodotto.
Un’esecuzione ripresa viene ridotta ai suoi messaggi più recenti, tagliando a un confine che non sia un risultato di strumento orfano: un risultato la cui chiamata è stata tagliata via è una richiesta che i provider rifiutano senza appello, e una trascrizione che non può essere inviata è peggio di una corta.
L’albero delle sessioni
Sezione intitolata “L’albero delle sessioni”Ogni messaggio registra quello da cui prosegue, e ogni conversazione indica la propria punta del ramo corrente. Quella singola decisione è l’intera funzionalità.
Ramificare non scrive nulla. Sposta il puntatore. Il percorso che hai lasciato è ancora lì, quindi tornare indietro è un altro spostamento del puntatore, non un ripristino: e modificare un prompt per rieseguirlo non ti costa più la risposta con cui lo stavi confrontando.
Senza di esso, ogni forma di ritorno indietro deve nascondere o eliminare messaggi, e nascondere è una bugia che il lettore successivo non può smascherare.
Ramo e biforcazione
Sezione intitolata “Ramo e biforcazione”| Ramo | Biforcazione | |
|---|---|---|
| Cosa succede | Il puntatore si sposta | Il percorso viene copiato |
| Dove va | La stessa conversazione | Una nuova conversazione |
| Costo | Niente | Una copia del ramo |
Una biforcazione copia con id nuovi anziché condividere le righe. Due conversazioni che condividono le righe mostrerebbero l’una i messaggi successivi dell’altra, che è l’unica cosa che una biforcazione non deve fare.
Il rewind usa lo stesso puntatore
Sezione intitolata “Il rewind usa lo stesso puntatore”La coppia checkpoint / rewind all’interno di un’esecuzione contrassegna un confine di turno pulito e vi ritorna dopo un’esplorazione, conservando un digest. Poiché i checkpoint vengono resi persistenti insieme alla trascrizione, un’etichetta impostata dal modello prima di un riavvio arriva comunque dove era stata impostata. Un checkpoint il cui obiettivo non è sopravvissuto a una potatura viene scartato, non riallineato: tornare “all’etichetta” e atterrare altrove è esattamente il fallimento che un’etichetta esiste per prevenire.
Correlati
Sezione intitolata “Correlati”- Ramifica una conversazione — il navigatore ad albero, la biforcazione e l’esportazione
- Contesto degli strumenti e cache dei prompt — l’altra metà di ciò che riempie una finestra di contesto
- Comandi slash —
/compact,/shake,/context,/tree