Mobile Agent
通信語言研究
***
(**大學網絡**實驗室,**
)
摘要:
作為
Agent
間通信的關鍵,
Agent
通信語言(
Agent Communication Language
,
ACL
)已經得到學術界和企業界的廣泛研究。本文分析了
ACL
的一些共同特征,并重點對
KQML
(
Knowledge Query and Management Language
)進行了分析。
關鍵詞:
移動
Agent
,互操作性,
ACL
,
KQML
1 引言
目前,多 Agent 系統 (Multi-agent Systems, MAS) 廣泛應用在如并行設計與制造、電子商務、語音識別、機器人控制、生產計劃與調度等不同領域中。多 Agent 系統內部( intra-MAS )或不同多 Agent 系統之間( inter-MASs )的各個異構 Agent 必須通過通信,實現知識與信息共享,才能進行交互和協商,進而分工合作解決復雜的異構性問題。因此, Agent 之間的互操作性 (interoperability) 是多 Agent 系統的核心,而 Agent 通信語言( Agent Communication Language, ACL )是實現 Agent 之間互操作性的基礎和關鍵。本文分析了 ACL 的一些共同特征,并重點分析了 KQML 。
2 相關理論或技術基礎
2.1
言語行為理論(Speech-act Theory)[1]
? 大部分 ACL 都基于言語行為理論。言語行為理論是關于人類通信交流的一種形式化 模型,其基本原理是關于人類通信交流的一種形式化模型,其基本原理是:說話者所說的話語不僅僅陳述一個事實,而且是說話者做出的帶有某種意圖的動作。一個言語行為( Speech act )有三類相關的動作:表達方式( Locution ):語法上慣用的話語;表達意圖( Illocution ):說話者傳遞給聽者的言語表達行為,包括語內行為力( illocutionary )和命題( proposition );表達效果( Per locution ):作為表達意圖的結果產生的效果。例如,“你不要打開機器”是個表達方式,傳達的“不要打開機器”是表達意圖,聽者接收到后不打開機器就是表達效果。一般地,一個言語行為代表一個 ACL 中所用到的消息類型( message type )。 Searle 根據語內行為力把消息類型分成五個部分:
斷定語( Assertives ):提供確定某件事情的信息(例如:機器開著);
指示語( Directives ):發送者發送導向性的消息給接收者(例如:打開機器);
承諾語( Commissives ):發送者表明將來完成某種動作(例如:我將打開機器);
許可語( Permissives ):允許接收者執行某種動作(例如:你可以開機器);
禁止語( Prohibitives ):禁止某些動作的執行(例如:你不能打開機器);
Singh 提出的社會代理思想中,補充增加了兩類消息類型,即:宣稱語( Declaratives ) - 說明某個事件,如,這臺機器命名為 A ;和表述語( Expressives ) - 表達感情和評價,如,我希望這臺機器是開著的。
消息類型的分類提供了一個能夠定義通信交流模式的結構,這樣, ACL 才能在此基礎上發展起來。 ACL 的通信原語( Primitive )是消息的核心,一般是類似“ tell ”,“ ask ”等的動詞。通信原語是 Agent 通信不可再分的“基本單元”。
3 Agent Communication Language
3.1 ACL
的基本框架
作為一種 Agent 通信語言,有其一定的規范框架,如圖 1 。兩個 Agent 進行交互通信時,需要傳輸層的傳輸協議(如 TCP/IP,HTTP,IIOP,SMTP )支持; ACL 本身位于邏輯層上,定義各個 Agent 能夠理解交流的消息類型和意思。
圖 1? ACL 的基本框架
一般的 ACL 規范框架包括消息的類型,消息格式,語義描述和內容語言等幾個部分,以及支持的共享本體和采用的交互協議。
消息類型:第一部分所述,目前認為 ACL 的消息類型有 7 種。 FIPA? ACL 和 KQML 的消息類型只屬于斷定語或者指示語。一般一個通信原語屬于一種消息類型。
消息格式:定義通信原語和消息參數(如發送者,接收者,消息 ID ,協議和內容語言等)。通信原語和消息參數的定義采用既定的語法,以此來表示消息是如何構架的。
語義描述:語義使 Agent 消息具有精確意思的基礎。
內容語言:內容語言是表達給定領域事實的語言工具,是理解 Agent 通信語言的概念框架,用來表述多個 Agent 用 ACL 進行交互過程中雙方能共同理解的信念、期望和意圖。
共享本體:共享本體定義一個對話領域的概念(通常用詞匯表示)和概念之間相互關系的規范。兩個 Agent 只有存在共享本體,才能解釋交互通信。共享本題是 Agent 通信語言的支撐。
交互協議:用來方便 Agent 通信的交互模式。
解碼器 / 編碼器:由于網絡阻塞, ACL 消息對象可能不能發送到遠處的平臺,這樣在通信的兩端可能需要解碼器 / 編碼器把 ACL 消息轉換成兩邊都能相互理解的字符串或者其他形式。
3.2 KQML?????????????????????????
3.2.1
KQML
的結構
[3]
KQML 語言可以定義為一種層次結構型的語言。 KQML 可以分為 3 個層次(如圖 2 所示),從里到外依次為內容層、消息層、通信層。內容層描述的是 agent 傳遞消息的真正內容,這些內容可以用實現 agent 的編程語言來表示。 KQML 可以采用任何形式的語言(無論是 ASCII 字符串還是二進制流)來描述,使得 KQML 的語言實現形式與內容層的含義無關,增強了異構 Agent 之間的交互性。
消息層是 KQML 結構中最為重要的部分,它確定 Agent 傳遞消息所使用的協議以及提供消息內涵所對應的行為原語,消息內涵對于 KQML 是完全透明的,因此消息層還包括對消息內涵的語言、采用的 ontology 的屬性的描述。
通訊層包括了一系列消息特征,描述了通訊底層參數,包括消息接收者和發送者的標識以及通訊相連的標識。
圖 2 KQML 的三個層次
3.2.2
KQML
的語法
KQML 的消息語法,采用類似 LISP 的語法描述,用一個通信原語開頭,緊跟參數名稱( parameter name )和參數值( parameter value )。如圖 3 所示是一般的 KQML 消息語法,圓括號的起始處為行為原語名稱,其余以冒號開頭的是 KQML 的保留關鍵字。
圖 3 KQML 的消息語法表述
每一條 KQML 消息被稱為一種行為原語( performative ),接收到 KQML 消息的 Agent 根據消息的類型產生不同的動作。但是 KQML 語言規范中并沒有對每一種語言表述都進行了嚴格的定義,因此這種語言規范仍需要不斷地擴充。而且由于 Agent 所應用的環境不同,它的語言表述的范圍也會根據環境的不同而有許多變化。原始的規范并不能滿足所有用戶的需求,因此可以根據實際需要建立一種擴展的 KQML 語言 [4] 。
3.2.3
KQML
的預留原語
常用的預留的行為原語通常可以被分為以下幾類 [4] :
1 )基本詢問原語(如 evaluate, ask-if, ask-in, ask-one, ask-all, ask-about )
2 )簡單詢問回答原語(如 reply, sorry )
3 )多重詢問回答原語(如 stream-in, stream-all )
4 )通信信息原語(如 tell, achieve, cancel, untell, unachieve )
5 )發生器原語(如 standby, ready, next, rest, discard, generator )
6 )能力定義原語(如 advertise, subscribe, monitor, import, export )
7 )網絡原語(如 register, unregister, forward, broadcast, route )
3.2.4
KQML
的語義
[3]
一個正確的語義有助于確切地定義該語言及其合適的用途。 T.Fini 采用 Speech Act 理論簡單地給出了 KQML 語義的形式化描述。 KQML 行為原語的語義通常包括如下六個部分:
1.?????? 行為原語直覺意義上的自然語言描述;
2.?????? 用于描述意會行為的邏輯表達式。實際上,這是自然語言的形式化表示;
3.?????? 用于表示 Agent 發送、接收和處理行為原語的必須狀態的前置條件;
4.?????? 用于表示發出行為原語后或收到行為原語后,還未回答的狀態的后置條件;
5.?????? 用于表示發送者的最終狀態(發送行為原語的意圖得到滿足)的完成條件;
6.?????? 任何有利于對行為原語理解的自然語言評論。
如果接收者有非空的前置條件,表明對此行為原語的響應是對建立其前置條件的行為原語的某種響應。但對收到發起對話的行為原語的接受者來說,前置條件是不需要的。在一次對話中,發送者的后置條件應該是消息接收者的前置條件的一個子集。當一條行為原語發出時,完成條件是其后置條件的一個子集,此類行為原語只要成功發出并被對方處理就完成了。
為了描述行為原語、前置條件、后置條件和完成條件,首先定義 Agent 的認知狀態(采用一階謂詞邏輯)如下:
1.?????? Bel Bel(A, P) 表示對 A 來說 P 為真,其中 P 是用 A 應用的語言寫成的表達式。也可以說 P 存在于 Agent A 的知識庫或虛擬知識庫 VKB 內。
2.?????? Know Know(A, P) 表示 A 認可 P 的知識狀態。
3.?????? Want Want(A, P) 表示 Agent A 期望用 P 描述的事件或狀態發生。
4.?????? Intent Intent(A, P) 表示 A 愿意做 P 。
例如行為原語 Ask-if(A, B, X) ,按上述介紹,其語義形式化描述如下:
1.?????? A 希望知道 B 關于 X 的真值狀態。
2.?????? Want(A, Know(A, Y)) 。其中 Y 可能是: Bel(B, Y), Bel(B, NOT(X)) 或 NOT(bel(B, X)) 。因此 Pre(A) 表示為 want(A, Know(A, bel(B, X))) 或 want(A, know(A, bel(B, NOT(X)))) 或 want(A, Know(A, NOT(bel(B, X)))) 。
3.?????? Pre(A) : want(A, know(A, Y)) 。 ( 也可包含條件 NOT(know(A,Y))) 。 Pre(B) :無。
4.?????? Post(A):intend(A, know(A, Y)) 。
5.?????? Completion(A) : Know(A, Y) 。
6.?????? NOT(bel(A, Y)) 與 bel(A, NOT(Y)) 是兩個不同的概念。(在某些特定的系統中是一樣的。)
4 結論及未來工作
每一條 KQML 消息被稱為一種表述,接收到 KQML 消息的 Agent 根據消息的類型產生不同的動作。但是 KQML 語言規范中并沒有對每一種語義表述都進行了嚴格的定義,這種語言規范仍可以被不斷擴充。而且由于 Agent 所應用的環境不同,它的語言表述的范圍也會根據環境的不同而有許多變化。原始的規范比不能滿足所有用戶的需求,可以結合實際進行擴展。
前段時間由于把研究的重點放在移動 Agent 平臺之間的互操作方面,后來發現需要對 ACL 有個理解。在接下來的兩周里,將著重對 KQML 、 FIPA-ACL 兩種主流通信語言,進行更深一步的研究,并閱讀相應的規范原文。
參考文獻
[1]??????????
王世進,周炳海,陶麗華,悉立峰
Agent
通信語言綜述。
[2]??????????
林和平,余元輝
基于
KQML
的移動
Agent
通信機制的分析。
[3]??????????
董紅梅
基于
XML
的
Agent
交互機制研究。
[4]??????????
羅健,王成良
基于
KQML
的
Agent
通信體系結構設計