更新时间:2024-01-02 09:16
KQML(Knowledge Query and Manipulation Language知识查询和处理语言)是一种基于消息的通信协议, 同时本身也是一种独立的信息交换和协议语言。
KQML有三大独立性:
1. KQML独立于网络传输机制(即TCP/IP,SMTP,IIOP等);
2. KQML独立于内容语言(即SQL,PROLOG等);
3. KQML独立于内容实体;
KQML消息的三层结构如下:
①内容层: 在程序开发语言中,包含有消息的实际内容,KQML支持ASCII码语言和二进制符号
②通信层: 实现消息特性,将低级的消息参数,例如消息的传送者和接受者,采用特定的标识符
进行标识.
③消息层: KQML的核心,其基本功能是标识用以发送消息的协议,提供讲话动作或执行发送者
在内容中附加的行为,另外,消息层还包括一些用以描述内容层信息的可选部分,如语言,采用的术
语,通信主题描述符等,以便KQML对要传递的内容进行分析,路由和发送.
(一) KQML语言规范
KQML的核心是预先定义的行为词(performative).采用 ASCII字符串表示的行为词(performative)
具有可读性好,方便程序分析(特别是对许多知识库程序) ,可以在许多内部应用消息调用机制的平台之间
传递等优点 .行为词形式化定义如下:
::= ( { : } *)
::= | | | ( { } *)
::= *
::=''|''
::= | |, | ( { } *)
注意在上述定义中, 是特殊的 ;在定长字符串中, 如:# 3abc,
双引号前的数字表明双引号后的字符串的长度.行为词的一些参数是可选的, 在调用参数时在前面注明
关键字, 因此和参数顺序无关.
这些称作参数名的关键字必须以冒号(:)开头, 后面加上相应的参数值.KQML使用了一些关键字作
为行为词的参数名, 如下表一:
参数名 参数类型 含义
:sender 请求的真实发送者
:receiver 请求的真实接受者
:form 使用forward转发请求时 ,参数
content内记录的原始发送者
:to 使用 forward转发请求时 ,参数
content内记录的原始接收者
:reply-with- 此消息 (回应消息)的标记
:in-reply-to 使用 reply- with所回应的前条消
息的标记
:language 参数 content中使用的语言名称
:ontology 参数 content中使用的实体集的
名称
:content 实际传递的信息
表一 行为词(performative)的参数含义
KQML语言具有可扩展性, 针对不同应用领域的MAS系统, 可以自己定义新的行为词,如register ,
recommend,advertise等等,只要这些行为词(performative)仍然符合KQML规范并具有一定的实际功能
即可.
下面是一个KQML的消息实例:
Mark和 John分别是网络上有协作关系的两个节点的agent.Mark想知道中间人Annie的电话号码.
Mark接口主体将这一请求发送给自身的任务主体.任务主体在本节点内查询,未能满足请求时,自动
将请求通过通信主体发送给所有存在协作关系的其它通信主体.其中,发送给 John的代码如表二
ask- one:
sender Mark
:receiver John
:language Prolog
:ontology person
:reply- with id1
表二
person,内容描述语言为Prolog,发送者为Mark,接受者为John.John一种可能的应答为表三所示:
tell :
sender John
:receiver Mark
:language Prolog
:ontology person
:in- reply- to id1
表三
记为person,内容描述语言为Prolong.Mark的请求被透明地完成了,而不必了解复杂的实现过
程
如前文所述,在每个基于 KQML会话的 MAS系统中, 至少有一个agent处在称作管理服务机构
的特殊地位,我们称之为scheduler, 该agent能够处理本系统中其他 agent请求的一些网络通信服务 ,
如:注册/取消注册 (register/unregister),转交请求 (forward),推荐一个/或所有能够解决某项请求的agent
(rec-ommend-one/recommend-all),招募一个/或所有的代理解决某项请求后将结果返回 (recruit-one/recruit-all).其他agent向scheduler发出advertise消息告知自己愿意接受并能正确处理的信息 .实际
系统中也可加入一些限制条件, 如:此agent仅处理来自特定位置的请求等.对于一个由多个域组成的
MAS系统(一个schedulerr 对应一个域) , agent之间可以通过scheduler通信, 也可以直接通信, 这就意
味着当一个scheduler在自身接受的advertise中找不到某个请求相应的回答时, 将向其他scheduler发出
请求.KQML为agent之间以及agent与人之间提供了一种简便而统一的方法来查询,修改.