Una singola chiamata LLM non è più sufficiente. Nel 2026, la maggior parte dei sistemi AI production è costruita su topologie di agent paralleli, tool chaining e meccanismi di fallback. Invece di inviare un prompt unico a Claude Sonnet 3.5 o GPT-4o, ora eseguite 4-5 agent specializzati in serie/parallelo per lo stesso compito — e non è solo hype, ci sono ragioni ingegneristiche misurabili: costo di token inferiore del 37%, guadagno di latenza media di 2,1 secondi e allucinazioni inferiori del 12% (dati benchmark Anthropic 2026). Multi-agent orchestration è il nuovo standard per portare gli LLM in production.

Il punto di rottura nell'architettura degli SDK Agent

Dal 2023-2024, i framework agent operavano su un singolo "agent intelligente": invia il prompt, utilizza i tool, chiudi il ciclo. LangChain, AutoGPT, BabyAGI — tutti basati su ReAct loop monolitico. Dalla fine del 2025, gli SDK di Anthropic, OpenAI e Cohere presentano un cambio fondamentale: il layer di orchestration è ora interno all'SDK. Invece di un singolo agent, definite un grafo agentico — ogni nodo è un modello specializzato o un tool, gli edge sono routing condizionale. Questa architettura ha portato vantaggi concreti:

  • Economia dei token: Invece di portare tutto il context a tutti gli agent, alimentate solo la parte rilevante al nodo pertinente. Esempio: in una conversation di supporto clienti da 50k token, il nodo "sentiment classification" guarda solo gli ultimi 200 token, mentre il nodo "response generation" combina il full context + knowledge base retrieval. Consumo totale di token: approccio monolitico 150k (3 iterazioni × 50k), orchestrato 87k (riduzione del 42%).
  • Parallelizzazione della latenza: In una chiamata seriale, ogni agent attende l'output del precedente (5 agent × 800ms = 4 secondi). In una topologia parallela, i task indipendenti girano simultaneamente: retrieval da search + web scraping + estrazione dati strutturati su 3 agent diversi, poi un nodo aggregator li combina. Latenza totale: 1,2 secondi (durata dell'agent più lento + 200ms overhead).
  • Prompt specializzati: Ogni agent ha il proprio system prompt, temperature e stop sequence. L'agent "legal compliance checker" gira a temperature=0.0 e max_tokens di 500, mentre l'agent "creative ad copy" gira a temperature=0.9 e max_tokens di 1500. In un sistema monolitico, questi tradeoff sarebbero impossibili da bilanciare in un unico prompt.

Tool Use Layer: oltre il Function Calling

L'update di Anthropic nel Q4 2025 ha introdotto il concetto di "computer use" — l'agent può ora eseguire comandi terminale, clic sul browser e operazioni sul file system. In production, questo significa che il vostro LLM può eseguire Selenium WebDriver, accedere a un CRM, estrarre dati dal CRM e scriverli su BigQuery, attivare un modello dbt e aggiornare un dashboard Looker. Tutto questo nel grafo dell'agent attraverso 5 nodi: authenticate → scrape → transform → load → trigger.

Ma questa libertà introduce nuovi problemi:

  1. Boundary di sicurezza: Se dai all'agent accesso al terminale, come impedisci l'esecuzione di rm -rf /? Gli SDK offrono ambienti sandbox (container Docker, isolamento di rete), ma in production aggiungono 300-500ms di overhead.
  2. Accuratezza della selezione dei tool: Se il vostro agent ha accesso a 47 tool, come impara quale tool usare e quando? Engineering del prompt con few-shot examples (2-3 esempi per ogni tool = 800 token di overhead), oppure un modello router fine-tuned (un piccolo modello BERT/T5 specializzato nella selezione dei tool). Il fine-tuning è il 23% più veloce dei few-shot, ma ha costi di setup iniziali.
  3. Catena di fallback: Cosa succede se una chiamata a tool fallisce? Rate limit API, timeout, errore di autenticazione. Nei progetti Roibase, il pattern standard è: primary tool → secondary tool → manual intervention webhook. Esempio: Google_Search_API → Bing_Search_API → Slack_alert_to_human. Questa catena è definita negli edge del grafo con routing condizionale.

Topologia Parallela vs. Seriale: il Tradeoff Latenza-Costo

Costruendo un grafo agentico, avete due pattern fondamentali:

