Crea un agente AI partendo dalle basi: il ciclo decidi, agisci, osserva, le definizioni dei tool, la memoria, i limiti di passi, l'approvazione umana e i test. Include un simulatore di passi.
Un agente AI è un ciclo. Un modello linguistico legge l'obiettivo e tutto ciò che è successo finora, poi chiama uno dei tool che hai definito oppure dà una risposta finale. Il tuo codice esegue il tool, aggiunge il risultato e chiede di nuovo. Limiti di passi, permessi, approvazione umana e test mantengono sicuro quel ciclo.
Le cinque parti di un agente
Avvia il simulatore per seguire un task attraverso il ciclo. Attiva e disattiva l'approvazione per vedere dove un guardrail interrompe un passo rischioso. La traccia è predefinita così puoi studiarla; un'esecuzione reale interrogherebbe un modello a ogni passo di decisione.
No. Il nucleo è un ciclo while attorno a una chiamata al modello e uno switch sui nomi dei tool, come mostra l'esempio in questa pagina. I framework aggiungono retry, tracing e integrazioni, utili più avanti ma che nascondono il ciclo mentre impari.
Invii le definizioni dei tool con ogni richiesta. Quando il modello ne vuole usare uno, risponde con il nome del tool e gli argomenti invece che con testo semplice. Il tuo codice esegue la funzione e rimanda il risultato come messaggio successivo.
Il contesto è ciò che il modello vede in questa chiamata: istruzioni, obiettivo e trascrizione finora. La memoria è tutto ciò che salvi e decidi di rimettere nel contesto più tardi, come le note di un'esecuzione precedente.
Limita il numero di passi e la spesa totale, e chiudi l'esecuzione con un messaggio chiaro quando uno dei due limiti viene raggiunto. OWASP elenca Unbounded Consumption tra i rischi 2025 per le applicazioni basate su modelli linguistici.
Scrivi un insieme di task fissi con risultati verificabili: è stato chiamato il tool giusto, un'azione rischiosa ha atteso l'approvazione, la risposta finale contiene una cifra. Esegui l'insieme dopo ogni modifica al prompt o ai tool e confronta il numero di task superati.
Nessun framework e nessun SDK di un fornitore. callModel è uno stub che riproduce decisioni fisse così il file gira così com'è; sostituiscilo con una richiesta al servizio di modelli che usi.
I tool stanno in un unico oggetto, quelli rischiosi richiedono approvazione, e il ciclo si ferma a un limite di passi. Eseguilo con node agent.mjs.
Le voci di OWASP Top 10 for LLM Applications 2025 più rilevanti per gli agenti
Obiettivo: trovare il più economico tra tre preventivi di fornitori e inviare il riepilogo via email al responsabile d'ufficio.
Il modello sceglie read_quotes per vedere cosa è arrivato.
Il codice esegue read_quotes() e restituisce tre file.
Risultato aggiunto alla memoria: A $1,240, B $1,180, C $1,315.
Il modello ha ciò che gli serve e sceglie send_email con una bozza di riepilogo.
send_email è segnato come ad alto impatto, quindi l'esecuzione si mette in pausa perché una persona approvi la bozza.
Approvato. Il codice esegue send_email() con il testo approvato.
Risultato aggiunto alla memoria: messaggio inviato.
Il modello restituisce una risposta finale: il preventivo B è il più economico a $1,180; riepilogo inviato. 3 chiamate al modello, sotto il limite di 10 passi.
Il modello sceglie read_quotes per vedere cosa è arrivato.
Il codice esegue read_quotes() e restituisce tre file.
Risultato aggiunto alla memoria: A $1,240, B $1,180, C $1,315.
Il modello ha ciò che gli serve e sceglie send_email con una bozza di riepilogo.
Nessuna regola di approvazione, quindi il codice invia subito la bozza. Nessuno l'ha vista prima.
Risultato aggiunto alla memoria: messaggio inviato.
Il modello restituisce una risposta finale. Questa volta ha funzionato, ma anche una cifra sbagliata o un'istruzione iniettata sarebbe partita senza controlli.
Decidi
Agisci
Osserva
Guardrail
Fatto
Passo successivo
Reimposta
Richiedi approvazione prima di send_email
Passo {n} di {v}
Esecuzione terminata.
non ancora raggiunto
Inizia gratis · Nessuna carta di credito richiesta