Strategie di Context Engineering per agenti IA: una guida per sviluppatori
Costruire agenti AI affidabili è più difficile di quanto sembri. Spesso iniziano con forza, ma man mano che i compiti diventano più complessi, emergono le crepe. Gli agenti spesso perdono il filo dei passaggi precedenti, contraddicono il proprio ragionamento o vengono sopraffatti dalla complessità di un contesto troppo ampio.
Questa sfida ha acceso un vivace dibattito in tutto il settore. Di recente, Anthropic (Claude) e Cognition (Devin) si sono confrontate sul fatto che la collaborazione multi-agente o la progettazione a singolo agente sia la strada migliore da seguire. Anthropic ha indicato esperimenti che mostrano configurazioni multi-agente raggiungere tassi di successo superiori del 90,2%, mentre Cognition ha ribattuto che singoli agenti con compressione del contesto lungo offrono maggiore stabilità e costi inferiori.
Entrambe le parti hanno buoni argomenti e, di fatto, stanno discutendo lo stesso problema centrale: come gestire efficacemente il contesto degli agenti.
Pensa agli LLM come a CPU e alle loro finestre di contesto come alla RAM. Ma c’è un punto: con l’hardware, puoi sempre aggiungere più RAM. Con gli LLM, la lunghezza del contesto è limitata per progettazione, ed estenderla ulteriormente comporta costi elevati in termini di velocità e accuratezza. Gli agenti, nel frattempo, generano enormi quantità di informazioni durante workflow a più passaggi, raggiungendo rapidamente quei limiti. Questo crea problemi critici:
Sovraccarico di informazioni: il contesto supera la capacità → l’agente va in crash
Costi crescenti: più token elaborati significano maggiore spesa e latenza
Rallentamento delle prestazioni: l’eccesso di informazioni non rende gli agenti più intelligenti, li rende più lenti e meno accurati
Ecco perché la context engineering è diventata una sfida progettuale centrale per gli agenti di nuova generazione. I leader del settore hanno già provato diversi modi per affrontare questa sfida e molti di essi funzionano davvero molto bene.
In questo blog, esploreremo come LangChain, Lossfunk e Manus affrontano il problema da angolazioni diverse, offrendo strategie complementari per mantenere gli agenti sia capaci sia efficienti in termini di costi.
Le 4 strategie di LangChain per risolvere le sfide del contesto degli agenti
LangChain raggruppa le sfide del contesto degli agenti in quattro modalità di fallimento comuni:
Context Poisoning: dettagli irrilevanti o errati si insinuano, portando a output insensati.
Context Distraction: le informazioni critiche vengono sepolte sotto il rumore.
Context Confusion: troppi dati non correlati fanno perdere il focus all’agente.
Context Clash: input contraddittori portano a comportamenti incoerenti.
Per affrontare queste sfide, LangChain ha introdotto un framework a quattro strategie per la context engineering degli agenti: Write, Select, Compress e Isolate.
#1 Scrivere il contesto: dare agli agenti una memoria esterna
Gli esseri umani risolvono i problemi prendendo appunti e portando avanti la conoscenza. Gli agenti stanno imparando a fare lo stesso. Un approccio comune è lo “scratchpad”, in cui il ragionamento intermedio e le scoperte vengono salvati al di fuori della finestra di contesto. Per esempio, durante le revisioni del codice, invece di riesaminare l’intera codebase, un agente può registrare problemi e correzioni per file. Nel tempo, questo costruisce una memoria persistente e interrogabile che cresce con l’esperienza.
#2 Selezionare il contesto: filtrare per rilevanza
Non ogni informazione merita attenzione. Il team di Windsurf ha dimostrato che navigare grandi codebase richiede di combinare l’analisi della sintassi con il recupero tramite knowledge graph, assicurando che gli agenti facciano emergere solo gli snippet rilevanti invece di annegare in righe irrilevanti.
#3 Comprimere il contesto: riepilogo su richiesta
Claude Code dimostra bene questo approccio con la sua funzionalità “auto-compact”. Quando una conversazione si avvicina al limite di contesto, il sistema comprime centinaia di turni in un riepilogo conciso, preservando i dettagli critici per il compito e liberando al contempo spazio per nuovo ragionamento.
#4 Isolare il contesto: gestione modulare del contesto
LangGraph applica questo principio attraverso un’architettura multi-agente. I compiti complessi vengono suddivisi in moduli, con ciascun sotto-agente che opera all’interno del proprio spazio di contesto. Questa separazione evita interferenze: un agente può esplorare alternative senza contaminare il percorso di ragionamento di un altro.
Per maggiori dettagli, consulta il blog di LangChain sull’ingegneria del contesto.
I 6 consigli pratici di Lossfunk sull’ingegneria del contesto
Un’altra prospettiva viene da Lossfunk, che considera la gestione del contesto come una disciplina ingegneristica basata sull’implementazione nel mondo reale. Il loro approccio enfatizza il bilanciamento di tre vincoli che ogni team di produzione affronta: prestazioni, affidabilità e costo. Paras Chopra, fondatore di Lossfunk, ha delineato sei consigli pratici per costruire agenti LLM efficaci con il contesto.
#1 Compiti più piccoli, maggiore successo
I compiti complessi possono sopraffare gli agenti proprio come fanno con gli esseri umani. Una ricerca di METR mostra che gli LLM raggiungono i loro tassi di successo più elevati — circa 90% — quando i compiti sono circoscritti a 10–15 minuti di lavoro. Invece di chiedere a un agente di rifattorizzare un’intera applicazione in un’unica esecuzione, suddividi il progetto in passaggi più piccoli e atomici: analizzare il modulo di autenticazione, identificare potenziali problemi di sicurezza e poi proporre correzioni mirate. Questo rispecchia il modo in cui operano gli sviluppatori esperti: un passaggio focalizzato alla volta, con progressi che si costruiscono in modo incrementale.
Fonte: Misurare la capacità dell’AI di completare compiti lunghi
#2 File interi > recupero frammentato
In contrasto con l’enfasi di LangChain su filtraggio e compressione, Paras sostiene che più contesto è solitamente meglio. La sua opinione è che i sistemi RAG spesso frammentino le informazioni in blocchi piccoli e incompleti, il che può lasciare gli agenti confusi o incerti. Invece, suggerisce di caricare file o dataset completi direttamente nella finestra di contesto, dando al modello il quadro completo.
Lossfunk supporta questa prospettiva con evidenze di benchmark. Su SWE-bench-Verified, gli approcci che hanno utilizzato il contesto a file intero hanno raggiunto circa il 95% di accuratezza, rispetto a circa l’80% per il recupero frammentato. La differenza deriva dalla coerenza: con file interi, il modello vede le relazioni attraverso l’intero documento invece di cucire insieme pezzi disgiunti.
Naturalmente, questo comporta dei compromessi. Fornire più contesto agli agenti LLM aumenta sia i costi sia la latenza. I team devono soppesare i vantaggi della completezza rispetto alla spesa di prompt più lunghi — un equilibrio che dipende dal compito e dai vincoli di produzione.
#3 Aggiungere un passaggio di verifica dopo ogni compito
Gli errori tendono ad accumularsi lungo catene di ragionamento lunghe. Per ridurre questo rischio, Lossfunk suggerisce di progettare ogni passaggio come una funzione stateless con controlli espliciti di successo/fallimento. Dopo ogni chiamata a uno strumento o azione di ragionamento, l’agente dovrebbe confermare se l’operazione è riuscita e indicare chiaramente il passaggio successivo.
Questo schema è simile allo unit testing nello sviluppo software: individuare piccoli errori in anticipo prima che si trasformino in guasti più grandi. Integrando la verifica, gli sviluppatori creano punti di recupero naturali che rendono gli agenti più resilienti nei workflow di produzione.
#4 Ricorda Frequentemente al Modello
I modelli spesso dimenticano le istruzioni iniziali nelle conversazioni lunghe, quindi è essenziale rafforzare continuamente gli obiettivi del compito e lo stato attuale. Inserisci regolarmente riepiloghi del compito e obiettivi correnti nei tuoi prompt. Non dare per scontato che il modello ricordi cosa avrebbe dovuto fare 50 scambi fa. Non è una limitazione: è semplicemente il modo in cui funziona la cognizione umana. Utilizziamo supporti di memoria esterni, come note e promemoria, per rimanere in carreggiata durante compiti complessi.
#5 Dota gli Agenti di Strumenti di Lettura/Scrittura per Costruire il Contesto su Richiesta
Comprimere ogni informazione nella finestra di contesto porta rapidamente al sovraccarico. Un approccio migliore è fornire agli agenti strumenti di lettura/scrittura così che possano recuperare o registrare informazioni secondo necessità. Invece di precaricare interi set di documentazione, dota il tuo agente di lettori di file o connettori a database e lascia che recuperi i dettagli rilevanti su richiesta.
Questo rispecchia il modo in cui operano gli sviluppatori esperti: non memorizzano un’intera codebase, ma sanno come trovare la funzione o il file giusto quando se ne presenta la necessità. Estendendo gli agenti con la capacità di interrogare e aggiornare fonti esterne, gli sviluppatori possono mantenere il contesto snello, garantendo comunque che l’agente abbia accesso alla conoscenza di cui ha bisogno.
#6 Mantieni il Contesto Immutabile per Sfruttare la KV Cache
Ogni turno di conversazione con un contesto che cambia pesantemente può diventare estremamente costoso — talvolta superando $100 per risposta. Per sfruttare le ottimizzazioni della KV cache, mantieni immutabile quanto più possibile del contesto. Invece di sostituire il contesto a ogni passaggio, aggiungi nuove informazioni e mantieni formati coerenti e strutturati tra le interazioni.
Questo aggiustamento tecnico apparentemente piccolo può produrre benefici sproporzionati: ridurre i costi di un ordine di grandezza migliorando al contempo i tempi di risposta. Per le implementazioni in produzione, è una delle ottimizzazioni di basso livello più incisive che gli sviluppatori possano applicare.
Per maggiori dettagli, consulta questo blog di Paras.
Manus: 7 Lezioni dalla Creazione di Agenti
Manus è un sistema AI multi-agente completamente autonomo progettato per gestire compiti complessi con una guida umana minima — dalla ricerca alla gestione dei progetti. Nell’ambito del loro lavoro, il team di Manus ha condiviso lezioni pratiche sull’ingegneria del contesto tratte dall’esecuzione del loro sistema in produzione.
#1 Progetta Intorno alla KV-Cache per l’Efficienza dei Costi
Per agenti di livello production-grade, una delle metriche di performance più critiche è il tasso di hit della KV-cache, che ha un impatto diretto sia sui costi sia sui tempi di risposta. Gli input per gli agenti moderni stanno diventando più lunghi — con contesto esteso e registri dettagliati delle chiamate agli strumenti — mentre gli output rimangono concisi, spesso somigliando a chiamate di funzioni. Lo squilibrio porta a costi di prefill sproporzionatamente elevati.
L’approccio consigliato è mantenere stabili i prefissi dei prompt ed evitare elementi che interrompono la cache, come timestamp che cambiano a ogni richiesta. Usa una strategia di contesto append-only invece di riscrivere il contenuto esistente, e imponi un ordinamento deterministico per la serializzazione JSON. Alcuni framework di modelli richiedono anche di contrassegnare esplicitamente i punti di interruzione della cache per massimizzare il riutilizzo della KV-cache. Seguire queste pratiche può fare una differenza significativa nell’efficienza dei costi in produzione.
#2 Usa il Tool Masking Invece del Caricamento Dinamico
Con l’aumento del numero di strumenti fino a raggiungere le centinaia, inclusi gli strumenti definiti dagli utenti, i modelli diventano più inclini a errori o a bloccarsi durante il processo di selezione degli strumenti. Il problema si aggrava perché l’inserimento o la rimozione dinamica degli strumenti invalida la cache KV e causa errori di riferimento per strumenti non definiti.
Invece di eliminare gli strumenti, usa il masking. Le tecniche di token masking consentono di regolare dinamicamente gli insiemi di strumenti richiamabili senza interrompere la cache. Usa prefissi unificati, come browser_, per facilitare il raggruppamento e la limitazione, e sfrutta il formato Hermes o il prefill di function-calling supportato dall’API per controllare lo spazio di selezione.
#3 Usa il file system come contesto
Sebbene un contesto da 128K sembri sufficiente, diventa stretto quando si incontrano grandi pagine web, PDF e altri dati non strutturati. Il tipico approccio di compressione che elimina le informazioni in anticipo può far perdere contesto critico ai passaggi futuri.
L’approccio di Manus consente agli agenti di usare operazioni di lettura/scrittura sul file system per esternalizzare i dati. Elimina il contenuto delle pagine web ma conserva gli URL, cancella i documenti ma mantieni i percorsi dei file, assicurando che le informazioni restino recuperabili. Questo implementa un sistema di "memoria a lungo termine" ponendo al contempo le basi per architetture future e più leggere, come SSM.
#4 Manipola l’attenzione tramite recitazione
Manus aggiorna continuamente todo.md , recitando gli obiettivi incompleti alla fine del contesto. Questa tecnica evita i problemi di "lost-in-the-middle" e migliora la capacità del modello di mantenere la coerenza degli obiettivi durante processi lunghi. Il "self-reminding" in linguaggio naturale si è dimostrato uno dei metodi più efficaci per catturare e mantenere l’attenzione.
#5 Conserva le tracce di errore per l’apprendimento
I modelli linguistici sperimentano inevitabilmente allucinazioni, crash dell’ambiente e fallimenti delle chiamate. La maggior parte dei sistemi cancella abitualmente le tracce di errore, riprova o si resetta, ma questo impedisce che avvenga l’apprendimento. L’approccio corretto conserva i record dei fallimenti, inclusi gli stack trace e i risultati delle osservazioni, aiutando i modelli ad aggiustare le proprie convinzioni ed evitare di ripetere errori identici. La capacità di recupero dagli errori rappresenta la misura accurata dell’intelligenza di un agente.
#6 Evita le trappole del few-shot
Il few-shot prompting è una tecnica ben nota per migliorare gli output degli LLM, ma Manus avverte che nei sistemi agentici può introdurre problemi sottili. Poiché i modelli imitano naturalmente i pattern del contesto, caricare troppi esempi few-shot ripetitivi può bloccarli in comportamenti rigidi. Ad esempio, quando Manus usava il batch prompting per esaminare i curriculum, il modello ha iniziato a ripetere meccanicamente le stesse azioni invece di adattarsi alle specificità di ciascun caso.
Il rimedio consiste nell’introdurre variazione e diversità negli esempi. Regola leggermente i template azione–osservazione cambiando formati, ordine o formulazione. L’aggiunta di “rumore” strutturato impedisce agli agenti di diventare fragili e li aiuta a rimanere adattivi. Questo mantiene la flessibilità pur fornendo al modello una guida utile.
#7 Dai priorità all’ingegneria del contesto rispetto al fine-tuning
Nel suo lavoro iniziale con modelli come BERT, Manus faceva grande affidamento sul fine-tuning — un processo che spesso richiedeva settimane di iterazioni e diventava rapidamente inefficiente e costoso. Sulla base di quell’esperienza, il team ha spostato l’attenzione dall’addestramento end-to-end verso la context engineering come leva principale per migliorare le prestazioni.
L’impatto è stato significativo: i cicli di aggiornamento del prodotto si sono ridotti da settimane a ore. Gli aggiornamenti dei modelli potevano essere integrati senza soluzione di continuità, senza riaddestramento o riadattamento. Manus descrive la differenza come costruire prodotti simili a navi che possono cambiare rotta, invece che pali inchiodati al fondale marino, incapaci di muoversi al variare delle condizioni. L’ingegneria del contesto ha dato loro flessibilità senza sacrificare le capacità.
Per maggiori dettagli, consulta questo blog di Manus.
Come i database vettoriali supportano il Context Engineering
Una delle sfide più difficili per gli agenti IA è esaurire il contesto. Quando gli agenti devono elaborare enormi basi di conoscenza esterne, lunghe cronologie di conversazioni o dati multimodali, la capacità di archiviare, recuperare e riutilizzare le informazioni in modo dinamico diventa essenziale per l’affidabilità.
I database vettoriali offrono una soluzione pratica. Milvus, ad esempio, è un sistema open-source ad alte prestazioni creato per gestire dati multimodali su scala di miliardi — testo, immagini, video e altro ancora. Rappresentando queste informazioni come vettori, Milvus consente agli agenti di recuperare istantaneamente i frammenti di conoscenza e le interazioni passate più rilevanti nel loro processo di ragionamento. Integrato con framework come LangChain o LlamaIndex, Milvus alimenta sistemi di retrieval-augmented generation (RAG) che ampliano la base di conoscenza di un agente e migliorano l’accuratezza dell’inferenza. Il suo servizio gestito, Zilliz Cloud, offre funzionalità ancora più avanzate e prestazioni superiori, come query in linguaggio naturale, affidabilità e sicurezza di livello enterprise e disponibilità globale su AWS, GCP e Azure.
L’esperienza degli sviluppatori è altrettanto importante. Milvus offre un SDK Python ben documentato che rende semplice archiviare e interrogare vettori con poche righe di codice. Questo riduce la barriera tecnica e consente ai team di stabilire rapidamente un ciclo chiuso per la gestione del contesto, incorporando solide capacità di memoria direttamente nei loro agenti.
from pymilvus import MilvusClient
# Create local Milvus instance
client = MilvusClient("demo.db")
# Create vector collection
client.create_collection(collection_name="knowledge_base", dimension=768)
# Batch insert vectorized data into knowledge base
client.insert(collection_name="knowledge_base", data=embedding_vectors)
# Retrieve most relevant context information
query_vector = embedding_fn.encode_queries(["What is Context Engineering?"])
results = client.search(
collection_name="knowledge_base",
data=query_vector,
limit=3,
output_fields=["text", "source"]
)
Per maggiori informazioni, consulta le seguenti risorse:
Milvus + Loon: infrastruttura progettata appositamente per agenti IA
I database vettoriali sono centrali per il context engineering, ma sono solo una parte dello stack. Gli agenti hanno anche bisogno di un modo per elaborare a monte dati disordinati e multimodali e poi recuperarli ad alta velocità durante il runtime. Ecco perché abbiamo progettato Milvus e Loon per lavorare insieme — uno gestisce il recupero, l’altro prepara i dati su larga scala.
Milvus: Milvus è il database vettoriale open-source più ampiamente adottato, ottimizzato per carichi di lavoro su scala di miliardi tra testo, immagini, audio e video. È costruito da zero per la ricerca vettoriale, offrendo recupero in meno di 10 ms anche su scala massiccia. Per gli agenti, questo si traduce direttamente in reattività: il fatto che sembrino istantanei e affidabili, oppure lenti e soggetti a errori, dipende dalla velocità di recupero.
Loon (Coming Soon): Loon è il nostro prossimo servizio cloud-native di data lake multimodale progettato per il preprocessing multimodale. I dataset del mondo reale sono disordinati — duplicati, incoerenti e distribuiti tra diversi formati. Loon utilizza framework distribuiti come Ray e Daft per pulire, deduplicare e clusterizzare questi dati prima di trasmetterli in streaming a Milvus. Il risultato: gli agenti non sprecano cicli sul rumore; consumano contesto strutturato e di alta qualità fin dal primo giorno.
Elasticità Cloud-Native: Entrambi i sistemi scalano storage e calcolo in modo indipendente, consentendo ai team di bilanciare il servizio in tempo reale con le analisi offline man mano che i carichi di lavoro crescono da gigabyte a petabyte. Nessun overprovisioning, nessun collo di bottiglia — solo l’elasticità richiesta dalle moderne pipeline di IA.
Fondazione a prova di futuro: La priorità di oggi è la ricerca semantica e le pipeline RAG; quella di domani sarà il ragionamento multimodale e i workflow guidati da agenti. Con Milvus e Loon, lo stesso stack supporta entrambi. Ottieni la flessibilità per evolvere senza dover sostituire l’infrastruttura — riducendo costi, rischi e complessità.
Il contesto è la vera frontiera per gli agenti IA
Come mostra il dibattito tra progettazione single-agent e multi-agent, il vero collo di bottiglia per gli agenti IA di oggi non è soltanto la creatività — è il contesto. Che si tratti del framework a quattro pilastri di LangChain, del playbook orientato alla produzione di Lossfunk o delle lezioni duramente apprese da Manus nella costruzione di sistemi completamente autonomi, il settore sta convergendo sulla stessa intuizione: gli agenti hanno successo o falliscono in base a quanto bene progettano il contesto.
Le strategie differiscono — alcune enfatizzano scrittura e filtraggio, altre sostengono il contesto full-file o una progettazione cache-aware — ma l’obiettivo è lo stesso, in particolare per gli agenti pronti per il prodotto: mantenere gli agenti sia capaci sia efficienti in termini di costi. E sebbene nessuna singola tecnica risolva tutto, insieme formano un corpus crescente di pratiche che gli sviluppatori possono adattare ai propri sistemi.
In Zilliz, vediamo i database vettoriali come Milvus come un pilastro di questo toolkit. Fornendo agli agenti una memoria scalabile e più accurata oltre la finestra di contesto, gli sviluppatori possono rendere l’ingegneria del contesto pratica, flessibile e pronta per la produzione. Il futuro degli agenti IA non sarà definito solo da modelli più grandi, ma da modi più intelligenti di progettare il contesto — ed è lì che avverranno le vere scoperte.
Continua a leggere

Vector Databases vs. Object-Relational Databases
Use a vector database for AI-powered similarity search; use an object-relational database for complex data modeling with both relational integrity and object-oriented features.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.

Vector Databases vs. Hierarchical Databases
Use a vector database for AI-powered similarity search; use a hierarchical database for organizing data in parent-child relationships with efficient top-down access patterns.