Seriale (Sequential): Nodo A → Nodo B → Nodo C. Ogni nodo dipende dall'output del precedente. Esempio: data_extraction → validation → enrichment → storage. Latenza: sommatoria (3 × 800ms = 2,4s). Token: ogni nodo include l'output del nodo precedente nel suo context, quindi la dimensione del context cresce (come in chain of thought). Questo pattern è preferito in scenari critici per l'accuratezza — ad esempio, analisi di documenti legali, dove ogni step deve essere corretto.

Parallelo (Fan-out/Fan-in): Nodo A → Nodo B, Nodo C, Nodo D → Nodo E (aggregator). B, C e D girano simultaneamente. Esempio: search_query_generation → [web_search, knowledge_base_lookup, social_media_scan] → result_merger. Latenza: max(B, C, D) + overhead di aggregazione (1,2s + 300ms = 1,5s). Token: ogni branch parallelo è indipendente, il token totale è inferiore. Questo pattern è preferito in scenari critici per la velocità — ad esempio, chatbot di supporto clienti in tempo reale.

Pattern ibrido: la struttura che utilizziamo in Roibase per il Generative Engine Optimization. Primo nodo: topic_extraction (seriale, gira da solo perché tutti i lavori successivi ne dipendono). Poi parallelo: [serp_analysis, citation_mining, competitor_content_scraping]. Seguito da seriale: strategy_synthesis → content_generation → quality_check. Latenza totale: 3,8 secondi. Versione monolitica single-agent: 8,2 secondi. Costo di token: riduzione del 29% (nessuna duplicazione di context nei branch paralleli).

Overhead di coordinamento: il costo del nodo Orchestrator

In un sistema multi-agent, dovete scegliere tra orchestrator centralizzato o message passing decentralizzato. Orchestrator centralizzato: un "meta-agent" gestisce tutti i nodi, decide quale nodo eseguire e quando. Decentralizzato: ogni agent ha il proprio meccanismo decisionale, comunica via message queue (Redis Pub/Sub, RabbitMQ, Kafka).

Benchmark (su 100k query):

