Context Window
Una finestra di contesto è il numero massimo di token a cui un modello può prestare attenzione in una singola richiesta, ripartito tra prompt, cronologia, documenti e risposta.
Una finestra di contesto è il numero massimo di token che un modello può considerare in una singola richiesta. Per un modello linguistico di grandi dimensioni (LLM), tutto ciò che legge e scrive condivide questo budget: il prompt di sistema, le definizioni degli strumenti, la cronologia della conversazione, i documenti recuperati, la domanda dell'utente e la risposta generata. Il testo fuori dalla finestra non arriva affatto al modello; per questo un chatbot perde il filo dell'inizio di una conversazione molto lunga quando i turni precedenti vengono tagliati. Le finestre sono cresciute dai 2.048 token di GPT-3 ai 128K token di GPT-4 Turbo alla fine del 2023 e al milione di token di Gemini 1.5 Pro di Google nel 2024; Llama 4 Scout di Meta ne dichiara 10 milioni.
Cosa occupa la finestra di contesto#
La tokenizzazione suddivide il testo in parti di parole che in media corrispondono a circa quattro caratteri inglesi; una finestra da 128K token contiene quindi l'equivalente di circa 300 pagine. Anche un modello visione-linguaggio (VLM) usa token per le immagini, di solito centinaia di token di patch per immagine, perciò un video lungo riempie la finestra molto più rapidamente della sua trascrizione. I token generati vengono conteggiati nello stesso limite e i provider stabiliscono un limite separato alla lunghezza dell'output al suo interno. Le applicazioni che gestiscono conversazioni lunghe o agenti IA assemblano quindi il prompt a ogni turno e decidono cosa mantenere:
Perché le finestre hanno limiti#
I costi che crescono con la lunghezza sono due. La self-attention confronta ogni token con tutti gli altri, quindi il calcolo dell'attenzione cresce in modo quadratico rispetto al numero di token. Durante la generazione del testo, la cache KV conserva chiavi e valori di ogni token precedente: Llama 3.1 8B, con 32 layer e 8 teste key-value da 128 dimensioni ciascuna, memorizza 128 KiB per token a precisione a 16 bit, ovvero 16 GiB per l'intera finestra di 131.072 token, più dei 16 GB occupati dai suoi pesi.
La finestra dipende anche dall'addestramento. Un modello addestrato su sequenze da 8K token non ha mai visto posizioni successive, quindi per estenderla occorre riscalare i suoi embedding posizionali rotativi (RoPE) con metodi come YaRN e affinare brevemente il modello su testi più lunghi. Per gestire finestre lunghe durante l'inferenza si ricorre a tecniche di risparmio della memoria: la flash attention calcola l'attenzione esatta senza memorizzare l'intera matrice dei punteggi, la grouped-query attention (GQA) riduce la cache KV, la sliding window attention limita ogni token ai vicini più recenti e la ring attention distribuisce una sequenza su molte GPU.
Contesto dichiarato ed effettivo#
Un modello che accetta un milione di token non li sfrutta tutti altrettanto bene. Lo studio del 2023 Lost in the Middle ha rilevato che i modelli rispondono meglio quando il passaggio pertinente si trova all'inizio o alla fine del prompt e peggio quando si trova nel mezzo. I test Needle in a haystack (NIAH) misurano il recupero di un fatto inserito a ogni profondità e lunghezza, e il più difficile benchmark RULER ha rilevato che solo la metà dei 17 modelli che dichiaravano almeno 32K token ha ottenuto risultati soddisfacenti a 32K. Il calo graduale delle prestazioni all'aumentare degli input si chiama degrado del contesto; la generazione aumentata dal recupero (RAG) e l'ingegneria del contesto lo contrastano inserendo nella finestra solo il materiale pertinente.
Finestra di contesto e termini correlati#
- Campo ricettivo: Regione di un'immagine di input che influenza un output di una rete neurale convoluzionale (CNN). È determinata dalle dimensioni dei kernel e dalla profondità, mentre una finestra di contesto è un budget di token.
- Dimensione del batch: Numero di sequenze indipendenti elaborate insieme. La finestra di contesto limita la lunghezza di ciascuna sequenza.
- Memoria: La memoria di un agente, come la memoria episodica archiviata in un database vettoriale, persiste al di fuori della finestra e viene copiata al suo interno quando è pertinente.
Finestre di contesto nel rilevamento a vocabolario aperto#
Anche gli encoder di testo all'interno dei modelli di visione hanno finestre di contesto. Ultralytics YOLOE e YOLO-World codificano ogni prompt di classe con un encoder di testo della famiglia CLIP, la cui finestra di contesto è di 77 token; per impostazione predefinita, l'encoder di testo Ultralytics tronca i prompt più lunghi. Il tokenizzatore CLIP mostra cosa viene tagliato:
import clip
from clip.simple_tokenizer import SimpleTokenizer
prompt = (
"a warehouse worker wearing a yellow high-visibility vest, a white hard hat, blue gloves and clear safety "
"glasses, standing beside a red forklift that carries wooden pallets stacked with brown cardboard boxes, "
"under bright ceiling lights in a narrow aisle between tall metal shelves, next to a fire extinguisher "
"mounted on the wall, a green emergency exit sign, an open loading dock door and a black dog"
)
# CLIP's BPE tokenizer wraps the text in start and end tokens
tokenizer = SimpleTokenizer()
print(f"Prompt length: {len(tokenizer.encode(prompt)) + 2} tokens")
# The text encoder reads a fixed 77-token window, so truncation drops the tail
tokens = clip.tokenize(prompt, truncate=True)[0]
kept = tokenizer.decode(tokens[1:-1].tolist())
print(f"Window: {len(tokens)} tokens ending in '{' '.join(kept.split()[-4:])}'")
print(f"'black dog' kept: {'black dog' in kept}")Il prompt è lungo 80 token, quindi la finestra conserva i primi 75 token di testo più i marcatori di inizio e fine, termina con "porta del molo di carico e" e scarta "un cane nero" prima che l'encoder possa anche solo vederlo.










