modulo 05 / lezione 29

Contesto, memoria e regole di progetto

Finestra di contesto: cosa ricorda davvero un LLM

Capire che il contesto non è memoria affidabile infinita, ma materiale temporaneo che va selezionato e curato.

60 min Vibe Coding

Finestra di contesto: cosa ricorda davvero un LLM

Un LLM non ha memoria. Ha una finestra di contesto: un blocco di testo che riceve in input ad ogni chiamata. Quel blocco contiene istruzioni, conversazione recente, file allegati, tool. Tutto ciò che non sta in quel blocco non esiste per il modello. Capirlo cambia il modo in cui scrivi prompt e gestisci sessioni lunghe.

Perché questa lezione conta

Senza modello mentale chiaro della finestra di contesto, finisci per credere che il modello “ricordi” la conversazione di tre giorni fa, che sappia cosa hai nel filesystem anche se non gliel’hai mostrato, o che si accorga di una contraddizione fra messaggi distanti. Niente di tutto questo è vero. Il modello processa solo ciò che riceve in input ora. Tutto il resto è gestione che fai tu (o l’IDE/agente).

Obiettivo operativo

Alla fine devi saper:

  1. distinguere fra istruzioni di sistema, messaggi recenti, allegati, memoria persistente, contesto recuperato;
  2. gestire sessioni lunghe senza perdere informazioni critiche;
  3. usare riassunti, decision log e file di regole come “memoria” affidabile.

Nucleo della lezione

1. Cosa entra nella finestra di contesto

Cinque categorie di contenuto:

  • Istruzioni di sistema (system prompt): persistenti per la sessione/agente, definiscono ruolo, regole, formato. Es. il prompt iniziale di un IDE AI.
  • Messaggi recenti: scambi user/assistant nella conversazione corrente. Più recenti pesano di più nell’attenzione del modello.
  • File allegati o letti via tool: codice, doc, dati passati esplicitamente o letti dall’agente.
  • Memoria persistente: per modelli che la supportano (Claude Projects, ChatGPT memory, Cursor rules), info salvate fra sessioni e re-iniettate.
  • Contesto recuperato (RAG): documenti rilevanti recuperati da knowledge base in base alla richiesta corrente.

Tutto questo si somma e occupa token. Il limite è la finestra di contesto del modello (es. 200K per Claude Sonnet, 1M per Gemini 1.5 Pro). Oltre il limite, qualcosa viene tagliato — silenziosamente in alcuni setup, con errore in altri.

2. Perdita di attenzione su contesti lunghi

Anche dentro la finestra, il modello non presta attenzione uniforme. Pattern noto:

  • Lost in the middle: dettagli a metà di un contesto lungo vengono ignorati o ricordati male. Le estremità (inizio, fine) tendono a essere più presenti.
  • Drift su sessioni lunghe: dopo 50+ turni, il modello dimentica vincoli iniziali, inventa coerenze, contraddice sé stesso.
  • Confusione fra istanze: se hai parlato di “il bottone” 30 volte in conversazione lunga riferendoti a oggetti diversi, il modello mescola.

Conseguenza: contesto più lungo non è automaticamente “più memoria”. Oltre certa lunghezza, qualità diminuisce.

Mitigazione: riassunti periodici, struttura esplicita (“messaggio precedente parlavamo di X, ora parliamo di Y”), file di regole all’inizio (che vengono caricati sempre come system prompt).

3. Tecniche di igiene

Cinque pratiche per mantenere contesto pulito:

Riassunti periodici: dopo 20-30 turni, chiedi al modello (o scrivi tu) un riassunto: cosa abbiamo deciso, cosa abbiamo scartato, dove siamo, cosa resta. Inizi nuova sessione con questo riassunto.

Decision log: file docs/decisions.md con righe: “2026-05-08: scelto Postgres come DB primario. Motivo: necessità join complessi. Alternative scartate: Mongo (relazioni naturali), SQLite (multi-utente)”. File leggibile da AI in sessioni future.

File di regole: AGENTS.md, CLAUDE.md, .cursor/rules. Caricati a ogni sessione, contengono ciò che non deve essere dimenticato.

Prompt di ripresa: quando riprendi un lavoro, primo messaggio è “stato del progetto: [riassunto]. Stiamo lavorando su [task]. Vincoli: […]”. Non assumere che il modello ricordi.

Contesto minimo rilevante: per ogni task, allega solo i file/info davvero necessari. Più contesto ≠ più qualità.

Procedura pratica

Per gestire sessioni lunghe:

  1. Scrivi system/file di regole solido: lì stanno le cose che non devono mai mancare.
  2. Sessioni focali: una conversazione per task, non per giornata.
  3. Riassumi ogni 20-30 turni: chiedi al modello di sintetizzare e usa quel testo come ripartenza.
  4. Decision log esterno: salva fuori dalla chat ciò che vuoi ricordare.
  5. Quando il modello dimentica: non insistere, riformula. Probabilmente l’info è uscita dall’attenzione effettiva.
  6. Nuova sessione: ricomincia con prompt di ripresa che riassume contesto.

Laboratorio guidato

Simulazione di sessione lunga:

