Agenti AI e Architetture Agentiche: dalla logica dei Bot alla produzione A2A

Cerca:

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Evoluzione degli agenti AI in produzione
Chiamiamo “agente” quasi ogni pezzo di codice scritto negli ultimi dodici mesi. Basta una chiamata API ben piazzata o un chatbot che recupera un PDF aziendale per incollare l’etichetta sul prodotto e lanciarlo sul mercato. La verità, però, è che gran parte di questi sistemi si blocca al primo imprevisto. Abbiamo confuso la capacità di un modello di elaborare il linguaggio con l’autonomia operativa.

Un motore linguistico, da solo, è un interlocutore passivo. Per costruire un sistema che valuta un problema, pianifica, corregge i propri errori e porta a termine un compito complesso, serve un’architettura radicalmente diversa. Questa guida traccia la mappa esatta di quell’architettura: sette passaggi tecnici che separano un semplice script chiuso da ecosistemi capaci di reale orchestrazione e delega.

L’evoluzione dell’AI agentica non rappresenta una singola tecnologia, ma una successione di capacità emergenti. A ogni livello vengono aggiunte nuove proprietà computazionali che modificano profondamente il comportamento del sistema.

Pubblicità

1. SCRIPT BOTS: Il gradino zero

Uno script bot non comprende nulla. È un insieme di condizioni if/else o di pattern matching che mappa input noti a output predefiniti. Zero ambiguità gestita, zero adattamento: se l’input non corrisponde a un pattern previsto, il bot fallisce o risponde in modo generico.

Esempio applicativo

# script_bot.py
# Un sistema totalmente deterministico: prevedibile, ma fragile.
regole = {
    "orari": "Siamo aperti dal lunedì al venerdì, 9-18.",
    "prezzo": "Il prezzo base è di 49€/mese.",
    "contatti": "Scrivici a [email protected]"
}

def rispondi(messaggio_utente):
    testo = messaggio_utente.lower()
    for chiave, risposta in regole.items():
        if chiave in testo:
            return risposta
    return "Non ho capito, prova a riformulare."

>>> rispondi("Quali sono i vostri orari?")
"Siamo aperti dal lunedì al venerdì, 9-18."
>>> rispondi("Posso venire di domenica?")
"Non ho capito, prova a riformulare."  # Il sistema crolla fuori dai binari

Dove si usa ancora oggi: Menu IVR telefonici, automazioni di form, chatbot di primo livello su siti con FAQ statiche. Il vantaggio è la prevedibilità totale: non ci sono allucinazioni perché non c’è generazione di linguaggio.

2. LLMs: L’arrivo della comprensione linguistica

Un modello linguistico (LLM) introduce la prima vera capacità cognitiva: comprendere ed elaborare linguaggio naturale non strutturato. L’LLM qui è isolato: non ha accesso a strumenti esterni, non ha memoria tra una conversazione e l’altra, risponde solo sulla base di ciò che è cristallizzato nei suoi pesi neurali.

Esempio applicativo

# llm_puro.py
# L'LLM può ragionare sul testo, ma la sua conoscenza è congelata.

prompt = "Qual è la temperatura attuale a Milano?"
risposta_llm = "Non ho accesso a dati in tempo reale, "
              "ma a giugno Milano ha in media 24°C."  # Plausibile, ma inutile ai fini pratici

Utile per: Riassunti, riscrittura, classificazione testuale, estrazione di concetti. Il limite strutturale è netto: non c’è modo di agire sul mondo esterno.

3. LLMs + TOOLS: Dal “sapere” al “fare”

Attraverso il function calling, il modello smette di essere un sistema chiuso. Può decidere autonomamente di invocare un’API esterna , meteo, SQL, motore di ricerca, passando parametri strutturati, per poi integrare il risultato nella risposta finale.

Esempio applicativo

# llm_con_tools.py
tools = [{
    "name": "get_weather",
    "description": "Ottiene il meteo attuale per una città",
    "parameters": {"city": "string"}
}]

messaggio = "Che tempo fa a Milano oggi?"

# Il modello non genera testo libero, ma una struttura dati azionabile:
tool_call = {"name": "get_weather", "arguments": {"city": "Milano"}}

# Il sistema esegue la chiamata API reale
risultato_api = get_weather(city="Milano")  # Output: {"temp": 27, "condizioni": "sereno"}

