Menu

Token e finestra di contesto: come legge l'IA

I modelli di IA leggono il testo come token, piccoli pezzi di parole, e possono contenerne solo un numero limitato alla volta: la finestra di contesto. Scopri come funzionano entrambi e cosa fare quando una chat si allunga.

Ogni prompt qui sotto è modificabile: cambialo, poi aprilo in ChatGPT, Claude o un'altra app di AI.

I modelli linguistici di IA non leggono lettere o parole. Leggono token: piccoli pezzi di testo, spesso una parola intera, a volte una parte. E possono ricevere solo un numero limitato di token alla volta, un limite chiamato finestra di contesto. Queste due idee spiegano perché gli strumenti di IA hanno i prezzi che hanno, perché le chat lunghe cominciano a dimenticare le prime istruzioni e perché un modello può faticare a contare le lettere di una parola che ha appena scritto correttamente.

Cos'è un token nell'IA?

Prima che il modello veda il tuo prompt, un programma chiamato tokenizzatore divide il testo in pezzi presi da un vocabolario fisso e trasforma ogni pezzo in un numero. Il modello lavora solo con quei numeri, e scrive la risposta allo stesso modo, un token alla volta, che l'app ritrasforma in testo.

Il vocabolario viene appreso da grandi quantità di testo, quindi le parole comuni tendono a essere un solo token e quelle più rare vengono divise in più pezzi noti. Uno spazio spesso resta attaccato all'inizio della parola che lo segue. Una frase in inglese potrebbe essere divisa più o meno così:

Token ization isn 't magic .

Questa divisione è solo un'illustrazione. Ogni famiglia di modelli ha il suo tokenizzatore, e la stessa frase può uscire in un numero diverso di pezzi in ciascuno. Molti provider pubblicano uno strumento di tokenizzazione o un'API per contare i token, così puoi verificare i numeri reali.

Anche le immagini, l'audio e i file vengono convertiti in token quando un modello li accetta, ed è per questo che uno screenshot allegato consuma parte dello stesso budget del tuo testo.

Quanti token è una parola?

Per i testi in inglese, una regola pratica molto usata è di circa quattro caratteri per token, cioè circa tre quarti di parola. Secondo questa stima, 1.000 token sono circa 750 parole inglesi, e un articolo di 3.000 parole è di circa 4.000 token.

Il rapporto cambia con il contenuto:

  • Le altre lingue spesso richiedono più token per lo stesso significato. I tokenizzatori vengono addestrati su dati in cui l'inglese è molto rappresentato, quindi le parole inglesi ricevono token compatti, mentre i testi in italiano, giapponese, coreano, arabo, hindi e molte altre lingue vengono divisi in più pezzi. Il divario dipende dal tokenizzatore e si è ridotto in quelli più recenti, ma non è scomparso.
  • Il codice consuma token per l'indentazione, le parentesi, gli operatori e gli identificatori lunghi, quindi un file spesso costa più token di quanto suggerisca il numero di parole.
  • Numeri, URL e stringhe insolite come ID e hash tendono a essere divisi in tanti token piccoli.

Perché i token contano

Costo. Le API fanno pagare a token, con prezzi separati per i token che invii e quelli che il modello scrive. In una chat, l'intera conversazione viene inviata di nuovo a ogni nuovo messaggio, quindi una conversazione lunga costa di più per messaggio rispetto a una breve.

Limiti. Un modello ha una finestra di contesto per tutto ciò che legge e scrive in una richiesta, e spesso un tetto separato per la lunghezza di una singola risposta. Nell'API puoi impostare tu quel tetto, e con l'API di Anthropic è obbligatorio: max_tokens è un parametro richiesto.

Velocità. La risposta viene prodotta un token dopo l'altro, quindi una risposta più lunga impiega proporzionalmente più tempo a finire.

Compiti di ortografia. Siccome il modello vede una parola come magic come una o due unità e non come cinque lettere, i compiti che dipendono dai singoli caratteri, come contare le lettere, invertire una parola o trovare parole di una lunghezza esatta, sono più difficili per lui di quanto sembri. I modelli più recenti gestiscono meglio molti di questi compiti, ma quando i caratteri contano, controlla la risposta o chiedi al modello di scrivere prima la parola lettera per lettera.

