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
通信体系结构设计