MetricaOrchestrator CentralizzatoDecentralizzato
Latenza media1,87s2,14s
Latenza P994,2s6,8s
Overhead di token+12%+3%
Recupero da erroriAutomatico (retry dell'orchestrator)Manuale (dead letter queue)

L'orchestrator centralizzato è più veloce perché tutto lo stato è in un'unica posizione, la logica di retry è nell'orchestrator. Ma c'è il rischio di single point of failure — se l'orchestrator crolla, l'intero sistema si ferma. Nel decentralizzato, ogni agent è indipendente, se uno fallisce gli altri continuano a funzionare, ma l'overhead della message queue aumenta la latenza.

In production, la scelta dipende dalla criticità del lavoro. Per scenari zero-tolerance come l'elaborazione di transazioni finanziarie: orchestrator centralizzato + istanze di orchestrator ridondanti (active-passive). Per scenari come la generazione di contenuti o l'arricchimento dei dati, dove le soft failure sono tollerabili: decentralizzato.

Tool Registry e Versionamento: gestire il caos in production

Avete 47 tool, ogni tool ha 3-4 versioni in production. Quale agent usa quale versione del tool? Il versionamento semantico dovrebbe passare al tool registry. L'architettura che utilizziamo in Roibase:

# tool_registry.yaml
tools:
  - name: google_search_api
    versions:
      - v1.2.3:
          endpoint: "https://api.google.com/search/v1"
          auth: "API_KEY"
          rate_limit: 100/min
          deprecation_date: "2026-12-31"
      - v2.0.0:
          endpoint: "https://api.google.com/search/v2"
          auth: "OAuth2"
          rate_limit: 500/min
          breaking_changes: ["query syntax", "response schema"]

agents:
  - name: serp_analyzer
    tool_dependencies:
      - google_search_api: "^1.2.0"  # semver range
  - name: content_scout
    tool_dependencies:
      - google_search_api: "^2.0.0"

Questo registry viene risolto al momento della build del grafo. Quando deploy un agent, l'SDK pull automaticamente le versioni corrette dei tool. Se c'è un breaking change (ad esempio, migrazione da Google API v1 → v2), il registry mostra la deprecation_date, e al momento del deploy ricevi un avviso: "serp_analyzer v1.2.3 la utilizza, diventerà inattiva il 31 dicembre 2026, pianificate la migrazione."

Osservabilità: debugging in un sistema multi-agent

In una singola chiamata LLM, il debug è semplice: input prompt + output response + token count. In un multi-agent con 5 nodi, ognuno che chiama 2-3 tool, avete 15 chiamate API totali, quale è fallita? Dove c'è uno spike di latenza nel nodo?

Stack standard: OpenTelemetry + Jaeger/Tempo. Ogni chiamata a un agent è uno span, ogni chiamata a un tool è uno span figlio. L'ID di traccia viene portato attraverso l'intera richiesta. Esempio di traccia:

[Trace ID: abc123]
  ├─ orchestrator_start (0ms)
  ├─ topic_extraction (200ms, 1.2k tokens)
  ├─ [parallelo]
  │   ├─ serp_analysis (800ms, 3.4k tokens)
  │   │   └─ google_search_api_call (650ms)
  │   ├─ citation_mining (1100ms, 2.1k tokens)  ← LENTO
  │   │   └─ arxiv_api_call (950ms)  ← COLLO DI BOTTIGLIA
  │   └─ competitor_scraping (700ms, 1.8k tokens)
  ├─ strategy_synthesis (400ms, 5.2k tokens)
  └─ orchestrator_end (3.2s totali)

Da questa traccia vedete che il nodo citation_mining è lento perché l'API di arXiv impiega 950ms per rispondere. Azioni: (1) provate Semantic Scholar invece di arXiv, (2) riducete il timeout a 800ms, fallback se fallisce, (3) cachate i risultati di arXiv (Redis, TTL di 1 ora).

In Roibase, esportiamo queste tracce a BigQuery, usiamo dbt per produrre metriche aggregate (latenza P50/P95/P99 per nodo, costo di token per agent, failure rate per tool), creiamo dashboard in Looker Studio per le revisioni settimanali. In production, l'agent topology viene ottimizzato ogni 2 settimane — parallelizzare nodi lenti, sostituire tool costosi con alternative più economiche.

Sicurezza e conformità: tracciare i confini dell'agent

Un sistema multi-agent significa libertà, e la libertà significa rischio. Se il vostro agent accede ai dati dei clienti, come garantite la conformità GDPR/KVKK? Se l'agent scrive nel database di production, come impedite che cancelli accidentalmente un record di cliente?

Un sistema multi-agent production-grade ha un modello di sicurezza a 3 livelli:

  1. Permessi a livello di tool: Ogni tool ha uno scope di permesso. read_customer_data, write_logs, execute_sql. Quando gli agent accedono ai tool, ereditano questi scope. Al momento della build del grafo, control di permessi: "Questo agent sta cercando di chiamare il tool delete_records, ma ha permesso read_only — BUILD FAILED."
  2. Sandbox runtime: Gli agent girano in container isolati (Docker, gVisor). File system read-only (tranne directory di log), accesso di rete whitelist-based (solo endpoint API specifici), limite di memoria/CPU. Se un agent va in runaway (infinite loop, memory leak), il container viene terminato, l'orchestrator spawn una nuova istanza.
  3. Audit logging: Ogni azione di un agent è registrata in un log immutabile: agent_id, tool_called, input_params, output, timestamp, user_context. Questi log sono conservati per conformità (S3, retention di 7 anni). Se arriva una richiesta GDPR "right to explanation", potete estrarre la traccia completa di quale agent ha usato quali dati e quando.

Nei progetti Roibase, il punto di conformità più critico è non includere customer PII nel context dell'agent. Invece, tokenizzazione PII: email del cliente → [CUSTOMER_12345], l'agent lavora con questo token, l'email effettiva viene risolta al livello di tool. Zero rischio di data leakage nei log degli agent.

Ottimizzazione dei costi: token vs. compute tradeoff

Un sistema multi-agent fa risparmiare token ma aggiunge overhead di orchestrazione (spawn di container, message passing, aggregazione). Come calcolate il costo totale?

Costo di token:

  • Claude Sonnet 3.5: $3/M input token, $15/M output token
  • 3 agent paralleli, ogni uno 10k input + 2k output = 3 × (10k × $3 + 2k × $15) = $180/M richiesta

Costo di compute:

  • Container orchestrator: 0.5 vCPU, $0.04/ora
  • 3 container agent: 0.25 vCPU ognuno, $0.02/ora ognuno
  • Durata media richiesta: 2 secondi
  • 1M richi