Perché il prompt engineering non basta più
Fino al 2023 il segreto per ottenere risultati soddisfacenti da un modello di intelligenza artificiale era saper formulare al meglio il prompt, cioè la frase o il blocco di testo che indica al modello cosa fare. Il prompt engineering consisteva nel scegliere le parole giuste, strutturare le istruzioni, fornire esempi di output e definire il ruolo da assegnare al modello.
Queste tecniche erano fondamentali quando i modelli erano meno capaci: un prompt impreciso poteva trasformare una risposta utile in un errore evidente. Tuttavia, con l’avvento dei modelli del 2026, che comprendono e rispettano le istruzioni quasi sempre, il vero ostacolo non è più la forma della domanda, ma le informazioni di cui il modello dispone al momento della risposta.
Il problema diventa evidente quando, nonostante un prompt perfettamente ottimizzato, il modello fornisce risposte incoerenti o errate. Questo accade perché l’AI non ha accesso ai dati necessari: la storia dell’account del cliente, la documentazione più recente o il contesto di conversazioni precedenti. In altre parole, il modello non può “inventare” informazioni che non ha.
L’aneddoto che ha cambiato il modo di pensare
Un ingegnere di IA ha trascorso tre giorni a riscrivere un prompt per un agente di assistenza clienti. Ha provato diverse formulazioni, aggiunto esempi, riorganizzato le istruzioni e persino cambiato modello, ma il risultato rimaneva incostante. La svolta è arrivata quando un collega gli ha chiesto: “Quali informazioni ha realmente il modello quando risponde?”
La risposta è stata onesta: “Non abbastanza, e quelle che ha sono mal organizzate”. Il prompt era corretto, ma il contesto – il bagaglio di dati fornito al modello – era difettoso. Da quel momento, la distinzione tra prompt engineering e context engineering è diventata evidente.
Cos’è la context engineering
Il termine “context engineering” è stato coniato da Andrej Karpathy a metà 2025 per descrivere il nuovo paradigma: il valore aggiunto non risiede più nella capacità di scrivere un prompt elegante, ma nella capacità di costruire il contesto più adeguato attorno al modello.
Ogni volta che un modello genera una risposta, legge una finestra di contesto, ovvero un blocco di token che contiene tutto ciò che è a sua disposizione in quel momento. Questa finestra può includere diversi elementi:
- Il system prompt: istruzioni permanenti e ruolo assegnato al modello.
- La storia della conversazione: tutti gli scambi precedenti con l’utente.
- Documenti recuperati da una knowledge base o dal web.
- Risultati di strumenti esterni (API, database, esecuzione di codice).
- Memoria persistente tra sessioni diverse.
- Esempi few‑shot che mostrano il formato desiderato dell’output.
- Il messaggio corrente dell’utente.
Mentre il prompt engineering ottimizza solo il system prompt e talvolta il messaggio corrente, la context engineering si occupa di tutti gli elementi sopra elencati, chiedendosi: “Cosa dovrebbe sapere il modello quando risponde?”
Le cinque layer della context engineering
Per gestire in modo efficace la finestra di contesto, è utile dividerla in cinque “layer”, ognuno dei quali richiede decisioni di design specifiche.
Layer 1 – System Prompt: le istruzioni persistenti
Il system prompt rimane importante, ma deve essere conciso. Un prompt lungo e confuso consuma token preziosi e mescola istruzioni con conoscenza, creando confusione. Un esempio di cattiva pratica:
system_prompt = """
You are a helpful customer service agent for TechCorp. TechCorp was
founded in 2018 and sells software subscriptions. Our products include
the Basic plan at £29/month, the Pro plan at £99/month, and the Enterprise
plan which is custom priced. When users ask about pricing they should be
directed to our pricing page. When users have technical issues you should
ask them about their browser and operating system. When users want refunds
you should check if they are within the 30-day refund window. Our refund
policy states that... [500 more words of policy embedded in the prompt]
"""
Invece, una versione ottimizzata per la context engineering riduce il prompt a poche righe e delega la conoscenza a layer successivi:
system_prompt = """
You are a TechCorp customer support agent. Be accurate, friendly, and concise.
For pricing, policy, and product details: use ONLY the information provided
in the retrieved context below. Never invent or estimate.
If information is not in the context, say so and offer to escalate.
"""
Layer 2 – Retrieved Context: la conoscenza attuale
Questa è la fonte più comune di errori in ambienti di produzione. Il modello può rispondere solo a ciò che gli viene fornito. Gli errori tipici includono:
- Chunk sbagliato: il retriever restituisce un passaggio correlato ma non rilevante per la domanda.
- Contesto mancante: il passaggio è corretto, ma privo del contesto necessario per interpretarlo.
- Troppo materiale: vengono inseriti troppi chunk, sovraccaricando la finestra e confondendo il modello.
Esempio di codice per un retrieval intelligente (Python):
import boto3
import json
bedrockagent = boto3.client('bedrock-agent-runtime', regionname='us-east-1')
def retrievecontext(query: str, knowledgebase_id: str) -> tuple[str, list]:
"""
Retrieve context intelligently — not just the top N chunks,
but the right chunks, formatted for model consumption.
"""
# Step 1: Retrieve candidates
response = bedrock_agent.retrieve(
knowledgeBaseId=knowledgebaseid,
query=query,
topK=10
)
# Step 2: Rank candidates with a re‑ranker
ranked = rank_chunks(response['chunks'], query)
# Step 3: Select the minimal set that covers the answer
selected = selectminimalset(ranked, max_tokens=800)
# Step 4: Format for the model
formatted = formatformodel(selected)
return formatted, selected
Questo approccio garantisce che il modello riceva solo le informazioni più pertinenti, riducendo al minimo il rumore.
Layer 3 – Tool Results: dati da API e servizi esterni
Spesso è necessario integrare risultati di strumenti (ad es. chiamate a un servizio di fatturazione). La chiave è presentare questi risultati in modo strutturato, ad esempio usando JSON, in modo che il modello possa estrarli facilmente senza confonderli con il testo naturale.
Layer 4 – Memory Persistente
Per assistenti che gestiscono più sessioni, è fondamentale conservare informazioni chiave (es. preferenze dell’utente, ticket aperti) in una memoria a lungo termine. Questa memoria viene poi inserita nella finestra di contesto come “memoria persistente”, evitando al modello di chiedere ripetutamente le stesse informazioni.
Layer 5 – Esempi Few‑Shot
Gli esempi rimangono utili per guidare il formato dell’output, ma devono essere limitati a pochi esempi rappresentativi per non occupare token inutili. Un buon approccio è includere 2‑3 esempi brevi che mostrano chiaramente il risultato desiderato.
Come passare dalla teoria alla pratica
Implementare una pipeline di context engineering richiede una serie di passaggi sistematici:
- Definire il system prompt minimale: includere solo ruolo e regole di base.
- Costruire una knowledge base curata: organizzare documenti, policy e FAQ in modo che possano essere recuperati velocemente.
- Implementare un retriever robusto: utilizzare modelli di embedding avanzati, ranking e filtraggio per selezionare i chunk più pertinenti.
- Formattare i risultati dei tool: standardizzare l’output in JSON o XML per una facile integrazione.
- Gestire la memoria di sessione: salvare le variabili chiave in un datastore e iniettarle nella finestra di contesto ad ogni chiamata.
- Aggiungere pochi esempi di output: mostrare al modello il formato atteso senza appesantire la finestra.
Una volta stabilita questa architettura, la maggior parte dei problemi di “hallucination” scompare, perché il modello non più “indovina” ma risponde basandosi su dati verificati.
Esempio completo di prompt con context engineering
system_prompt = """
You are a TechCorp support assistant. Answer concisely and truthfully.
Use ONLY the information provided in the sections below.
If you lack the required data, say "I don't have enough information" and suggest escalation.
"""
retrieved_context = """
[Pricing]
- Basic: £29/month
- Pro: £99/month
- Enterprise: custom
[Refund Policy]
- Refunds available within 30 days of purchase.
- Must provide proof of purchase.
[Latest FAQ]
Q: How to reset password?
A: Use the "Forgot password" link on the login page.
"""
user_message = "Il mio cliente vuole sapere perché il pagamento è stato rifiutato."
finalprompt = f"{systemprompt}\n\nContext:\n{retrievedcontext}\n\nUser: {usermessage}"
In questo esempio il modello riceve istruzioni brevi, dati di pricing e policy aggiornati, e la domanda dell’utente. Non c’è ambiguità su cosa possa o non possa usare, quindi la risposta sarà accurata o, in mancanza di dati, ammetterà l’incertezza.
Conclusioni
Il prompt engineering non è più la chiave di volta per ottenere prestazioni ottimali da un modello di IA. Nel 2026, la capacità di un modello di seguire istruzioni è data; il vero fattore differenziante è la context engineering, ossia la progettazione consapevole di tutto ciò che il modello “vede” al momento della generazione.
Le cinque layer – system prompt, retrieved context, tool results, memory persistente ed esempi – devono essere bilanciate per massimizzare l’efficacia e ridurre al minimo le hallucination. Le organizzazioni che adotteranno questo approccio potranno creare assistenti più affidabili, ridurre i costi di debugging e migliorare l’esperienza utente finale.