Step 1: apri chat con un modello. Inizia con prompt di setup: “stiamo costruendo X, vincoli Y, stack Z. Mantieni questo contesto”.

Step 2: fai 20-30 messaggi su task vari connessi. Nota man mano se il modello dimentica vincoli iniziali.

Step 3: a turno 30, chiedi: “sintetizza in 5 righe stato attuale: cosa abbiamo deciso, cosa abbiamo scartato, dove siamo”.

Step 4: apri nuova chat (sessione vuota). Incolla la sintesi come primo messaggio. Continua il lavoro.

Step 5: confronta qualità delle risposte fra sessione lunga e nuova sessione con riassunto.

Quasi sempre la nuova sessione con riassunto produce risposte più pertinenti della sessione lunga continuata.

Output atteso

Un template “prompt di ripresa lavoro” personale, struttura:

  • Stato progetto: cosa è fatto.
  • Decisioni prese: punti chiave + motivazioni.
  • Vincoli vivi: rigidi e negoziabili.
  • Task corrente: cosa stiamo facendo ora.
  • Riferimenti: file di regole, architettura, decision log.

Salvalo, riusalo a ogni nuova sessione su progetti significativi.

Studio passo passo

Studia questa lezione in tre passaggi, senza correre subito al prompt o al codice.

  1. Prima lettura: chiarisci l’obiettivo: capire che il contesto non è memoria affidabile infinita, ma materiale temporaneo che va selezionato e curato. Se non riesci a riscriverlo in una frase tua, rileggi il nucleo della lezione.
  2. Seconda lettura: trasforma i contenuti in domande operative:
  • Differenza tra istruzioni di sistema, messaggi recenti, file allegati, memoria persistente e contesto recuperato.
  • Perdita di attenzione su conversazioni lunghe: il modello può ignorare dettagli vecchi o combinarli male.
  • Tecniche di igiene: riassunti, decision log, file di regole, prompt di ripresa e contesto minimo rilevante.
  1. Applicazione: svolgi il laboratorio: simulare una conversazione lunga e creare un riassunto operativo che mantenga decisioni, vincoli e prossimi passi. L’output da ottenere è: un formato di project brief aggiornabile da incollare o salvare quando si riprende il lavoro.

Prima di passare alla lezione successiva, controlla di avere un artefatto concreto: una tabella, un prompt, una checklist, un mini report, un diff commentato o una decisione scritta. Nel vibe coding la comprensione resta astratta finché non produce una traccia verificabile.

Checklist di verifica

  • so cosa entra nella finestra di contesto e cosa no;
  • ho almeno un decision log esterno alla chat;
  • non lascio sessioni durare più di 20-30 turni senza riassumere;
  • riconosco i sintomi di “modello che ha dimenticato” (contraddizioni, ripetizioni, perdita vincoli);
  • il mio AGENTS.md/CLAUDE.md è abbastanza completo da sostituire la “memoria” della chat.

Errori comuni

Credere che il modello “ricordi” come una persona. Non ricorda. Riceve testo, processa, dimentica appena finisce.

Sessioni troppo lunghe. Dopo 50 turni, qualità precipita. Apri nuova chat con riassunto.

Niente file di regole. Tutto vive nella chat. Sessione persa = lavoro reset.

Contesto enorme “per sicurezza”. Più non è meglio. Lost in the middle è reale. Calibrare.

Non documentare decisioni fuori dalla chat. Una settimana dopo riapri progetto e devi ricostruire tutto. Decision log sempre.

Trattare memoria persistente come affidabile. Memoria di ChatGPT/Claude è utile ma limitata, asincrona, può dimenticare. Non sostituisce file di regole.

Prompt di lavoro

Riassunto periodico:

Stiamo lavorando su [progetto] da una conversazione lunga. Prima di proseguire, scrivi un riassunto in 5 sezioni:

1. Stato progetto (cosa è fatto, cosa in corso, cosa rimanda)
2. Decisioni prese in questa sessione (con motivazioni)
3. Vincoli vivi (rigidi e negoziabili)
4. Cose esplicitamente scartate (per non riproporre)
5. Prossimi passi raccomandati

Output: testo da copiare in nuova sessione come prompt iniziale. Compatto, max 200 parole.

Prompt di ripresa:

Sto riprendendo lavoro su [progetto] dopo una pausa.

Contesto:
[incolla riassunto precedente]

File di regole rilevanti: [link a AGENTS.md, architettura.md, decisions.md]

Task corrente: [descrizione]

Prima di procedere:
1. Conferma di aver capito stato e contesto.
2. Lista assunzioni che stai facendo.
3. Domande per chiarire ambiguità.
4. Aspetta mio OK prima di proporre soluzioni.

Esercizio finale

Apri una conversazione lunga che hai avuto con un modello (>30 turni). Scorri dall’inizio: il modello ha mantenuto coerenza? Quanti vincoli iniziali sono “evaporati” durante la sessione? Riscrivi quella sessione come “prompt di ripresa breve” — molto probabilmente bastano 200 parole per contenere tutto ciò che davvero serve. Quel taglio rivela quanto contesto inutile trascini, e quanta capacità di attenzione del modello sprechi.