Dopo alcuni anni in cui l'ingegneria dei prompt era al centro dell'attenzione nel campo dell'IA applicata, un nuovo termine si è imposto:

ingegneria contestuale. La costruzione di modelli linguistici sta diventando meno un problema di trovare le parole o espressioni giuste nei prompt, e più una questione ampia su quale configurazione di informazioni contestuali sia più probabilmente in grado di generare il comportamento desiderato dal modello. Il contestuale si riferisce all’insieme di token inclusi quando si campiona un modello linguistico di grandi dimensioni (LLM). Il problema ingegneristico è di ottimizzare l’utilità di quei token, tenendo conto delle limitazioni intrinseche dei modelli linguistici, per ottenere un risultato coerente e prevedibile.

Gestire efficacemente i LLM richiede di pensare in termini di contesto, ovvero considerare lo stato complessivo disponibile per il modello in ogni istante, e i comportamenti potenzialmente emersi da tale stato.

Ingengneria contestuale vs. ingegneria dei prompt

In Anthropic, vediamo l'ingegneria contestuale come la logica progressione dell’ingegneria dei prompt. L’ingegneria dei prompt si riferisce alle metodologie per redigere e organizzare istruzioni per ottenere risultati ottimali (vedi le nostre documentazioni per un’introduzione alle strategie utili di ingegneria dei prompt).

L’ingegneria contestuale, invece, riguarda l’insieme di strategie per selezionare e mantenere l’insieme di token (informazioni) ottimale durante l’inferenza del LLM, inclusa ogni altra informazione che potrebbe essere presente fuori dai prompt principali.

Inizialmente, quando si iniziava a lavorare con i LLM, il prompt era la componente più rilevante della pratica ingegnerista nell’IA. La maggior parte delle applicazioni al di fuori delle semplici interazioni simili alla chat richiedeva prompt ben definiti per compiti di classificazione o generazione di testi. Tuttavia, all'avanguardia, dove si inizia a costruire agenti intelligenti che operano su più fasi di inferenza e orizzonti temporalmente dilatati, bisogna gestire l’intero stato del contesto (istruzioni sistematiche, strumenti, protocollo contestuale del modello (MCP), dati esterni, storia delle interazioni, ecc.).

Un agente che funziona in un ciclo genera sempre più dati che potrebbero essere rilevanti per la prossima fase di inferenza, e questa informazione deve essere ciclicamente migliorata. L’ingegneria contestuale diventa quindi un’arte e una scienza: selezionare ciò che andrà nel limitato contesto del modello a partire da quel costante universo di informazioni potenzialmente disponibili.

A differenza del processo discrete di creare prompt, l’ingegneria contestuale è iterativa; la fase di selezione avviene ogni volta che decidiamo quale informazione passare al modello.

Perché l’ingegneria contestuale è fondamentale per costruire agenti intelligenti

Sebbene i LLM siano velocissimi e in grado di gestire grandi quantità di dati, abbiamo osservato che, come gli esseri umani, a un certo punto perdono lucidità o confusione. Le ricerche sui test tipo “ago nel pagliaio” (needle-in-a-haystack) hanno evidenziato il concetto di degrado contestuale: aumentando il numero di token nel contesto, la capacità del modello di ricordare correttamente le informazioni disponibili cala.

Sebbene alcuni modelli mostrino prestazioni in declino più dolce degli altri, questa caratteristica emerge in tutti i modelli. Il contesto deve quindi essere visto come una risorsa finita, con rendimenti marginali decrescenti. Anche gli esseri umani hanno una capacità limitata di memoria operativa, e i LLM presentano un budget di attenzione che utilizzano per interpretare grandi volumi di contesti. Ogni token aggiunto assorbe una parte del budget, quindi si richiede molta attenzione per selezionare i token corretti da fornire al modello.

La scarsità di attenzione è una conseguenza architetturale dei LLM. Sono basati sull’architettura transformer, che permette a ogni token di “attenzionare” ogni altro token nell'intero contesto. Questo genera relazioni a coppie in numero n² per n token.

Man mano che aumenta la lunghezza del contesto, la capacità del modello di gestire queste relazioni a coppie si riduce, creando una tensione naturale tra l'ampiezza del contesto e la concentrazione dell'attenzione. Inoltre, i modelli sviluppano schemi di attenzione basati su distribuzioni di dati di apprendimento in cui le sequenze più brevi sono di gran lunga più comuni di quelle lunghe. Di conseguenza, i modelli hanno meno esperienza con sequenze estese e hanno pochi parametri specializzati per relazioni dipendenti dal contesto.

Strumenti come l’interpolazione di encoding posizionale permettono ai modelli di gestire sequenze più lunghe adattandole al contesto originariamente addestrato, sebbene con qualche degrado nella comprensione delle posizioni dei token. Questi fattori creano un gradiente di prestazioni, piuttosto che un limite netto: i modelli sono comunque capaci a contesti lunghi, ma potrebbero mostrare una precisione inferiore per il recupero di informazioni o il ragionamento a lunga distanza rispetto alle loro prestazioni a livelli di contesto inferiori.

Queste considerazioni implicano che un’ingegneria contestuale attenta è essenziale per costruire agenti intelligenti.

Struttura di un contesto efficace

Sapendo che i LLM sono vincolati da un budget di attenzione limitato, un contesto ben ingegnerizzato significa individuare l'insieme più piccolo di token di alto valore che massimizzi la probabilità di raggiungere un certo evento desiderato. Questa pratica non è facile da implementare, ma nella sezione seguente delineiamo come metterla in pratica nella realtà attraverso i vari componenti del contesto.

I prompt di sistema devono essere estremamente chiari e utilizzare un linguaggio diretto, che presenti le idee al giusto livello di dettaglio per l’agente. Il livello corretto rappresenta un equilibrio tra due tipi comuni di fallimenti. Da un lato, gli ingegneri spesso codificano logiche complesse e fragile nei loro prompt per ottenere comportamenti precisi; questo mette a rischio la robustezza e aumenta la complessità manutenzione nel tempo. Dall’altro lato, gli ingegneri forniscono guida vaga o generica che non dà concrete indicazioni per risultati desiderati o finge un contesto condiviso. L’equilibrio ideale sta nel fornire istruzioni sufficientemente specifiche da guidare il comportamento, ma flessibili abbastanza da consentire al modello di utilizzare heuristici forti.

Includiamo all’estremo estremo i prompt secca come if-else, e all’altro estremo i prompt general