# L'LLM riprende il controllo e sintetizza:
"A Milano oggi ci sono 27°C con cielo sereno."

Il salto concettuale è enorme: l’LLM passa da generatore di testo a orchestratore di azioni.

Forse potrebbe interessarti anche:  AI: Dalla Potenza alla Comprensione – Come DeepSeek, OpenAI e le Nuove Intelligenze Artificiali Stanno Imparando a Ragionare e Riflettere

4. RAG: Ancorare le risposte ai fatti

Il Retrieval-Augmented Generation (RAG) risolve il problema della conoscenza congelata. Recupera documenti da un database vettoriale, li inserisce nel contesto e forza il modello a rispondere basandosi esclusivamente su quei frammenti.

Esempio applicativo

# rag_pipeline.py
domanda = "Qual è la policy di reso della nostra azienda?"

# 1. RETRIEVAL: ricerca semantica nei documenti aziendali
documenti_rilevanti = database_vettoriale.search(query=domanda, top_k=3)

# 2. AUGMENTATION: iniezione del contesto nel prompt
prompt = f"""
Contesto: {documenti_rilevanti}
Domanda: {domanda}
Rispondi SOLO basandoti sul contesto fornito.
"""

# 3. GENERATION
"Il reso è possibile entro 30 giorni dall'acquisto, conservando lo scontrino."

Perché conta: Riduce drasticamente le allucinazioni su documentazione tecnica e policy interne, vincolando l’output a fonti verificabili.

5. AGENTIC MEMORY: Continuità nel tempo

La memoria agentica introduce la capacità di accumulare contesto. Distingue tra cache a breve termine, memoria semantica (fatti generali) e memoria episodica (eventi passati).

Esempio applicativo

# agentic_memory.py
memoria_semantica = {"utente": "Emanuela", "ruolo": "Analyst"}
memoria_episodica = []

def gestisci_richiesta(messaggio):
    # L'agente inietta il passato prima di valutare il presente
    contesto = f"""
    Utente: {memoria_semantica}
    Storico recente: {memoria_episodica[-3:]}
    Richiesta attuale: {messaggio}
    """
    risposta = llm.generate(contesto)

    memoria_episodica.append({"data": "2026-07-02", "evento": messaggio})
    return risposta

6. MCP: Standardizzare gli strumenti enterprise

Il Model Context Protocol (MCP) funge da livello di standardizzazione. Invece di scrivere connettori custom per ogni singolo database o applicativo aziendale, un server MCP espone gli strumenti in un formato universale, agganciabile da qualsiasi agente compatibile.

Esempio applicativo

// mcp_config.json
// L'agente vede automaticamente gli strumenti esposti senza codice di integrazione custom
{
  "mcpServers": {
    "chroma-db": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-chroma"]
    },
    "kusto-db": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-kql"]
    }
  }
}

7. A2A (Agent-to-Agent): Come funzionano davvero i sistemi in produzione

L’orchestrazione A2A è il punto in cui gli agenti smettono di essere “chatbot evoluti” e diventano un vero e proprio sistema distribuito.

Non c’è più un singolo LLM che tenta di risolvere l’intero prompt. Al suo posto, una rete di agenti specializzati collabora su uno stato condiviso. È un’architettura a microservizi, ma con capacità cognitive al posto della rigida logica applicativa. Il risultato è potente ma intrinsecamente fragile: quando funziona sembra magia; quando fallisce, il punto di rottura è spesso invisibile.

7.1 Non messaggi, ma stato condiviso

Il primo equivoco da smontare è pensare agli agenti come entità che si scambiano messaggi in una sorta di chat room. In produzione, l’A2A non funziona così.

Gli agenti non “parlano” tra loro: leggono e scrivono su uno stato strutturato condiviso. Solitamente si tratta di un JSON, di oggetti fortemente tipizzati (TypedDict in Python) o di uno state graph in memoria.

Ogni agente esegue ciclicamente lo stesso pattern:

  1. Legge lo stato attuale.
  2. Esegue una trasformazione (ragionamento o chiamata tool).
  3. Aggiorna lo stato.
  4. Cede il controllo.

Il flusso reale: Nessuno parla direttamente con nessuno. L’orchestratore aggiorna lo stato scrivendo: “Analizzare questi log”. Il Data Agent si attiva, estrae le informazioni e popola la variabile “log estratti”. L’Analyst Agent legge quella variabile, cerca anomalie e aggiorna i “pattern sospetti”. Tutto transita rigorosamente dallo stato.

