Vai al contenuto
Capitolo 05 · 12 min

Agenti che non crollano

"Agente" è la parola più sopravvalutata dell'IA. Spogliato dell'hype, un agente è un modello in un loop che può chiamare tool, leggere i risultati e decidere cosa fare dopo. Questa struttura semplice è genuinamente potente per compiti ben delimitati, e genuinamente fragile quando gli chiedi troppo. Questo capitolo spiega come restare dal lato utile di quella linea.

The agent loopThe model sits on the left, tools on the right. An arrow goes from the model to a chosen tool, the tool returns a result, and a step counter tracks how many turns have elapsed. If the model emits a final answer or hits the step limit, the loop exits.modeltoolssearch()calc()run_sql()call a toolread the resultSTEP COUNTER1234Nexits on final answer or step cap

Un agente è uno stagista con una lista di cose da fare e un telefono. Utile per le commissioni; pericoloso con la tua carta di credito.

Un agente è solo un loop

Non c'è magia. Un agente è: un prompt di sistema, un insieme di tool, e un loop che esegue il modello, esegue qualsiasi tool esso chiami, riporta il risultato, e ripete finché il modello non produce una risposta finale o raggiunge un limite di passi. È tutta qui l'idea. Tutto il resto è disciplina di ingegneria attorno a quel loop.

The agent loopThe model sits on the left, tools on the right. An arrow goes from the model to a chosen tool, the tool returns a result, and a step counter tracks how many turns have elapsed. If the model emits a final answer or hits the step limit, the loop exits.modeltoolssearch()calc()run_sql()call a toolread the resultSTEP COUNTER1234Nexits on final answer or step cap
Il modello chiama un tool, legge il risultato, decide il passo successivo, e si ferma quando ha una risposta, o quando raggiunge il tetto di passi.
messages = [system_prompt, user_message]
for step in range(MAX_STEPS):
    response = model.call(messages, tools=TOOLS)
    if response.is_final_answer:
        return response.text
    result = run_tool(response.tool_call)   # your code, with all the guards
    messages += [response, result]
raise StepLimitExceeded()                   # never loop forever

Perché gli agenti crollano: l'errore che si compone

Il motivo per cui le lunghe esecuzioni di agenti falliscono non è che il modello è stupido. È aritmetica. Se ogni passo è affidabile al 95%, un compito di 10 passi riesce 0,95^10 ≈ 60% delle volte. Un compito di 20 passi: 36%. L'errore si compone in modo moltiplicativo, e non esiste prompt che abolisca la moltiplicazione.

Lo stato onesto degli agenti: eccellenti per compiti ben delimitati di pochi passi ("smista questo ticket con questi tool", "riconcilia questi due record"), inaffidabili per obiettivi aperti e a lungo orizzonte. La portata è la leva.

Come costruirne uno che funziona

Ogni agente di produzione affidabile fa la stessa manciata di cose. Nessuna è esotica; sono tutte disciplina.

  • Portata ristretta: un solo lavoro, un piccolo set di tool, una definizione chiara di completamento. Più la portata è ristretta, più l'eval è trattabile.
  • Tetto di passi rigoroso: il loop deve sempre terminare. Un agente senza tetto è una fattura senza limite.
  • Tool idempotenti: ogni tool sicuro da riprovare, perché l'agente riproverà.
  • Umano nel ciclo sulle azioni ad alto rischio: proponi, non eseguire, quando l'azione è irreversibile.
  • Logga tutto: ogni prompt, risposta, chiamata di tool e risultato. Ne avrai bisogno entro la settimana.

E preferisci la struttura all'autonomia. Un workflow fisso con un modello a ogni punto di decisione è più affidabile di un agente pienamente autonomo che decide il proprio piano, e molto più facile da valutare con le eval. Ricorri all'autonomia aperta solo quando il compito lo richiede davvero, cosa più rara di quanto le demo suggeriscano.

I sistemi multi-agente: di solito prematuri

È allettante costruire una squadra di agenti specializzati che si parlano. A volte è il design giusto. Di solito moltiplica il problema dell'errore che si compone (ora hai diversi loop fragili che si coordinano) rendendo al tempo stesso il sistema molto più difficile da debuggare e valutare. Fai funzionare prima un singolo agente. Aggiungi agenti solo quando puoi indicare il limite preciso che uno solo ha raggiunto.

Una riga per ciascuno

  • Un agente è un modello in un loop con tool e un tetto di passi. Non c'è magia, solo ingegneria attorno al loop.
  • Gli agenti crollano perché l'errore si compone: 95% per passo è ~60% su 10 passi. La moltiplicazione se ne infischia del tuo prompt.
  • Costruiscili ristretti: un solo lavoro, piccolo set di tool, tetto di passi rigoroso, tool idempotenti, porte umane, logging completo.
  • Preferisci i workflow all'autonomia e un singolo agente a molti. Aggiungi complessità solo contro un limite che hai davvero raggiunto.
Agenti che non crollano · Corsi di IA · SDEN