Cos'è una finestra di contesto?

La finestra di contesto è il numero massimo di token che un modello può considerare in una singola richiesta. Pensala come la memoria di lavoro del modello: tutto ciò che il modello può usare per scrivere la risposta deve starci dentro contemporaneamente, compresi:

  • il system prompt, con le istruzioni dell'app e le tue
  • la conversazione fino a quel momento, ogni messaggio dell'utente e ogni risposta
  • i file allegati, i documenti incollati e i risultati di ricerche o strumenti
  • la risposta in corso di scrittura

Tutto ciò che resta fuori dalla finestra per il modello non esiste. Non c'è una memoria di sottofondo in cui possa cercare. Le dimensioni della finestra di contesto variano molto da un modello all'altro e continuano a crescere, quindi controlla la documentazione del tuo provider per il modello che usi invece di fidarti di un numero letto in un articolo.

Il modello inoltre non conserva nulla tra una richiesta e l'altra. Quella che in una chat sembra memoria è l'app che invia di nuovo tutta la conversazione ogni volta. Le funzioni di memoria delle app di chat funzionano allo stesso modo: l'app salva note su di te, o cerca nelle tue chat precedenti, e inserisce ciò che trova nel contesto delle chat nuove.

Cosa succede quando una chat si allunga

Quando una conversazione supera la finestra di contesto, qualcosa deve cedere. A seconda dell'app, i messaggi più vecchi vengono scartati, le parti più vecchie vengono sostituite da un riassunto, oppure ti viene detto che la chat ha raggiunto il limite e conviene aprirne una nuova. In ogni caso, i dettagli dell'inizio, comprese le istruzioni che hai dato nel primo messaggio, possono smettere di influire sulle risposte.

Una finestra piena non è l'unico problema. Più materiale il modello ha davanti, più cose può trascurare, e in una chat lunga le decisioni iniziali competono con tutto ciò che è stato detto dopo. I sintomi includono risposte che ignorano un vincolo che avevi fissato prima, codice che torna a una versione che avevi già corretto o un modello che ripropone un'idea che avevi scartato.

Lavorare dentro la finestra di contesto

Apri una chat nuova per ogni compito. Una chat nuova con un primo messaggio chiaro di solito batte una chat lunga che è passata per diversi argomenti.

Porta avanti un riassunto. Quando una chat ha accumulato decisioni utili, chiedi un riassunto scritto per essere incollato in una chat nuova, poi continua lì. Compila gli spazi qui sotto in base al tuo lavoro.

Continuare in una chat nuova
Fill in
Questa chat sta diventando lunga. Scrivi un riassunto che posso incollare in una chat nuova per continuare il lavoro. Includi: l'obiettivo, le decisioni che abbiamo preso e perché, la versione attuale di lo schema del database e le domande aperte. Il riassunto deve restare sotto le 200 parole, senza contare lo schema del database.
Try it
Example replyReplies vary between models and runs.

Obiettivo: un database per una piccola app di biblioteca, salvato in SQLite.

Decisioni:

  • I prestiti hanno una tabella tutta loro, così si conserva l'intera cronologia dei prestiti.
  • Un libro è disponibile quando non ha nessun prestito con returned_at vuoto.

Schema attuale:

CREATE TABLE books (id INTEGER PRIMARY KEY, title TEXT NOT NULL, author TEXT NOT NULL);
CREATE TABLE members (id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE);
CREATE TABLE loans (
  id INTEGER PRIMARY KEY,
  book_id INTEGER NOT NULL REFERENCES books(id),
  member_id INTEGER NOT NULL REFERENCES members(id),
  loaned_at TEXT NOT NULL,
  returned_at TEXT
);

Domande aperte:

  • Servono le multe per i ritardi?
  • La biblioteca dovrebbe tenere traccia di più copie dello stesso libro?

