Juha Pallonen Ti N 36323S
jlp@niksula.hut.fi
KQML - Agenttien välinen kommunikointikieli
Agentti Itsenäisesti toimiva älykäs prosessi API Application Programmer Interface KQML Knowledge Query and Manipulation Language KRIL KQML Router Interface Library KSE Knowledge-Sharing Effort Ontologia Tapa esittää tietoa Performatiivi KQML viesti
Tietämysjärjestelmien rakentaminen edellyttää nykyään, että uusi tietämyskanta suunnitellaan alusta saakka eikä olemassa olevia järjestelmiä ole voitu käyttää uudelleen. Ei ole olemassa metodeja tietämyksen jakamiseen ja kommunikointiin, joten suuria hajautettuja tietämysjärjestelmiä ei ole juurikaan rakennettu.
Knowledge-Sharing effort on eri yhdysvaltalaisten valtion virastojen ja järjestöjen aloite kehittää tietämyksen jakamista itsenäisten järjestelmien välillä. KSE jakautuu neljään työryhmään:
· Interlingua - Miten toisen järjestelmän tietämys käännetään toisen järjestelmän ymmärtämälle kielelle.
· Knowledge Representation System Specification - Yhteisten määritelmien kehittäminen tietämyskieliperheille.
· External Interfaces - Ajonaikainen järjestelmien välinen kommunikointi. Tämän työryhmän työn tuloksena on syntynyt KQML.
· Shared, Reusable Knowledge Bases - Keskittyy lähinnä siihen, että järjestelmillä on yhteisymmärrys jaetun tietämyskannan sisällöstä.
3. KQML
3.1 Kommunikointiprotokollat
Agentit voivat vaihtaa tietoja monella eri protokollalla. Yksinkertaisin on,
kun asiakas lähettää palvelimelle kyselyn ja palvelin vastaa.
(ask-one
:content (PRICE IBM ?price)
:receiver stock-server
:language LPROLOG
:ontology NYSE-TICKS
:reply-with s1)
(reply
:content (PRICE IBM 10.15)
: receiver client1
:language LPROLOG
:ontology NYSE-TICKS
:in-reply-to s1)
Toinen tapa on, kun asiakas saa vastauksena kyselyynsä niin sanotun kahvan, jonka avulla asiakas pyytää vastauksen osia yksi kerrallaan.
(generator
:content (PRICE ?firm ?price)
:receiver stock-server
:language LPROLOG
:ontology NYSE-TICKS
:reply-with handle1)
(ready
:reply-with 2F0B
:in-reply-to handle1
:receiver client1)
(next
:in-reply-to 2F0B
:receiver stock-server)
(tell
:content (PRICE IBM 10.15)
: receiver client1
:language LPROLOG
:ontology NYSE-TICKS)
Vuoropuhelu loppuu, kun asiakas lähettää ilmoituksen, että se ei enää halua lisää vastauksia
(discard
:in-reply-to 2F0B
:receiver stock-server)
tai, kun palvelin ilmoittaa, että vastaukset ovat loppu
(eos
:in-reply-to 2F0B
:receiver client1)
Kolmas tapa on, että asiakas tilaa muutokset kyselyn tulokseen. Aina kun vastaus kyselyyn muuttuu, niin palvelin lähettää uuden vastauksen asiakkaalle. Alla olevassa esimerkissä asiakas saa aina uusimman IBM:n osakkeen hinnan. Jos tilaus koskisi kyselyä, joka kysyy jonkin asian totuutta, niin tällöin aiemmin kerrottu totuus peruutettaisiin käyttämällä performatiiviä untell.
(monitor
:content (PRICE IBM ?price ?time)
:receiver stock-server
:language LPROLOG
:ontology NYSE-TICKS
:reply-with s1)
(tell
:content (PRICE IBM 10.15 '05-17-95 13:35:13')
: receiver client1
:language LPROLOG
:ontology NYSE-TICKS
:in-reply-to s1)
Palvelin lopettaa vastauksien antamisen, kun asiakas näin haluaa
(discard
:in-reply-to s1
:receiver stock-server)
3.2 Protokollapino
KQML sanoma muodostuu kolmesta kerroksesta: sisältö- , sanoma- ja
viestintäkerroksesta. Sisältökerros on jotain tietämyksen
esittämiseen soveltuvaa kieltä esim. Prologia. Sanomakerros sen
ympärillä mm. kertoo mitä kieltä sisältö on ja
millaista toimintaa sisältö aiheuttaa. Viestintäkerros
lisää viestintään tarvittavat parametrit esim.
lähettäjän ja vastaanottajan sekä sen onko viestintä
synkronista vai asynkronista. KQML protokollapino on riippumaton siirtotavasta.
Siirtotapana voi olla esim. TCP/IP, email, http ym.
(package
:from ap001
:to ap002
:id DVL-f001-111791.10122291
:comm block
:content
(performative
:type query
:language LPROLOG
:content (PRICE IBM ?price)))
3.3 Reititinprosessi
Jokaisella agentilla on reititinprosessi. Reititin käsittelee kaikki
agentille tulevat ja agentilta lähtevät KQML sanomat. Jos
lähtevä KQML sanoma sisältää internet-osoitteen, niin
reititin lähettää sanoman sinne. Jos sanoma
sisältää palvelun nimen, mutta ei osoitetta, niin reititin
yrittää löytää palvelua vastaavan internet-osoitteen
ja lähettää sanoman sitten sinne. Viimeisenä vaihtoehtona
reititin voi lähettää sanoman edelleen niin sanotulle
välittäjälle.
3.4 Välittäjät
Jos reititin saa sanoman, joka on puutteellisesti osoitettu, niin se
käyttää apunaan agenttien luokkaa, joita kutsutaan
välittäjiksi. Välittäjä on agentti, joka on
erikoistunut kommunikointipalveluihin. Välittäjä pitää
rekisteriä palveluista, joita muut agentit tarjoavat ja
lähettää puutteellisesti osoitettuja sanomia eteenpäin.
Tyypillisesti jokaista paikallista agenttien ryhmää kohti on yksi
välittäjä. Paikallinen ryhmä tarkoittaa esimerkiksi
yliopistoa tai tiettyä projektia. Kun agentti käynnistyy sen reititin
ilmoittaa itsestään paikalliselle välittäjälle, joka
rekisteröi agentin. Kun agentti lopettaa toimintansa reititin ilmoittaa
tästä välittäjälle, joka poistaa agentin
rekisteristään. Tällä tavalla agentit
löytävät toisensa ilman, että jokaisessa agentissa
täytyy pitää käsin yllä listaa palveluista.
Jos A tietää, että B:llä on vastaus X:ään tietämyskannassaan, se voi lähettää kyselyn suoraan B:lle ja B lähettää sille vastauksen ilman, että välittäjän palveluita käytetään hyväksi.
B on mainostanut välittäjälle, että se osaa vastata X:ään. A pyytää välittäjää suosittelemaan agenttia, jolle se voi lähettää kyselyn. Välittäjä vastaa agentin B nimellä, jonka jälkeen A lähettää kyselyn B:lle ja saa vastauksen.
B on mainostanut välittäjälle, että se osaa vastata X:ään. A pyytää välittäjää värväämään jonkin agentin lähettämään vastauksen X:ään. Välittäjä lähettää kyselyn edelleen B:lle ja B vastaa A:lle.
B on mainostanut välittäjälle, että se osaa vastata X:ään. A lähettää välittäjälle kyselyn. Välittäjä lähettää B:lle kyselyn ja saa vastauksen siihen. Välittäjä lähettää vastauksen edelleen A:lle.
A tilaa välittäjältä muutokset X:n arvoon. Jos B lähettää uuden arvon X:ään välittäjälle, niin tämä lähettää sen edelleen A:lle.
Click here for Picture
3.5 KRIL
Koska reititin on erillinen prosessi, niin sen ja sovelluksen välissä täytyy olla ohjelmointirajapinta (API). Tätä kutsutaan KRIL:ksi (KQML Router Interface Library). Reitittimellä ei ole sanoman sisältökerroksesta tietoa, mutta KRIL on osa sovellusta, joten se pääsee käsittelemään sisältökerrosta.
KRIL:n tarkoitus on tehdä reitittimen käyttö ohjelmoijalle niin yksinkertaiseksi kuin mahdollista. Yksinkertaisimmillaan KRIL sisältää kaksi kirjastokutsua: send-kqml-message ottaa argumenteikseen sanomakerroksen ja niin paljon tietoa sanomasta ja sen vastaanottajasta kuin on saatavilla ja palauttaa vastauksen. Saapuvien sanomien vastaanottamiseksi ohjelmoija voi määrittää declare-message-handler funktion avulla, mitä funktiota pitää kutsua minkäkinlaisen sanoman saapuessa.
4. Yhteenveto
Edellä on kuvattu KQML:ää - kieltä ja protokollaa, jonka
avulla itsenäisesti toimivat älykkäät agentit voivat
kommunikoida keskenään ja jakaa tietämystä.
Tulevaiseuudessa KQML tai jokin hyvin sen tapainen on
välttämätön, kun suunnitellaan hajautettuja
itsenäisten agenttien toimintaan perustuvia järjestelmiä.
KQML kehittyy jatkuvasti, kun prototyypeistä saadaan palautetta ja niiden pohjalta kehitetään uusia ideoita. Parhaillaan standardit, joiden avulla voidaan jakaa objekteja yleistyvät. Jos esimerkiksi CORBA tai Microsoftin OLE 2.0 saavat yleisesti hyväksytyn aseman, niin yhtenä ajatuksena on sulauttaa KQML:n kehityksessä syntyneet ideat tällaiseen standardiin.
5. Kirjallisuusviitteet
[1] Neches: The knowledge sharing effort
[2] External Interfaces Working Group DARPA Knowledge Sharing Initiative: Specification of the KQML language
[3] The DARPA Knowledge Sharing Effort: Progress report
[4] Finin, Fritzson, McKay: A language and protocol to support intelligent agent interoperability
[5] Labrou, Finin: A semantics approach for KQML
[6] Finin, Fritzson, McKay, McEntire: KQML as an agent communication language
[7] Mayfiled, Labrou, Finin: Evaluation of KQML as an agent communication language
Viitteet löytyvät osoitteesta http://www.cs.umbc.edu/kqml/
6. Liitteet
6.1 Varatut performatiivien nimet
Basic Query evaluate the Sender wants the Receiver to simplify the sentence ask-if S wants to know if the sentence is in the R's Virtual Knowledge Base ask-about S wants all relevant sentences in the R's VKB ask-one S wants one of R's answers to a question ask-all S wants all of R's answers to a question Multi-response query stream-about multiple-response version of ask-about stream-all multiple-response version of ask-all eos end of a stream of answers to a query Response reply communicates an expected reply sorry S cannot provide a more informative reply Generic informational tell tell the sentence in the S's VKB achieve S wants R to do make something true of their environment cancel cancel a tell or achieve performative untell the sentence is not in the S's VKB unachieve S can't make something true of their environment Generator standby S wants R to be ready to respond to a performative ready S is ready to respond to R's previously-mentioned performative next S wants R's next response to R's previously-mentioned performative rest S wants R's remaining responses to R's previously-mentioned performative discard S will not want R's remaining responses to R's previously-mentioned performative generator abbreviation for standby with stream-all content Capability- definition advertise S is particularly suited to processing a performative subscribe S wants updates to R's response to a performative monitor S wants R's updates to R's response to a stream-all import S is willing to import queries or assertions to a remote site export S is willing to export queries or assertions from a remote site Networking register S can deliver performatives to some named agent unregister a deny of a register performative forward S wants R to route a performative broadcast S wants R to send a performative over all connections route S routes a performative to R