7.2 Il vero motivo per cui esiste l’A2A: l’economia dei token

L’A2A non nasce per “creare un’AI più intelligente”. Nasce per ottimizzare il budget.

Se utilizzi un modello top-level per ogni singola transazione — generare la query al database, fare il parsing, estrarre i dati, classificarli — stai bruciando token e budget inutilmente. Un’architettura pronta per la produzione sfrutta una precisa frattura economica tra i modelli:

  • Orchestratore (Premium): Modelli ad alto costo e forte capacità logica (come Claude Opus). Non eseguono task operativi; decidono la strategia, costruiscono il piano e valutano gli errori.
  • Worker Agents (Commodity): Modelli più piccoli, veloci e specializzati (come DeepSeek V4). Fanno il lavoro sporco. Non “pensano” al macro-obiettivo, ma sono estremamente efficienti nell’eseguire bene un singolo compito (es. scrivere codice o parsare JSON).
Forse potrebbe interessarti anche:  Cos'è BabelTele e come la compressione del prompt cambia la comunicazione tra LLM

7.3 Esempio reale: SOC Automation

Analizziamo un caso reale: un sistema progettato per indagare su attacchi di tipo Brute Force, Impossible Travel o login anomali.

L’architettura poggia su uno stato condiviso chiaramente definito:

# Python
class SOCState(TypedDict):
    goal: str
    kql_query: str
    logs: list
    findings: dict
    report: str
    errors: list

7.4 Data Agent: Dal linguaggio alla query (KQL)

Questo è uno dei nodi operativi più delicati. Il Data Agent deve tradurre l’obiettivo investigativo in una query Kusto (KQL) ed eseguirla sul database di sicurezza.

Dove fallisce spesso: Genera una query sintatticamente perfetta, ma logicamente errata. Potrebbe omettere un filtro temporale o fallire nell’estrazione.

La soluzione deterministica: Qui servono guardrail rigidi nel codice, non nell’LLM. Ad esempio, prima di aggiornare lo stato con i dati estratti, il sistema deve applicare una logica anti-rumore: se la query ha restituito un campione troppo piccolo e ad altissima unicità, l’estrazione va scartata e l’agente deve riformulare la KQL per allargare la finestra temporale. Senza questo controllo, l’errore diventa invisibile.

7.5 Analyst Agent: Il rischio dei falsi negativi

Questo agente prende in carico i log per cercare pattern d’attacco.

Il problema critico emerge quando i dati forniti dal passaggio precedente sono parziali o filtrati male. L’Analyst Agent elaborerà la sua deduzione logica e dichiarerà: “Nessuna anomalia rilevata”. Questa risposta è tecnicamente coerente con i dati che ha ricevuto, ma completamente sbagliata rispetto alla realtà.

7.6 L’Orchestratore: Il routing decisionale

L’orchestratore non tocca i log e non scrive report. Il suo unico scopo è il routing basato sullo stato del sistema.

# Logica decisionale dell'Orchestratore
if state.get("errors"):
    # C'è stato un problema nel parsing o nell'API
    return "fix_data_agent"
elif not state.get("findings") and len(state.get("logs", [])) > 0:
    # I dati ci sono, ma non sono stati ancora analizzati
    return "run_analyst"
else:
    # Il ciclo è completo
    return "generate_report"

7.7 Il vero problema: La propagazione silente degli errori

Questo è il punto di rottura dell’intero sistema. In un’architettura A2A, i fallimenti raramente fanno crashare l’applicazione lanciando un’eccezione chiara. Al contrario, si propagano.

  • Cascata Silenziosa: Il Data Agent sbaglia leggermente la sintassi di estrazione KQL → L’Analyst Agent lavora su log incompleti → Il Reporter genera un output falso ma rassicurante.
  • Falso Senso di Correttezza: Ogni singolo agente, valutato isolatamente, “ha fatto bene il suo lavoro” in base all’input ricevuto. Eppure, il risultato finale è un disastro operativo.
  • Loop Infiniti: L’Orchestratore rileva un’incongruenza, rimanda il task al Data Agent, che ripete lo stesso identico errore per cinque iterazioni di fila esaurendo il context window e il budget.

Attrito e Complessità: Quando usare cosa

Non tutte le architetture necessitano del livello 7. Anzi, aggiungere autonomia operativa significa aggiungere punti di rottura. Più agenti e tool si inseriscono in un funnel decisionale, maggiore è il rischio di attrito: un sistema A2A mal progettato non risolve problemi, crea loop di errori ricorsivi e consuma risorse a vuoto.

Livello Capacità Aggiunta Scenari Applicativi Ideali
Script Bot Automazione deterministica FAQ statiche, IVR, routing di base
LLM Comprensione linguistica Classificazione, estrazione, sintesi
LLM + Tools Azione sul mondo esterno Interrogazioni API, calcoli strutturati
RAG Conoscenza ancorata Assistenti normativi, policy aziendali
Agentic Memory Continuità temporale CRM conversazionali, supporto tecnico lungo
MCP Integrazione scalabile Ecosistemi aziendali frammentati
A2A Agents Delega e orchestrazione Workflow multi-dominio complessi
Forse potrebbe interessarti anche:  BCI: Applicazioni Cliniche, Sfide Etiche e Quadro Normativo della Nuova Frontiera Cervello-Computer

Il Planning: Il cervello operativo

Abbiamo visto l’hardware concettuale dei sette livelli. Ma qual è il software che li fa muovere? La risposta risiede nel Planning.

Un agente autonomo non si limita a usare strumenti. Deve scomporre l’obiettivo, stabilire l’ordine di esecuzione, verificare ogni output e correggere il proprio piano.

  • Il reasoning decide dove conviene andare (logica).
  • Il planning stabilisce quale percorso seguire (organizzazione).
  • L’execution percorre il tragitto (azione).

Strategie di Planning Moderne

  • ReAct (Reason + Act): Il pattern più diffuso. L’agente riflette sullo stato, esegue un’azione, osserva il risultato e ripete il ciclo. Ideale per ambienti dinamici.
  • Plan-and-Execute: Il planner costruisce subito l’intero albero delle operazioni; un esecutore lo percorre pedissequamente. Eccellente per pipeline dati prevedibili.
  • Tree of Thoughts: Invece di seguire un singolo binario logico, il sistema ramifica l’elaborazione valutando più scenari in parallelo, potando progressivamente i percorsi ciechi.
  • Self-Refine: Un processo iterativo in cui l’agente critica e migliora la propria bozza fino a raggiungere una soglia qualitativa.

L’Economia degli Agenti: Affidabilità vs Costi

L’introduzione di tecniche di planning e iterazione trasforma l’economia del software. A differenza delle architetture tradizionali con costi fissi, un agente autonomo consuma token per pensare, per sbagliare e per correggersi. L’efficacia non si misura più dalla mera “intelligenza testuale”, ma dal Costo per Task Completato con Successo.

Questo rende cruciale sfruttare la frattura economica tra i modelli.

Prendiamo un caso numerico reale: un task di analisi log di sicurezza che richiede 3 iterazioni in architettura ReAct.

Se utilizziamo un modello premium come Claude Opus ([math]\$15[/math] per milione di token) per orchestrare, estrarre e parsare, il costo medio esplode a circa [math]\$2.40[/math] per singolo task.

Se applichiamo un routing cognitivo rigoroso all’interno di un sistema A2A, la spesa cambia drasticamente:

  • L’Orchestratore: Utilizza il modello premium (Opus) esclusivamente per la pianificazione e il routing.
  • Gli Esecutori: Delega le operazioni di estrazione dati e manipolazione stringhe a modelli commodity veloci (come DeepSeek V4, a [math]\$0.50[/math] per milione di token).

Con questa gerarchia, il costo medio crolla a [math]\$0.12[/math] per task. L’architettura distribuita non si limita a separare le competenze software: abbatte il costo computazionale del 95%.

Modello Costo per Milione di Token Ruolo Costo per Task (3 iterazioni)
Claude Opus (Premium) [math]\$15.00[/math] Orchestratore + Worker [math]\$2.40[/math]
Claude Opus (Orchestratore) + DeepSeek V4 (Worker) [math]\$15.00[/math] + [math]\$0.50[/math] Routing cognitivo [math]\$0.12[/math]

Un agente aziendale pronto per la produzione deve dimostrare non solo di saper risolvere un problema, ma di saperlo fare garantendo un ROI positivo tra il costo computazionale speso e il tempo umano risparmiato. La vera maestria nell’AI agentica oggi consiste nel sapere esattamente dove fermarsi nella scala dell’autonomia.

 

Pubblicità