Incolla solo ciò che serve al compito. La funzione con il bug e il codice che la chiama, non l'intero repository. La clausola del contratto in questione, non tutte le quaranta pagine. Meno materiale lascia meno cose da trascurare.

Metti la domanda dopo il materiale lungo e ripeti ciò che conta. Quando incolli un documento lungo, fai la domanda alla fine, dopo il documento, e ripeti lì i vincoli principali. Così l'istruzione si trova vicino al punto in cui il modello comincia a scrivere.

Dividi un documento troppo lungo per un solo messaggio. Alcune app limitano quanto puoi incollare in un singolo messaggio anche quando la finestra del modello potrebbe contenere di più. Inviare il documento a parti aggira il limite del messaggio, ma non la finestra di contesto: ogni parte continua a contare. Di' al modello fin dall'inizio di non rispondere finché non hai inviato tutto.

Fill in
Ti invierò un documento lungo in 3 parti. Dopo ogni parte, rispondi solo con "Ricevuta la parte N di 3" e nient'altro. Non riassumere e non rispondere a niente finché non faccio la mia domanda. Parte 1 di 3: """ [incolla la parte 1] """
Try it
Example replyReplies vary between models and runs.

Ricevuta la parte 1 di 3

Conta i token quando conta. Se stai sviluppando con un'API, conta prima di inviare. La libreria open source tiktoken di OpenAI tokenizza il testo con i tokenizzatori di OpenAI, e l'API di Anthropic ha un endpoint per contare i token. I conteggi del tokenizzatore di un provider sono solo una stima per quello di un altro.

import tiktoken

enc = tiktoken.get_encoding("o200k_base")  # one of OpenAI's tokenizers
tokens = enc.encode("Tokenization isn't magic.")
print(len(tokens))
print([enc.decode([t]) for t in tokens])

Quando costruisci un'app intorno a un modello, decidere cosa entra nella finestra e in che ordine diventa un problema di progettazione a sé. Il context engineering tratta questo tema, e il prompt chaining mostra come dividere un lavoro grande in passaggi che ci stanno comodamente. Per capire come un singolo messaggio si inserisce nell'intero input, vedi cos'è un prompt.

Domande frequenti

Cos'è un token nell'IA?

Un token è l'unità di testo che un modello linguistico legge e scrive. Può essere un'intera parola comune, una parte di una parola più lunga, un segno di punteggiatura o uno spazio. Prima che il modello veda il tuo prompt, un tokenizzatore lo divide in token e trasforma ciascuno in un numero, e il modello genera la risposta un token alla volta.

Quante parole sono 1.000 token?

Per l'inglese, una regola pratica comune è di circa quattro caratteri per token, cioè più o meno 750 parole ogni 1.000 token. Il numero reale dipende dal tokenizzatore del modello e dal testo. Il codice, i numeri e molte lingue diverse dall'inglese, italiano compreso, usano più token per la stessa quantità di contenuto.

Cos'è una finestra di contesto?

La finestra di contesto (context window) è il numero massimo di token che un modello può considerare in una richiesta. Deve contenere il system prompt, la conversazione fino a quel momento, i file allegati o i risultati degli strumenti e la risposta che il modello sta scrivendo. Tutto ciò che resta fuori per il modello non esiste.

Cosa succede quando una chat supera la finestra di contesto?

L'app deve fare spazio. A seconda dell'app, scarta i messaggi più vecchi, li sostituisce con un riassunto o ti avvisa che la conversazione ha raggiunto il limite. In ogni caso, le istruzioni e i dettagli dell'inizio della chat possono smettere di influire sulle risposte, ed è per questo che le chat lunghe a volte sembrano dimenticare le cose.

ChatGPT o Claude ricordano le mie chat precedenti?

Il modello in sé no. Ogni risposta viene generata da ciò che c'è nella finestra di contesto per quella richiesta. Alcune app hanno funzioni di memoria che salvano note su di te o cercano nelle tue chat passate e aggiungono ciò che trovano alle chat nuove, e i progetti possono includere file e istruzioni condivisi, ma è l'app che inserisce testo nel contesto, non il modello che ricorda.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA