30 luglio 2026
Agentic AI per workflow reali: come progettare sistemi multi-agente con LangChain e LangGraph
Dai prompt “one-shot” a processi orchestrati: stato, tool, memoria, RAG, HITL e deployment production-ready
Una guida editoriale (con taglio pratico) a cosa rende davvero “agentico” un sistema basato su LLM e come si struttura un’architettura moderna con LangChain + LangGraph: orchestrazione a grafo, esecuzioni sequenziali/parallele/condizionali, validazione con Pydantic, memoria e persistenza, RAG, controlli human-in-the-loop, osservabilità e deployment su AWS/Render. Con esempi di progetti tipici: chatbot agentico, planner multi-agente e content automation.
Negli ultimi anni abbiamo costruito tante applicazioni “LLM-based” con uno schema piuttosto lineare: prompt → modello → risposta. Funziona bene per Q&A, riassunti, traduzioni, generazione di testo e una parte di automazioni leggere. Ma appena il problema diventa operativo (più passi, dipendenze, strumenti esterni, stato da mantenere, controlli e rollback), quel modello inizia a scricchiolare.
L’Agentic AI nasce proprio per colmare questo gap: non è “un LLM più bravo”, ma un modo diverso di costruire software attorno agli LLM, dove l’output non è soltanto testo, bensì azioni eseguite dentro un workflow governato.
Cos’è davvero un sistema agentico
Un agente è un sistema che:
- riceve un obiettivo (goal) dall’utente;
- lo trasforma in piano di lavoro (planning);
- esegue azioni (tool use) in più step;
- mantiene stato e memoria;
- si adatta ai risultati intermedi (reflection / decision making);
- chiede input umano solo quando serve (human-in-the-loop).
La differenza pratica rispetto a una classica chat è che un agente non si limita a “spiegare come fare”, ma fa: interroga API, scrive file, consulta un database, esegue ricerche, valida dati, prepara output strutturati, e coordina più sub-attività.
Perché il classico approccio “prompt → risposta” non basta
Un LLM isolato ha limiti noti:
- knowledge cutoff: non conosce eventi o dati recenti se non integrati via retrieval;
- assenza di stato: senza una memoria esplicita, ogni turno è fragile o costoso (ricontestualizzazione);
- nessun controllo del flusso: non esistono rami condizionali affidabili, loop, retry e parallelizzazione;
- tooling non governato: chiamare strumenti esterni richiede vincoli, validazioni, gestione errori;
- osservabilità e debug difficili: se il comportamento cambia, serve tracciare cosa è successo davvero.
I sistemi agentici affrontano questi problemi con architetture in cui l’LLM è solo un componente di un processo più ampio.
Agentic behaviors: i mattoni fondamentali
Quando si progetta un agente, i comportamenti “agentici” tipici sono:
- Reasoning / Decision making: scegliere il prossimo step in base allo stato.
- Planning: scomporre l’obiettivo in task ordinati e verificabili.
- Tool use: eseguire azioni tramite strumenti (API, DB, search, codice).
- Memory: distinguere tra contesto di sessione e persistenza a lungo termine.
- Reflection & monitoring: controllare qualità/completezza, gestire errori, correggere rotta.
- Human feedback (HITL): inserire gate di approvazione o richieste di chiarimento.
Questi elementi, combinati, trasformano una chat in un workflow automatizzato.
LangChain + LangGraph: ruoli distinti
Quando si parla di stack moderno per agenti in Python, una combinazione ricorrente è:
- LangChain come “toolbox”: modelli, prompt template, loader, strumenti, integrazioni utilitarie.
- LangGraph come orchestratore: definisce il workflow come un grafo di nodi con stato, edge (anche condizionali), cicli, parallelismo e persistenza.
In pratica: LangChain ti aiuta a costruire i pezzi, LangGraph ti aiuta a dirigere l’esecuzione dei pezzi.
L’idea chiave di LangGraph: workflow a grafo con stato
Un workflow agentico serio raramente è una pipeline lineare. Serve:
- uno State centralizzato (che trasporta input, risultati intermedi, errori, decisioni);
- Nodes che eseguono step specifici (es. “estrai entità”, “chiama API voli”, “valida output”, “scrivi risposta”);
- Edges che definiscono le transizioni;
- Conditional edges per diramazioni (es. se manca un’informazione → chiedi all’utente; altrimenti → continua);
- Start/End nodes e una compilazione del grafo.
Questa struttura rende il comportamento più deterministico, debuggabile e testabile.
Sequenziale, parallelo, condizionale (e iterativo)
LangGraph permette pattern tipici:
- Sequential: step in ordine (A → B → C).
- Parallel: fan-out/fan-in (es. raccogli info da più fonti in parallelo e poi aggrega).
- Conditional: rami basati su stato/decisione.
- Iterative: loop controllati (retry, refinement, “finché non soddisfa una condizione”).
Sono esattamente le strutture che mancano in un agente costruito solo “a prompt”.
Validazione: perché Pydantic è un alleato (non un dettaglio)
Quando un agente deve produrre output strutturati (JSON, record, piani, parametri per strumenti), la validazione diventa essenziale.
Con Pydantic puoi:
- definire schemi chiari (tipi, campi obbligatori, vincoli);
- rigettare output malformati;
- normalizzare e rendere affidabili i dati prima di chiamare tool esterni.
In produzione, la differenza tra “sembra un JSON” e “è validato e coerente” è enorme, soprattutto quando l’output guida azioni reali.
Async e parallelismo: il pezzo nascosto delle app agentiche
Molti workflow agentici fanno I/O continuo: API, DB, vector store, scraping/ricerche, servizi esterni. Senza asincronia si finisce con agenti lenti e costosi.
Impostare bene l’async in Python (e ragionare su concorrenza e limiti) serve per:
- eseguire task in parallelo;
- ridurre la latenza end-to-end;
- gestire timeout, retry e circuit breaker in modo sensato.
Memoria: breve termine, persistenza e “vera” conversazione
Un chatbot agentico utile deve distinguere:
- short-term memory: la chat corrente, turni recenti, contesto immediato;
- long-term memory: preferenze utente, storico, dati persistenti.
In più, in ambienti reali è spesso necessario:
- streaming della risposta (UX migliore);
- chat persistence su database;
- gestione della conversazione come stato, non come “prompt enorme”.
RAG negli agenti: quando il retrieval diventa un tool
La Retrieval-Augmented Generation non è alternativa agli agenti: spesso è un tool dentro il loro toolbox.
Tipico pattern:
- l’agente capisce che gli manca informazione;
- esegue retrieval su vector DB;
- integra le evidenze;
- decide il prossimo step.
Con integrazione a database vettoriali (es. Chroma o equivalenti) puoi sbloccare casi d’uso come documentazione interna, knowledge base aziendale, policy, manuali, cataloghi.
Human-in-the-loop: controlli, approvazioni e sicurezza operativa
Inserire un essere umano “nel loop” non è un ripiego: è un requisito.
HITL serve per:
- approvazioni prima di azioni irreversibili (invio email, modifica DB, acquisti);
- richieste di chiarimento su input ambiguo;
- controllo qualità su output sensibili.
In LangGraph questo di solito si traduce in nodi di gate e transizioni condizionali basate su feedback.
Osservabilità e debug: tracing e monitoring fin dall’inizio
Gli agenti non sono facili da debuggare “a sensazione”. Serve tracing: chiamate LLM, prompt effettivi, tool invocati, stato prima/dopo ogni nodo, tempi e errori.
Strumenti di tracing (es. LangSmith) aiutano a:
- capire perché un agente ha scelto un ramo;
- individuare loop indesiderati;
- misurare costi e latenza;
- riprodurre run problematiche.
Production grade: dal prototipo al servizio
Un agente che funziona in locale non è ancora un prodotto. Il pacchetto “production-ready” include quasi sempre:
- containerizzazione Docker;
- API backend (spesso FastAPI);
- database (PostgreSQL / SQLAlchemy) e gestione migrazioni;
- gestione sicura di secret ed environment variables;
- logging strutturato;
- CI/CD (GitHub Actions o equivalente);
- deployment (AWS o piattaforme come Render) con attenzione a scaling e osservabilità.
Tre progetti tipici che mettono insieme tutto
Per rendere concreti i concetti, ecco tre archetipi di applicazioni agentiche molto comuni:
-
Chatbot agentico end-to-end
- stato + memoria persistente
- tool integration
- RAG
- HITL per approvazioni
- tracing e deployment
-
“ChatGPT-like” custom per dominio specifico
- workflow governato
- vector DB (es. Chroma)
- backend FastAPI
- database relazionale per utenti/sessioni
-
Planner multi-agente (es. trip planner)
- più agenti specializzati (ricerca, budget, itinerario, prenotazioni)
- esecuzioni parallele e aggregazione
- richieste di input mirate all’utente
Sintesi: come pensare “agentico” da frontend/dev di prodotto
La svolta non è “mettere un LLM nell’app”, ma progettare un processo:
- definisci lo stato che vuoi controllare;
- scomponi in nodi piccoli e testabili;
- usa Pydantic per rendere affidabili gli output;
- integra tool e RAG come componenti governati;
- inserisci HITL dove il rischio è reale;
- metti tracing e deployment sul tavolo da subito.
L’implicazione pratica è chiara: gli agenti diventano davvero utili quando smettiamo di trattarli come “chat intelligenti” e iniziamo a considerarli workflow engine con un LLM al centro, orchestrati e osservabili come qualsiasi sistema software serio.