(Questo documento è per riferimento storico – l’ho scritto nel 2005 e pubblicato sul mio sito web ora defunto a http://agtivity.com/agdef.htm, ma dovrebbe avere ancora almeno una certa rilevanza attuale.)
Per un pensiero più recente su questo argomento leggi questi documenti più recenti:
- Cosa sono l’autonomia e l’agenzia?
- Enti intelligenti: Principali, agenti e assistenti
- Cos’è un assistente digitale intelligente?
Un agente software (o agente autonomo o agente intelligente) è un programma per computer che lavora verso obiettivi (al contrario di compiti discreti) in un ambiente dinamico (dove il cambiamento è la norma) per conto di un’altra entità (umana o computazionale), possibilmente per un lungo periodo di tempo, senza continua supervisione o controllo diretto, e mostra un significativo grado di flessibilità e persino di creatività nel modo in cui cerca di trasformare gli obiettivi in compiti d’azione.
Un sistema di agenti software (o Multi-Agent System (MAS)) è un ambiente computazionale (come il Web o una rete di sovrapposizione dell’ambiente di grid computing) in cui gli agenti software individuali interagiscono tra loro, a volte in modo cooperativo, a volte in modo competitivo, e a volte autonomamente perseguendo i loro obiettivi individuali, accedendo a risorse e servizi dell’ambiente, e occasionalmente producendo risultati per le entità che hanno iniziato quegli agenti software.
Una definizione più semplice e più strutturata è dire che un agente software è un programma per computer che esibisce le caratteristiche dell’agenzia o dell’agenzia software.
L’altra entità potrebbe essere un umano, un programma per computer tradizionale, “legacy”, un robot, o un altro agente software. Un agente software è simile a un robot, ma opera nel cyberspazio, su una rete di computer.
Un agente software è autonomo o almeno semi-autonomo, il che significa che può eseguire compiti nel perseguimento di un obiettivo con un minimo di nessuna supervisione o controllo diretto, ma può interagire con un’altra entità per ottenere una guida o risultati. Può o non può avere un’interfaccia utente.
Un agente software potrebbe infatti essere interattivo o conversazionale, agendo per conto di un’altra entità che non è direttamente evidente all'”utente” che interagisce con l’agente. Questo sarebbe un analogo diretto a come funzionano gli agenti nel mondo reale.
Un agente software potrebbe aver bisogno di avere un alto livello di “intelligenza” per poter affrontare un ambiente dinamico in cui l’inaspettato è la norma. Ma è anche possibile avere un agente software “muto” che lavora autonomamente per svolgere compiti ben definiti e richiede supervisione solo quando rileva condizioni impreviste.
Un agente software può essere “mobile” e muoversi o essere spostato nella rete, ma un agente software può anche essere “statico” e fare tutto il suo lavoro su un computer host della rete, compreso l’accesso a risorse che si trovano su host diversi da quello su cui l’agente sta eseguendo.
Un agente interattivo o conversazionale può infatti essere semplicemente un “assistente”, sotto diretto controllo e per conto dello stesso utente. Questo sarebbe un modo meno autonomo di operare, ma l’agente interattivo potrebbe essere diretto ad andare fuori e raggiungere qualche obiettivo e lavorare in modo autonomo mentre lo fa. La questione dell'”agenzia” è soprattutto la misura in cui NON c’è una relazione uno-a-uno tra la conversione tra l’utente e l’agente e l’effettivo insieme di compiti eseguiti dal presunto agente. Un assistente fa esattamente quello che gli viene detto. Ad un agente viene dato un obiettivo e ha flessibilità su come raggiungere quell’obiettivo.
Un agente può essere un singolo agente (un agente che fa una serie di compiti per realizzare un obiettivo), parte di un insieme di agenti (una squadra relativamente piccola con specializzazione tra i membri della squadra), o una parte molto piccola di un’armata di agenti (un gran numero di agenti con una quantità significativa di parallelismo per compiti anche specifici). Anche un singolo agente può interagire con altri agenti che sono responsabili di qualche altra entità. Ciò che distingue un insieme di agenti e un’armata di agenti è che essi sono responsabili verso una singola entità.
Possiamo parlare di una comunità di agenti o di una comunità di agenti software o di un sistema multi-agente in cui molti agenti indipendenti sembrano almeno cooperare (e/o competere) nel perseguimento di obiettivi comuni. La comunità può essere limitata a membri pre-pianificati, o potrebbe essere aperta e permettere ad agenti esterni arbitrari di “unirsi” alla comunità aperta di agenti software.
Un agente software può funzionare per sempre o indefinitamente, perseguendo continuamente i suoi obiettivi, ma è anche possibile per un’istanza di un agente terminare una volta che i suoi obiettivi sono stati raggiunti o non sono più necessari.
Le caratteristiche che sono frequentemente menzionate come appropriate per gli agenti software includono: comportamenti reattivi, deliberativi, guidati dagli obiettivi, adattivi, autonomi, di apprendimento, comunicativi, competitivi e collaborativi.
Gli agenti software (e i sistemi di agenti software) dovrebbero essere progettati usando un’architettura modulare.
Gli agenti software sono il prossimo passo evolutivo oltre gli oggetti e i programmi. Gli oggetti tendono ad essere passivi con solo un oggetto attivo alla volta, e gli oggetti tendono ad essere ‘nascosti’ all’interno dei programmi. I programmi tendono ad essere relativamente statici e progettare una computazione distribuita con un numero indeterminato di programmi che collaborano non è un compito facile. Gli agenti software offrono opportunità per il parallelismo e la collaborazione interprogramma, e su larga scala, e per farlo facilmente e in modo robusto, affidabile, flessibile e sicuro.
Per la discussione dei problemi relativi alla definizione di cosa sia o non sia un agente, clicca qui.
Forme di agenti software
Non essendoci una definizione precisa di agente software, ecco le varie forme di agente software che ho identificato fino ad oggi:
- Agente di sistema – un’attività o demone in background continuamente in esecuzione che tipicamente ha uno scopo specializzato e pre-programmato.
- Agente utente – l’interfaccia utente lato client per una sofisticata applicazione di rete. Per esempio, il browser web per accedere al World Wide Web.
- Client Agent – l’interfaccia utente lato client per un’applicazione basata sul server, come un motore di ricerca o la ricerca di offerte. Il lato server di solito sta semplicemente eseguendo una ricerca su un database che è mantenuto indipendentemente da una qualche forma di web crawler che monitora i cambiamenti ai siti web.
- Web Crawler – un programma basato su server che continuamente o periodicamente scansiona il web o porzioni selezionate del web alla ricerca di informazioni di interesse. Questo non è veramente un agente poiché non sta agendo per conto di un utente distinto, ma sta raccogliendo dati che possono essere usati per un vasto pubblico di utenti.
- Agente conversazionale – un programma interattivo che presenta un’interfaccia molto user-friendly e poi esegue compiti specifici come diretto dall’utente. Dal momento che risponde direttamente alle richieste dell’utente, in realtà non opera in modo autonomo.
- Agente intelligente – un programma che esegue un compito o persegue obiettivi con una direzione specifica minima, usando tecniche intelligenti o euristiche in modo che l’utente sia molto impressionato che un computer possa essere così intelligente. Un IA non ha bisogno di essere mobile dato che la vasta gamma di informazioni sul web può essere accessibile da remoto.
- Agente Mobile – un programma autonomo che migra tra sistemi host nel processo di perseguimento di uno o più obiettivi. Un MA non ha bisogno di essere veramente intelligente, ma di avere abbastanza flessibilità per affrontare un ambiente in cui le cose possono cambiare o essere inaccessibili in qualsiasi momento.
- Sistema Multi-Agente (chiuso) – un ambiente applicativo strettamente integrato in cui porzioni dell’applicazione sono suddivise in mini-programmi che perseguono sotto-obiettivi.
- Sistema Multi-Agente Aperto – un ambiente applicativo distribuito e poco integrato in cui programmi costruiti indipendentemente (agenti) possono partecipare a interazioni strutturate in cui gli agenti hanno un significativo grado di interesse comune (comunità).
- Agente Software Definitivo – un programma estremamente intelligente e flessibile che può agire come una persona reale, ma limitato al cyberspazio. Inoltre, un USA ha la capacità di dividersi dinamicamente in sub-agenti che possono eseguire sotto-compiti e operare in parallelo con qualsiasi grado di interazione. Un USA può anche clonare se stesso (o, preferibilmente, essere clonato automaticamente dall’infrastruttura degli agenti) per sfruttare il parallelismo intrinseco della rete. I sub-agenti divisi o clonati possono essere ricombinati in qualsiasi punto come è appropriato per la funzione o le prestazioni dell’agente complessivo. Un USA può anche interagire con altri USA indipendenti (una comunità di USA) per i quali l’USA non ha consapevolezza pre-programmata. Può essere utilizzata una vasta gamma di linguaggi di programmazione, tecniche di implementazione e protocolli di comunicazione. Ogni USA è completamente interoperabile con ogni altro USA, soggetto solo a controlli amministrativi e limiti di risorse.
- Robot – un agente software intelligente che è mobile nel mondo reale. I robot non possono clonare se stessi, oggi, ma in teoria un robot POTREBBE costruire fisicamente copie di se stesso OPPURE comprare o affittare robot “vuoti” (o shell) (ala un noleggio auto). In teoria, un robot potrebbe “trasportarsi” in un altro luogo semplicemente acquistando un guscio vuoto in un altro luogo e poi “caricare” il suo stato software in quell’altro robot “vuoto”. Il robot potrebbe scegliere di lasciare il guscio originale o potrebbe semplicemente usare questo meccanismo per la clonazione.
- Comunità di robot – robot che possono interagire nel perseguimento di interessi comuni.
- Robot/Agente ibrido – un robot che può interagire con uno o più agenti software, o un agente software che può interagire con uno o più robot. Le cose diventano davvero interessanti quando una comunità di robot interagisce con una comunità di agenti software! Notate anche che un robot potrebbe trasferire il suo stato software ad un agente software e poi operare nel cyberspazio COME se fosse un agente software e poi restituire il suo stato al robot. Un agente software potrebbe fare il contrario: trasferire il suo stato in un robot fisico, operare il robot e poi restituire il suo stato al cyberspazio. Un robot può agire come se fosse un agente software utilizzando l’accesso remoto. E un agente software può anche azionare un robot fisico direttamente dal cyberspazio, sempre usando l’accesso remoto. Infatti, un singolo agente software (o un team di agenti) potrebbe comandare più robot nello stesso luogo o in luoghi diversi, incluso il controllo dell’interazione di quei robot.
Per un punto di vista ancora precedente sull’argomento si veda il documento di Stan Franklin e Art Graesser intitolato “Is it an Agent, or just a Program? A Taxonomy for Autonomous Agents.”
Si veda anche l’articolo di Wikipedia per Software Agent.