(Tämä dokumentti on historiallista referenssiä varten – kirjoitin sen vuonna 2005 ja julkaisin sen nykyään lakkautetulla sivustollani osoitteessa http://agtivity.com/agdef.htm, mutta sillä pitäisi silti olla ainakin jonkin verran nykyistä relevanssia.)
Uudemman ajattelun löytämiseksi tästä aiheesta lue nämä uudemmat artikkelit:
- Mitä ovat autonomia ja toimijuus?
- Älykkäät entiteetit: Principals, Agents, and Assistants
- What Is an Intelligent Digital Assistant?
Ohjelmistoagentti (tai Autonominen agentti tai Älykäs agentti) on tietokoneohjelma, joka työskentelee kohti tavoitteita (erotuksena erillisistä tehtävistä) dynaamisessa ympäristössä (jossa muutos on normi) jonkin toisen entiteetin (ihmisen tai laskennallisen) puolesta, mahdollisesti pidemmän aikaa, ilman jatkuvaa suoraa seurantaa tai ohjausta, ja osoittaa huomattavaa joustavuutta ja jopa luovuutta tavassa, jolla se pyrkii muuttamaan tavoitteet toiminnalliseksi toiminnallisiksi tehtäviksi.
Ohjelmistoagenttijärjestelmä (tai moniagenttijärjestelmä (MAS)) on laskentaympäristö (kuten verkko tai grid-laskentaympäristön päällekkäisverkko), jossa yksittäiset ohjelmistoagentit ovat vuorovaikutuksessa toistensa kanssa, joskus yhteistoiminnallisella tavalla, joskus kilpailullisella tavalla ja joskus itsenäisesti pyrkien saavuttamaan yksilöllisiä päämääriään, käyttämään ympäristön resursseja ja palveluita ja toisinaan tuottamaan tuloksia ohjelmistoagentit käynnistäneille yhteisöille.
Yksinkertaisempi ja jäsennellympi määritelmä on sanoa, että ohjelmistoagentti on tietokoneohjelma, jolla on agenttitoiminnan tai ohjelmistotoiminnan piirteitä.
Toinen entiteetti voi olla ihminen, perinteinen, ”perinteinen” tietokoneohjelma, robotti tai toinen ohjelmistoagentti. Ohjelmistoagentti on samanlainen kuin robotti, mutta se toimii kyberavaruudessa, tietokoneverkossa.
Ohjelmistoagentti on itsenäinen tai ainakin puoliksi itsenäinen, mikä tarkoittaa, että se voi suorittaa tehtäviä päämäärän saavuttamiseksi ilman suoraa ohjausta tai suoraa valvontaa , mutta se voi olla vuorovaikutuksessa toisen entiteetin kanssa saadakseen ohjausta tai saadakseen tuloksia. Sillä voi olla tai ei voi olla käyttöliittymää.
Ohjelmistoagentti voi itse asiassa olla vuorovaikutteinen tai keskusteleva, jolloin se toimii jonkin toisen tahon puolesta, joka ei ole suoraan näkyvissä agentin kanssa vuorovaikutuksessa olevalle ”käyttäjälle”. Tämä olisi suora analogia sille, miten reaalimaailman agentit toimivat.
Ohjelmistoagentti saattaa tarvita korkeaa ”älykkyystasoa” selviytyäkseen dynaamisessa ympäristössä, jossa odottamattomuus on normaalia. Mutta on myös mahdollista, että on olemassa ”tyhmä” ohjelmistoagentti, joka toimii itsenäisesti suorittaakseen hyvin määritellyt tehtävät ja pyytää valvontaa vain silloin, kun se havaitsee odottamattomia olosuhteita.
Ohjelmistoagentti voi olla ”liikkuva” ja liikkua tai olla siirrettävissä ympäri verkkoa, mutta ohjelmistoagentti voi olla myös ”staattinen” ja tehdä kaiken työnsä verkon yhdellä isäntäkoneella, mukaan lukien pääsy resursseihin, jotka ovat muilla isäntäkoneilla kuin sillä isäntäkoneella, jolla agentti suoritetaan.
Vuorovaikutteinen tai keskustelunomainen agentti voi itse asiassa olla pelkkä ”assistentti”, joka on suorassa valvonnassa ja saman käyttäjän puolesta. Tämä olisi vähemmän autonominen toimintatapa, mutta vuorovaikutteinen agentti voitaisiin mahdollisesti ohjata lähtemään ja saavuttamaan jokin tavoite ja toimimaan autonomisessa tilassa sitä tehdessään. Kysymys ”agenttitoiminnasta” liittyy lähinnä siihen, missä määrin käyttäjän ja agentin välisen muunnoksen ja väitetyn agentin suorittamien tehtävien välillä EI ole yksiselitteistä suhdetta. Avustaja tekee juuri niin kuin käsketään. Agentille annetaan tavoite, ja sillä on joustavuutta sen suhteen, miten se saavuttaa tämän tavoitteen.
Agentti voi olla yksittäinen agentti (yksi agentti, joka tekee erilaisia tehtäviä tavoitteen saavuttamiseksi), osa agenttikokoonpanoa (suhteellisen pieni tiimi, jossa tiimin jäsenet ovat erikoistuneet) tai hyvin pieni osa agenttiarmadaa (suuri määrä agentteja, joilla on huomattava määrä rinnakkaisuutta jopa tietyissä tehtävissä). Jopa yksittäinen agentti voi olla vuorovaikutuksessa muiden agenttien kanssa, jotka ovat vastuussa jollekin muulle kokonaisuudelle. Agenttikokoonpanon ja agenttiarmadan erottaa toisistaan se, että ne ovat vastuussa yhdelle kokonaisuudelle.
Voidaan puhua agenttiyhteisöstä tai ohjelmistoagenttien yhteisöstä tai moniagenttijärjestelmästä, jossa monet itsenäiset agentit ainakin näyttävät tekevän yhteistyötä (ja/tai kilpailevan) yhteisten tavoitteiden saavuttamiseksi. Yhteisö voi olla rajattu ennalta suunniteltuihin jäseniin, tai se voi olla avoin ja sallia mielivaltaisten, ulkopuolisten agenttien ”liittyä” avoimeen ohjelmistoagenttiyhteisöön.
Ohjelmistoagentti voi toimia ikuisesti tai loputtomiin ja pyrkiä jatkuvasti tavoitteisiinsa, mutta on myös mahdollista, että agentti-instanssi lopettaa toimintansa, kun sen tavoitteet on saavutettu tai sitä ei enää tarvita.
Ominaisuuksia, jotka usein mainitaan sopiviksi ohjelmistoagenteille, ovat: reaktiivinen, harkitseva, tavoitteellinen, mukautuva, itsenäinen, oppiva, kommunikatiivinen, kilpailullinen ja yhteistoiminnallinen käyttäytyminen.
Ohjelmistoagentit (ja ohjelmistoagenttijärjestelmät) olisi suunniteltava käyttäen modulaarista arkkitehtuuria.
Ohjelmistoagenteissa on kyse seuraavasta evoluutio-askeleesta objektien ja ohjelmien jälkeen. Objektit ovat yleensä passiivisia ja vain yksi objekti on aktiivinen kerrallaan, ja objektit ovat yleensä ”piilossa” ohjelmien sisällä. Ohjelmilla on taipumus olla suhteellisen staattisia, eikä sellaisen hajautetun laskennan suunnittelu, jossa on määrittelemätön määrä yhteistyössä toimivia ohjelmia, ole helppo tehtävä. Ohjelmistoagentit tarjoavat mahdollisuuksia rinnakkaisuuteen ja ohjelmien väliseen yhteistyöhön, ja vieläpä suuressa mittakaavassa, ja tehdä se helposti ja kestävällä, luotettavalla, joustavalla ja turvallisella tavalla.
Keskustelua kysymyksistä, jotka liittyvät sen määrittelyyn, mitä agentti on tai ei ole, löydät täältä.
Ohjelmistoagenttien muodot
Koska ohjelmistoagentille ei ole olemassa tiukkaa määritelmää, tässä ovat tähän mennessä tunnistamani ohjelmistoagenttien eri muodot:
- Järjestelmäagentti – jatkuvasti käynnissä oleva taustatehtävä tai -duunari, jolla on tyypillisesti erikoistunut, valmiiksi ohjelmoitu käyttötarkoitus…
- Käyttäjäagentti – hienostuneen verkon sovelluksen käyttöliittymä asiakkaan puolella. Esimerkiksi WWW-selain World Wide Webin käyttöä varten.
- Asiakasagentti – palvelinpohjaisen sovelluksen, kuten hakukoneen tai kauppojen etsimisen, asiakaspuolen käyttöliittymä. Palvelinpuolella suoritetaan yleensä vain tietokantahaku tietokannasta, jota ylläpidetään itsenäisesti jonkinlaisella webcrawlerilla, joka tarkkailee verkkosivujen muutoksia.
- Web Crawler – palvelinpohjainen ohjelma, joka skannaa jatkuvasti tai säännöllisesti verkkoa tai sen valittuja osia etsien kiinnostavaa tietoa. Tämä ei oikeastaan ole agentti, koska se ei toimi erillisen käyttäjän puolesta, mutta se kerää tietoa, jota voidaan käyttää laajalle käyttäjäjoukolle.
- Keskusteluagentti – Vuorovaikutteinen ohjelma, joka esittää hyvin käyttäjäystävällisen käyttöliittymän ja suorittaa sitten tiettyjä tehtäviä käyttäjän ohjeiden mukaan. Koska se vastaa suoraan käyttäjän pyyntöihin, se ei todellakaan toimi itsenäisesti.
- Älykäs agentti – ohjelma, joka suorittaa tehtävän tai tavoittelee tavoitteita minimaalisella erityisellä ohjauksella käyttäen älykkäitä tai heuristisia tekniikoita siten, että käyttäjä on hyvin vaikuttunut siitä, että tietokone voi olla niin älykäs. Älykkään agentin ei tarvitse olla liikkuva, koska verkossa olevaa laajaa tietomäärää voidaan käyttää etänä.
- Liikkuva agentti – itsenäinen ohjelma, joka liikkuu isäntäjärjestelmien välillä tavoitellessaan yhtä tai useampaa tavoitetta. MA:n ei tarvitse olla todella älykäs, mutta sen on oltava riittävän joustava selviytyäkseen ympäristössä, jossa asiat voivat muuttua tai olla milloin tahansa saavuttamattomissa.
- (Suljettu) moniagenttijärjestelmä – tiukasti integroitu sovellusympäristö, jossa osia sovelluksesta on jaettu mini-ohjelmille, jotka pyrkivät osatavoitteisiin.
- Avoin moniagenttijärjestelmä (Open Multi-Agent System) – löyhästi integroitu, hajautettu sovellusympäristö, jossa itsenäisesti rakennetut ohjelmat (agentit) voivat osallistua strukturoituun vuorovaikutukseen, jossa agenteilla on merkittävässä määrin yhteisiä intressejä (yhteisö).
- Perimmäinen ohjelmisto-agentti (Ultimate Software Agent) – äärimmäisen älykäs ja joustava ohjelma, joka voi toimia pitkälti samalla tavalla kuin oikea ihminen, mutta joka on rajoitettu kyberavaruuteen. Lisäksi USA:lla on kyky jakaa itsensä dynaamisesti aliagentteihin, jotka voivat suorittaa osatehtäviä ja toimia rinnakkain missä tahansa määrin vuorovaikutuksessa. USA voi myös kloonata itsensä (tai mieluiten agentti-infrastruktuuri kloonaa sen automaattisesti) hyödyntääkseen verkon luontaista rinnakkaisuutta. Jaetut tai kloonatut aliagentit voidaan yhdistää uudelleen missä tahansa vaiheessa, mikä on tarkoituksenmukaista joko kokonaisagentin toiminnan tai suorituskyvyn kannalta. USA voi olla vuorovaikutuksessa myös muiden, itsenäisten USA:iden kanssa (USA:iden yhteisö), joista USA:lla ei ole ennalta ohjelmoitua tietoisuutta. Voidaan käyttää monenlaisia ohjelmointikieliä, toteutustekniikoita ja viestintäprotokollia. Jokainen USA on täysin yhteentoimiva kaikkien muiden USA:iden kanssa, ainoastaan hallinnollisen valvonnan ja resurssirajoitusten puitteissa.
- Robotti – älykäs ohjelmistoagentti, joka liikkuu reaalimaailmassa. Robotit eivät nykyään voi kloonata itseään, mutta teoriassa robotti VOI fyysisesti rakentaa itsestään kopioita TAI ostaa tai vuokrata ”tyhjiä” (tai kuorellisia) robotteja (ala autonvuokraus). Teoriassa robotti voisi ”kuljettaa” itsensä toiseen paikkaan yksinkertaisesti hankkimalla tyhjän kuoren toisesta paikasta ja ”ladata” sitten ohjelmistotilansa tuohon toiseen ”tyhjään” robottiin. Robotti voi halutessaan tyhjentää alkuperäisen kuoren tai käyttää tätä mekanismia kloonaukseen.
- Robottiyhteisö – robotit, jotka voivat olla vuorovaikutuksessa yhteisten etujen saavuttamiseksi.
- Hybridirobotti/agentti – robotti, joka voi olla vuorovaikutuksessa yhden tai useamman ohjelmisto-agentin kanssa, tai ohjelmistoagentti, joka voi olla vuorovaikutuksessa yhden tai useamman robotin kanssa. Asiat muuttuvat todella mielenkiintoisiksi, kun robottien yhteisö on vuorovaikutuksessa ohjelmistoagenttien yhteisön kanssa! Huomaa myös, että robotti voi siirtää ohjelmistotilansa ohjelmistoagentille ja toimia kyberavaruudessa ikään kuin se olisi ohjelmistoagentti ja sitten PALAUTTAA tilansa takaisin robotille. Ohjelmistoagentti voisi tehdä päinvastoin: siirtää tilansa fyysiseen robottiin, käyttää robottia ja palauttaa sitten tilansa takaisin kyberavaruuteen. Robotti voi toimia ikään kuin se olisi ohjelmistoagentti etäkäyttöä käyttäen. Ohjelmistoagentti voi myös käyttää fyysistä robottia suoraan kyberavaruudesta, myös etäkäyttöä käyttäen. Itse asiassa yksi ohjelmistoagentti (tai agenttiryhmä) voisi käyttää useita robotteja samassa tai eri paikoissa, mukaan lukien näiden robottien vuorovaikutuksen ohjaaminen.
Vielä varhaisemmasta näkemyksestä aiheeseen ks. Stan Franklinin ja Art Graesserin artikkeli ”Is it an Agent, or just a Program?”: A Taxonomy for Autonomous Agents.”
Katso myös Wikipedian artikkeli Software Agent.