(Det här dokumentet är en historisk referens – jag skrev det 2005 och publicerade det på min numera nedlagda webbplats på http://agtivity.com/agdef.htm, men det borde fortfarande ha åtminstone viss relevans).
För nyare tankar om det här ämnet kan du läsa de här nyare dokumenten:
- Vad är autonomi och agens?
- Intelligenta enheter:
- Vad är en intelligent digital assistent?
En mjukvaruagent (eller autonom agent eller intelligent agent) är ett datorprogram som arbetar mot mål (i motsats till diskreta uppgifter) i en dynamisk miljö (där förändring är normen) på uppdrag av en annan enhet (mänsklig eller datoriserad), möjligen under en längre tidsperiod, utan kontinuerlig direkt övervakning eller kontroll, och som uppvisar en betydande grad av flexibilitet och till och med kreativitet när det gäller att omvandla mål till handlingsuppgifter.
Ett programvaruagentsystem (eller multiagentsystem (MAS)) är en datormiljö (t.ex. webben eller ett överlagrat nätverk i en griddatormiljö) där enskilda programvaruagenter interagerar med varandra, ibland på ett samarbetsmässigt sätt, ibland på ett konkurrensmässigt sätt och ibland självständigt, och där de strävar efter att uppnå sina individuella mål, får tillgång till resurser och tjänster i miljön och ibland producerar resultat för de enheter som har tagit initiativ till dessa programvaruagenter.
En enklare och mer strukturerad definition är att säga att en mjukvaruagent är ett datorprogram som uppvisar egenskaperna för agentskap eller mjukvaruagentskap.
Den andra enheten kan vara en människa, ett traditionellt, ”gammalt” datorprogram, en robot eller en annan mjukvaruagent. En programvaruagent liknar en robot, men arbetar i cyberrymden, i ett datornätverk.
En programvaruagent är autonom eller åtminstone halvautonom, vilket innebär att den kan utföra uppgifter i syfte att uppnå ett mål med minimal eller ingen direkt övervakning eller direkt kontroll , men kan interagera med en annan enhet för att få vägledning eller resultat. Den kan ha eller inte ha ett användargränssnitt.
En programvaruagent kan i själva verket vara interaktiv eller konverserande och agera på uppdrag av en annan enhet som inte är direkt synlig för den ”användare” som interagerar med agenten. Detta skulle vara en direkt analogi till hur agenter i den verkliga världen fungerar.
En programvaruagent kan behöva ha en hög grad av ”intelligens” för att kunna hantera en dynamisk miljö där det oväntade är normen. Men det är också möjligt att ha en ”dum” programvaruagent som arbetar självständigt för att utföra väldefinierade uppgifter och som endast begär övervakning när den upptäcker oväntade förhållanden.
En programvaruagent kan vara ”mobil” och förflytta sig eller flyttas runt i nätet, men en programvaruagent kan också vara ”statisk” och göra allt sitt arbete på en värddator i nätet, inklusive att få tillgång till resurser som finns på andra värddatorer än den värddator där agenten körs.
En interaktiv eller konversationsagent kan i själva verket bara vara en ”assistent”, som står under direkt kontroll och på uppdrag av samma användare. Detta skulle vara ett mindre autonomt arbetssätt, men den interaktiva agenten kan möjligen instrueras att gå iväg och uppnå ett visst mål och arbeta autonomt medan han gör det. Frågan om ”agentskap” handlar främst om i vilken utsträckning det INTE finns ett en-till-en-förhållande mellan omvandlingen mellan användaren och agenten och den faktiska uppsättning uppgifter som utförs av den påstådda agenten. En assistent gör exakt vad som sägs. En agent får ett mål och har flexibilitet när det gäller hur han skall uppnå detta mål.
En agent kan vara en enskild agent (en agent som utför en rad uppgifter för att uppnå ett mål), en del av en agentensemble (ett relativt litet team med specialisering bland teammedlemmarna) eller en mycket liten del av en agentarmada (ett stort antal agenter med en betydande grad av parallellitet för även specifika uppgifter). Även en enskild agent kan interagera med andra agenter som är ansvariga inför någon annan enhet. Det som skiljer en agentensemble och en agentarmada åt är att de är ansvariga inför en enda enhet.
Vi kan tala om en agentgemenskap eller en gemenskap av mjukvaruagenter eller ett multiagentsystem där många oberoende agenter åtminstone verkar samarbeta (och/eller konkurrera) i strävan efter gemensamma mål. Gemenskapen kan vara begränsad till i förväg planerade medlemmar, eller så kan den vara öppen och tillåta godtyckliga, externa agenter att ”gå med” i den öppna gemenskapen av mjukvaruagenter.
En mjukvaruagent kan köras för evigt eller på obestämd tid och kontinuerligt sträva efter sina mål, men det är också möjligt att en instans av en agent avslutas när dess mål har uppnåtts eller inte längre behövs.
Karakteristika som ofta nämns som lämpliga för mjukvaruagenter är bland annat: reaktiva, deliberativa, målstyrda, adaptiva, autonoma, lärande, kommunikativa, konkurrenskraftiga och samarbetsbeteenden.
Mjukvaruagenter (och mjukvaruagentsystem) bör utformas med hjälp av en modulär arkitektur.
Mjukvaruagenter är nästa evolutionära steg bortom objekt och program. Objekt tenderar att vara passiva med endast ett objekt aktivt åt gången, och objekt tenderar att vara ”gömda” i program. Program tenderar att vara relativt statiska och det är inte lätt att utforma en distribuerad beräkning med ett obestämt antal samarbetande program. Programvaruagenter erbjuder möjligheter till parallellism och samarbete mellan program, i stor skala, och att göra det enkelt och på ett robust, tillförlitligt, flexibelt och säkert sätt.
För en diskussion om frågor som rör definitionen av vad en agent är eller inte är, klicka här.
Former av mjukvaruagenter
Då det inte finns någon fast definition av en mjukvaruagent, följer här de olika former av mjukvaruagenter som jag hittills har identifierat:
- Systemagent – en kontinuerligt körd bakgrundsaktivitet eller daemon som vanligtvis har ett specialiserat, förprogrammerat syfte.
- Användaragent – användargränssnittet på klientens sida för en sofistikerad nätverksapplikation. Till exempel webbläsaren för åtkomst till World Wide Web.
- Klientagent – användargränssnittet på klientsidan för ett serverbaserat program, t.ex. en sökmotor eller en deal-seeking. Serversidan utför vanligtvis helt enkelt en databassökning i en databas som underhålls oberoende av någon form av webcrawler som övervakar ändringar på webbplatser.
- Webcrawler – ett serverbaserat program som kontinuerligt eller periodiskt söker igenom webben eller utvalda delar av webben för att leta efter information av intresse. Detta är egentligen inte en agent eftersom den inte agerar för en enskild användares räkning, men den samlar in data som kan användas för en bred publik av användare.
- Konversationsagent – ett interaktivt program som presenterar ett mycket användarvänligt gränssnitt och sedan utför specifika uppgifter enligt instruktioner från användaren. Eftersom det direkt svarar på användarens förfrågningar fungerar det egentligen inte autonomt.
- Intelligent agent – ett program som utför en uppgift eller strävar efter mål med minimal specifik styrning, med hjälp av intelligenta eller heuristiska tekniker så att användaren blir mycket imponerad av att en dator kan vara så smart. En IA behöver inte vara mobil eftersom det stora utbudet av information på webben kan nås på distans.
- Mobil agent – ett autonomt program som migrerar mellan värdsystem för att uppnå ett eller flera mål. En agent behöver inte vara verkligt intelligent, men ha tillräcklig flexibilitet för att kunna hantera en miljö där saker och ting kan förändras eller vara otillgängliga när som helst.
- (Stängt) multiagentsystem – en tätt integrerad applikationsmiljö där delar av applikationen delas ut till miniprogram som strävar efter delmål.
- Öppet system med flera agenter – en löst integrerad, distribuerad applikationsmiljö där självständigt konstruerade program (agenter) kan delta i strukturerade interaktioner där agenterna har en betydande grad av gemensamt intresse (gemenskap).
- Ultimat programvaruagent – ett extremt intelligent och flexibelt program som kan agera på samma sätt som en riktig person, men som är begränsat till cyberrymden. Dessutom har ett USA förmågan att dynamiskt dela upp sig själv i underagenter som kan utföra deluppgifter och verka parallellt med vilken grad av interaktion som helst. Ett USA kan också klona sig själv (eller helst klonas automatiskt av agentinfrastrukturen) för att utnyttja nätverkets inneboende parallellitet. Uppdelade eller klonade delagenter kan kombineras på nytt närhelst det är lämpligt för den övergripande agentens funktion eller prestanda. Ett USA kan också interagera med andra oberoende USA (en gemenskap av USA) som USA inte har någon förprogrammerad medvetenhet om. Ett brett spektrum av programmeringsspråk, implementeringstekniker och kommunikationsprotokoll kan användas. Varje USA är helt driftskompatibelt med alla andra USA, endast med förbehåll för administrativa kontroller och resursbegränsningar.
- Robot – en intelligent mjukvaruagent som är rörlig i den verkliga världen. Robotar kan idag inte klona sig själva, men i teorin KAN en robot fysiskt bygga kopior av sig själv ELLER köpa eller hyra ”tomma” (eller skal) robotar (som en hyrbil). I teorin skulle en robot kunna ”transportera” sig själv till en annan plats genom att helt enkelt köpa ett tomt skal på en annan plats och sedan ”ladda upp” sitt programvarustatus till den andra ”tomma” roboten. Roboten kan välja att lämna det ursprungliga skalet eller helt enkelt använda denna mekanism för kloning.
- Robotgemenskap – robotar som kan interagera för att uppnå gemensamma intressen.
- Hybridrobot/agent – en robot som kan interagera med en eller flera mjukvaruagenter, eller en mjukvaruagent som kan interagera med en eller flera robotar. Det blir riktigt intressant när en gemenskap av robotar interagerar med en gemenskap av mjukvaruagenter! Observera också att en robot kan överföra sitt mjukvarustatus till en mjukvaruagent och sedan operera i cyberrymden SOM OM den vore en mjukvaruagent och sedan återlämna sin status tillbaka till roboten. En mjukvaruagent kan göra det motsatta: överföra sitt tillstånd till en fysisk robot, använda roboten och sedan returnera sitt tillstånd tillbaka till cyberrymden. En robot kan agera SOM OM den vore en programvaruagent med hjälp av fjärråtkomst. En programvaruagent kan också styra en fysisk robot direkt från cyberrymden, också med hjälp av fjärråtkomst. Faktum är att en enda mjukvaruagent (eller ett team av agenter) skulle kunna styra flera robotar på samma eller olika platser, och även kontrollera interaktionen mellan dessa robotar.
För en ännu tidigare syn på ämnet, se Stan Franklins och Art Graessers artikel ”Is it an Agent, or just a Program? A Taxonomy for Autonomous Agents.”
Se även Wikipediaartikeln om Software Agent.