KQML有三大獨(dú)立性:
1. KQML獨(dú)立于網(wǎng)絡(luò)傳輸機(jī)制(即TCP/IP,SMTP,IIOP等);
2. KQML獨(dú)立于內(nèi)容語言(即SQL,PROLOG等);
3. KQML獨(dú)立于內(nèi)容實(shí)體;
KQML消息的三層結(jié)構(gòu)如下:
�、賰�(nèi)容層: 在程序開發(fā)語言中,包含有消息的實(shí)際內(nèi)容,KQML支持ASCII碼語言和二進(jìn)制符號
�、谕ㄐ艑�: 實(shí)現(xiàn)消息特性,將低級的消息參數(shù),例如消息的傳送者和接受者,采用特定的標(biāo)識符
進(jìn)行標(biāo)識.
�、巯�: KQML的核心,其基本功能是標(biāo)識用以發(fā)送消息的協(xié)議,提供講話動作或執(zhí)行發(fā)送者
在內(nèi)容中附加的行為,另外,消息層還包括一些用以描述內(nèi)容層信息的可選部分,如語言,采用的術(shù)
語,通信主題描述符等,以便KQML對要傳遞的內(nèi)容進(jìn)行分析,路由和發(fā)送.
(一) KQML語言規(guī)范
KQML的核心是預(yù)先定義的行為詞(performative).采用 ASCII字符串表示的行為詞(performative)
具有可讀性好,方便程序分析(特別是對許多知識庫程序) ,可以在許多內(nèi)部應(yīng)用消息調(diào)用機(jī)制的平臺之間
傳遞等優(yōu)點(diǎn) .行為詞形式化定義如下:
::= ( { : } *)
::= | | | ( { } *)
::= *
::=''|''
::= | |, | ( { } *)
::="*"| # *"*
::= | - -
注意在上述定義中, 是特殊的 ;在定長字符串中, 如:# 3"abc,
雙引號前的數(shù)字表明雙引號后的字符串的長度.行為詞的一些參數(shù)是可選的, 在調(diào)用參數(shù)時(shí)在前面注明
關(guān)鍵字, 因此和參數(shù)順序無關(guān).
這些稱作參數(shù)名的關(guān)鍵字必須以冒號(:)開頭, 后面加上相應(yīng)的參數(shù)值.KQML使用了一些關(guān)鍵字作
為行為詞的參數(shù)名, 如下表一:
參數(shù)名 參數(shù)類型 含義
:sender 請求的真實(shí)發(fā)送者
:receiver 請求的真實(shí)接受者
:form 使用forward轉(zhuǎn)發(fā)請求時(shí) ,參數(shù)
content內(nèi)記錄的原始發(fā)送者
:to 使用 forward轉(zhuǎn)發(fā)請求時(shí) ,參數(shù)
content內(nèi)記錄的原始接收者
:reply-with- 此消息 (回應(yīng)消息)的標(biāo)記
:in-reply-to 使用 reply- with所回應(yīng)的前條消
息的標(biāo)記
:language 參數(shù) content中使用的語言名稱
:ontology 參數(shù) content中使用的實(shí)體集的
名稱
:content 實(shí)際傳遞的信息
表一 行為詞(performative)的參數(shù)含義
KQML語言具有可擴(kuò)展性, 針對不同應(yīng)用領(lǐng)域的MAS系統(tǒng), 可以自己定義新的行為詞,如register ,
recommend,advertise等等,只要這些行為詞(performative)仍然符合KQML規(guī)范并具有一定的實(shí)際功能
即可.
下面是一個(gè)KQML的消息實(shí)例:
Mark和 John分別是網(wǎng)絡(luò)上有協(xié)作關(guān)系的兩個(gè)節(jié)點(diǎn)的agent.Mark想知道中間人Annie的電話號碼.
Mark接口主體將這一請求發(fā)送給自身的任務(wù)主體.任務(wù)主體在本節(jié)點(diǎn)內(nèi)查詢,未能滿足請求時(shí),自動
將請求通過通信主體發(fā)送給所有存在協(xié)作關(guān)系的其它通信主體.其中,發(fā)送給 John的代碼如表二
(ask- one:
sender Mark
:receiver John
:language Prolog
:ontology person
:content "telephone(Annie,X)"
:reply- with id1 )
表二
在這一消息中ask-one是KQML的performative, 內(nèi)容為"telephone(Annie,X)",實(shí)體被標(biāo)記為
person,內(nèi)容描述語言為Prolog,發(fā)送者為Mark,接受者為John.John一種可能的應(yīng)答為表三所示:
(tell :
sender John
:receiver Mark
:language Prolog
:ontology person
:content"telephone(Annie,5586666)"
:in- reply- to id1 )
表三
這樣,tell成為KQML的performative,內(nèi)容為"telephone(Annie,5586666)",實(shí)體依然被標(biāo)
記為person,內(nèi)容描述語言為Prolong.Mark的請求被透明地完成了,而不必了解復(fù)雜的實(shí)現(xiàn)過
程
如前文所述,在每個(gè)基于 KQML會話的 MAS系統(tǒng)中, 至少有一個(gè)agent處在稱作管理服務(wù)機(jī)構(gòu)
的特殊地位,我們稱之為scheduler, 該agent能夠處理本系統(tǒng)中其他 agent請求的一些網(wǎng)絡(luò)通信服務(wù) ,
如:注冊/取消注冊 (register/unregister),轉(zhuǎn)交請求 (forward),推薦一個(gè)/或所有能夠解決某項(xiàng)請求的agent
(rec-ommend-one/recommend-all),招募一個(gè)/或所有的代理解決某項(xiàng)請求后將結(jié)果返回 (recruit-one/
recruit-all).其他agent向scheduler發(fā)出advertise消息告知自己愿意接受并能正確處理的信息 .實(shí)際
系統(tǒng)中也可加入一些限制條件, 如:此agent僅處理來自特定位置的請求等.對于一個(gè)由多個(gè)域組成的
MAS系統(tǒng)(一個(gè)schedulerr 對應(yīng)一個(gè)域) , agent之間可以通過scheduler通信, 也可以直接通信, 這就意
味著當(dāng)一個(gè)scheduler在自身接受的advertise中找不到某個(gè)請求相應(yīng)的回答時(shí), 將向其他scheduler發(fā)出
請求.KQML為agent之間以及agent與人之間提供了一種簡便而統(tǒng)一的方法來查詢,修改.