Wat is een Software Agent?

(Dit document is voor historische referentie – ik schreef het in 2005 en publiceerde het op mijn nu ter ziele gegane website op http://agtivity.com/agdef.htm, maar het zou nog steeds op zijn minst enige huidige relevantie moeten hebben.)

Voor meer recent denken over dit onderwerp lees deze nieuwere papers:

  • Wat zijn autonomie en agentschap?
  • Intelligent Entities: Principals, Agents, and Assistants
  • What Is an Intelligent Digital Assistant?

Een Software Agent (of Autonomous Agent of Intelligent Agent) is een computerprogramma dat naar doelen toewerkt (in tegenstelling tot discrete taken) in een dynamische omgeving (waar verandering de norm is) namens een andere entiteit (menselijk of computationeel), mogelijk over een langere periode van tijd, zonder voortdurende directe supervisie of controle, en vertoont een significante mate van flexibiliteit en zelfs creativiteit in hoe het probeert om doelen om te zetten in actietaken.

Een Software Agent Systeem (of Multi-Agent Systeem (MAS)) is een computationele omgeving (zoals het Web of een grid computing omgeving overlay netwerk) waarin individuele software agents met elkaar interageren, soms op een coöperatieve manier, soms op een competitieve manier, en soms autonoom hun individuele doelen nastreven, toegang krijgen tot middelen en diensten van de omgeving, en af en toe resultaten produceren voor de entiteiten die deze software agents hebben geïnitieerd.

Een eenvoudiger, meer gestructureerde definitie is te zeggen dat een softwareagent een computerprogramma is dat de kenmerken van agentschap of softwareagentschap vertoont.

De andere entiteit kan een mens zijn, een traditioneel, “legacy” computerprogramma, een robot, of een andere softwareagent. Een softwareagent is vergelijkbaar met een robot, maar opereert in cyberspace, op een computernetwerk.

Een softwareagent is autonoom of op zijn minst semi-autonoom, wat betekent dat het taken kan uitvoeren bij het nastreven van een doel met een minimum aan direct toezicht of directe controle, maar kan communiceren met een andere entiteit om leiding of outputresultaten te verkrijgen. Het kan al dan niet een gebruikersinterface hebben.

Een softwareagent zou in feite interactief of converserend kunnen zijn, handelend namens een andere entiteit die niet direct zichtbaar is voor de “gebruiker” die met de agent interageert. Dit zou een directe analogie zijn met hoe de agenten van de echte wereld werken.

Een softwareagent kan een hoog niveau van “intelligentie” moeten hebben om met een dynamische omgeving om te gaan waarin het onverwachte de norm is. Maar het is ook mogelijk om een “domme” softwareagent te hebben die autonoom werkt om welomschreven taken te volbrengen en slechts om supervisie vraagt wanneer hij onverwachte omstandigheden ontdekt.

Een software agent kan “mobiel” zijn en zich verplaatsen of worden verplaatst in het netwerk, maar een software agent kan ook “statisch” zijn en al zijn werk doen op één host computer in het netwerk, inclusief toegang tot bronnen die zich op andere hosts bevinden dan de host waarop de agent wordt uitgevoerd.

Een interactieve of conversatie agent kan in feite slechts een “assistent” zijn, onder directe controle en in opdracht van dezelfde gebruiker. Dit zou een minder autonome werkingswijze zijn, maar de interactieve agent zou eventueel de opdracht kunnen krijgen om op pad te gaan en een of ander doel te bereiken en daarbij autonoom te werken. De kwestie van “agentschap” is vooral de mate waarin er GEEN één-op-één relatie is tussen de conversie tussen de gebruiker en de agent en het feitelijke takenpakket dat door de vermeende agent wordt uitgevoerd. Een assistent doet precies wat hem gezegd wordt. Een agent krijgt een doel en heeft flexibiliteit over hoe dat doel te bereiken.

Een agent kan een enkele agent zijn (één agent die een reeks taken uitvoert om een doel te bereiken), deel van een agentensemble (een vrij klein team met specialisatie onder de teamleden), of een zeer klein deel van een agentarmada (grote aantallen agenten met een significante hoeveelheid parallellisme voor zelfs specifieke taken). Zelfs een enkele agent kan interactie hebben met andere agenten die verantwoordelijk zijn voor een andere entiteit. Wat een agentensemble en een agentarmada onderscheidt, is dat zij verantwoordelijk zijn aan één enkele entiteit.

Wij kunnen spreken van een agentengemeenschap of een gemeenschap van softwareagenten of multi-agentensysteem waarin vele onafhankelijke agenten op zijn minst schijnen samen te werken (en/of te concurreren) bij het nastreven van gemeenschappelijke doelstellingen. De gemeenschap kan beperkt zijn tot vooraf geplande leden, of zij kan open-ended zijn en willekeurige, externe agenten toestaan om tot de open gemeenschap van softwareagenten “toe te treden”.

Een softwareagent kan voor altijd of voor onbepaalde tijd lopen, onophoudelijk zijn doelstellingen nastrevend, maar het is ook mogelijk voor een instantie van een agent om te beëindigen zodra zijn doelstellingen worden bereikt of niet meer nodig zijn.

Karakteristieken die vaak worden genoemd als geschikt voor softwareagenten zijn: reactief, bedachtzaam, doelgericht, adaptief, autonoom, lerend, communicatief, competitief en samenwerkend gedrag.

Softwareagenten (en softwareagentsystemen) zouden moeten worden ontworpen met behulp van een modulaire architectuur.

Softwareagenten zijn de volgende evolutionaire stap voorbij objecten en programma’s. Objecten hebben de neiging passief te zijn met slechts één object tegelijk actief, en objecten hebben de neiging “verborgen” te zijn in programma’s. Programma’s hebben de neiging relatief statisch te zijn en het ontwerpen van een gedistribueerde berekening met een onbepaald aantal samenwerkende programma’s is geen gemakkelijke taak. Software-agenten bieden mogelijkheden voor parallellisme en samenwerking tussen programma’s, en op grote schaal, en om dit gemakkelijk te doen en op een robuuste, betrouwbare, flexibele en veilige manier.

Voor bespreking van kwesties in verband met het definiëren van wat een agent wel of niet is, klik hier.

Vormen van software-agenten

Zoals er geen harde definitie van een software-agent, hier zijn de verschillende vormen van software-agent die ik heb geïdentificeerd, tot nu toe:

  • System Agent – een continu draaiende achtergrond taak of daemon die meestal een gespecialiseerde, voorgeprogrammeerde doel heeft..
  • User Agent – de client-side user interface voor een geavanceerde netwerk applicatie. Bijvoorbeeld de webbrowser voor toegang tot het World Wide Web.
  • Client Agent – de client-side gebruikersinterface voor een server-gebaseerde toepassing, zoals een zoekmachine of het zoeken naar deals. De server-side is meestal gewoon het uitvoeren van een database lookup op een database die onafhankelijk wordt onderhouden door een vorm van web crawler die wijzigingen op websites monitort.
  • Web Crawler – een server-based programma dat continu of periodiek het web of geselecteerde delen van het web scant op zoek naar informatie van belang. Dit is niet echt een agent, omdat het niet optreedt namens een discrete gebruiker, maar het verzamelt gegevens die kunnen worden gebruikt voor een breed publiek van gebruikers.
  • Conversational Agent – een interactief programma dat een zeer gebruikersvriendelijke interface presenteert en vervolgens specifieke taken uitvoert volgens de aanwijzingen van de gebruiker. Aangezien het direct reageert op verzoeken van de gebruiker werkt het niet echt autonoom.
  • Intelligent Agent – een programma dat een taak uitvoert of doelen nastreeft met minimale specifieke richting, gebruikmakend van intelligente of heuristische technieken, zodat de gebruiker erg onder de indruk is dat een computer zo slim kan zijn. Een IA behoeft niet mobiel te zijn aangezien de enorme hoeveelheid informatie op het web op afstand kan worden geraadpleegd.
  • Mobile Agent – een autonoom programma dat migreert tussen gastsystemen bij het nastreven van een of meer doelen. Een MA hoeft niet echt intelligent te zijn, maar heeft voldoende flexibiliteit om om te gaan met een omgeving waarin dingen op elk moment kunnen veranderen of onbereikbaar zijn.
  • (Gesloten) Multi-Agent Systeem – een strak geïntegreerde toepassingsomgeving waarin delen van de toepassing zijn verkaveld aan mini-programma’s die subdoelen nastreven.
  • Open Multi-Agent System – een losjes geïntegreerde, gedistribueerde toepassingsomgeving waarin onafhankelijk van elkaar opgebouwde programma’s (agents) kunnen deelnemen aan gestructureerde interacties waarin de agents een significante mate van gemeenschappelijk belang hebben (community).
  • Ultimate Software Agent – een uiterst intelligent en flexibel programma dat kan handelen zoals een echte persoon handelt, maar dan beperkt tot cyberspace. Bovendien heeft een USA de mogelijkheid om zichzelf dynamisch op te splitsen in sub-agenten die subtaken kunnen uitvoeren en parallel kunnen opereren met elke mate van interactie. Een VSA kan zichzelf ook klonen (of, bij voorkeur, automatisch door de agentinfrastructuur worden gekloond) om het inherente parallellisme van het netwerk te benutten. Opgesplitste of gekloonde sub-agenten kunnen op elk punt opnieuw worden samengevoegd als dit voor de functie of de prestaties van de overkoepelende agent passend is. Een USA kan ook interageren met andere, onafhankelijke USAs (een gemeenschap van USAs) waarvoor de USA geen voorgeprogrammeerd bewustzijn heeft. Een breed scala van programmeertalen, implementatietechnieken, en communicatieprotocollen kan worden gebruikt. Elke USA is volledig interoperabel met elke andere USA, slechts onderworpen aan administratieve controles en beperkingen van middelen.
  • Robot – een intelligente software-agent die mobiel is in de echte wereld. Robots kunnen zichzelf momenteel niet klonen, maar in theorie KAN een robot fysiek kopieën van zichzelf maken OF “lege” (of lege) robots kopen of huren (zoals bij een huurauto). In theorie zou een robot zichzelf naar een andere locatie kunnen “transporteren” door simpelweg een leeg omhulsel op een andere locatie aan te schaffen en vervolgens zijn softwarestatus te “uploaden” naar die andere “lege” robot. De robot kan ervoor kiezen om het oorspronkelijke omhulsel te verlaten of kan dit mechanisme gewoon gebruiken om te klonen.
  • Robotgemeenschap – robots die met elkaar kunnen interageren bij het nastreven van gemeenschappelijke belangen.
  • Hybride robot/agent – een robot die kan interageren met een of meer softwareagenten, of een softwareagent die kan interageren met een of meer robots. Het wordt pas echt interessant als een gemeenschap van robots samenwerkt met een gemeenschap van softwareagenten! Merk ook op dat een robot zijn softwaretoestand kan overdragen aan een softwareagent en dan in cyberspace kan werken ALS hij een softwareagent was en dan zijn toestand kan TERUGSTUREN naar de robot. Een softwareagent kan het omgekeerde doen: zijn toestand overbrengen naar een fysieke robot, de robot bedienen en dan zijn toestand teruggeven aan de cyberspace. Een robot kan handelen ALS ware het een softwareagent met toegang op afstand. En een softwareagent kan ook een fysieke robot rechtstreeks vanuit cyberspace bedienen, eveneens met toegang op afstand. In feite zou een enkele softwareagent (of een team van agenten) meerdere robots op dezelfde of verschillende locaties kunnen besturen, inclusief het regelen van de interactie tussen die robots.

Voor een nog eerdere kijk op het onderwerp zie het artikel van Stan Franklin en Art Graesser getiteld “Is it an Agent, or just a Program? A Taxonomy for Autonomous Agents.”

Zie ook het Wikipedia-artikel voor Software Agent.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.