2 Sistema Tutores Inteligentes e Agentes
2.7 A Linguagem de Comunicação entre Agentes KQML e o Protocolo de Interação Mecanismo
2.7.2 A Linguagem de Comunicação entre Agentes KQML
Em meados da década de 90 foi fundada o Knowledge Sharing Effort (KSE) um consórcio entre empresas, universidades e centros de pesquisa com o propósito de prover uma padronização para a troca do conhecimento representado entre sistemas de informação autônomos [FIN1992], definindo uma linguagem de representação de conhecimento universal que pudesse servir como uma linguagem intermediária entre textos de diferentes linguagens e também prover a interação em tempo real entre sistemas para a troca de conteúdo. Assim, o KSE gerou dois protocolos, descritos a seguir:
Knowledge Interchange Format (KIF): é uma linguagem desenvolvida para servir como
uma CL, para realizar a representação do conhecimento sobre um modelo de domínio em particular. Considerado como um padrão para o intercâmbio de conhecimento entre diferentes sistemas. É utilizado como representação da parte do conteúdo de uma mensagem KQML.
Knowledge Query and Manipulation Language (KQML): é uma linguagem desenvolvida
como uma ACL para a comunicação entre agentes que possui um formato de mensagem, e contém um protocolo de gerenciamento de mensagens, baseado na teoria dos atos da fala.
Sua linguagem é composta por performativas3 que regem as interações entre os agentes,
considerado um dos protocolos de comunicação entre agentes mais difundidos no mundo dos SMA [FIN1992], [FIN1994a] e [FIN1994b].
A estrutura básica de uma mensagem KQML, representada pela Figura 7, é composta respectivamente pela performativa, o nome do agente remetente, o nome do agente destinatário, a linguagem empregada de comunicação, a sua ontologia e finalmente o conteúdo da informação na íntegra.
Figura 7 - Estrutura básica de uma mensagem KQML, extraído de [HUB2003].
Hübner [HUB2004] e Wooldridge [WOO1999] relatam as principais performativas da linguagem KQML agrupadas por categorias. Na descrição abaixo são representados dois agentes: S um agente que envia a mensagem (sender) e R um agente que recebe a mensagem (receiver).
Performativas de Informação
• tell: S informa a R que a natureza do conteúdo da mensagem enviada é verdadeira, ou seja, o conteúdo está na base de conhecimento de S.
• deny: S informa a R que a natureza do conteúdo da mensagem enviada não é verdadeira.
• untell: o conteúdo enviado não está na base de conhecimento de S.
Performativas de Consulta
• ask-if: S quer saber se o conteúdo desta mensagem é verdadeiro para R.
3
Performativas: referem-se à locução que indica uma determinada intenção. Neste contexto, trata-se da intenção de se comunicar do agente.
• ask-all: S deseja todas as instâncias da mensagem que são verdadeiras para S.
Respostas Básicas
• error: S indica a R que não recebeu a mensagem enviada anteriormente.
• sorry: S diz a R que compreende a sua mensagem, no entanto, não pode prover uma resposta satisfatória.
Performativas de Bases de Dados
• insert: S pede a R para acrescentar o conteúdo da mensagem na base de conhecimento de R.
• delete: S pede e R para remover o conteúdo da mensagem da base de conhecimento de R.
Definição de Capacidades
• advertise: S anuncia a R (facilitador) para que saiba que S pode e processará mensagens que está no conteúdo desta.
Performativas de Efetuação
• achieve: solicita que o conteúdo a ser processado da mensagem deve ser um valor verdadeiro.
• unachieve: requisição de reversão de um achieve enviado previamente.
Performativas de Rede
• register: S anuncia para R (facilitador) sua existência mediado pelo nome simbólico associado com seu endereço físico.
• unregister: requisita o cancelamento do register feito anteriormente. • transport-address: anuncia um novo endereço físico na rede.
• forward: comando de encaminhamento de uma mensagem para um outro agente através do campo “:to”.
• broadcast: S solicita a R enviar a mensagem a todos os agentes conhecidos de uma sociedade.
Performativas de Facilitação
• broker-one: S pede a R para executar o conteúdo desta mensagem, quando o conteúdo se tratar de uma expressão.
• recommend-one: S requisita a R (facilitador) para indicar um agente que possa processar o conteúdo da mensagem.
Ilustração de uso do protocolo KQML
Uma melhor compreensão sobre o uso do protocolo KQML pode ser obtida através do exemplo abaixo. O presente exemplo, ilustrado pela Figura 8, enfatiza as funções de anúncio de uma habilidade, envio e recebimento de mensagens KQML entre agentes. O exemplo emprega uma sociedade com três agentes que desempenham os seguintes papéis:
• Agente A (sender): anuncia uma habilidade ao facilitador.
• Agente B (facilitador): realiza o papel de facilitador da sociedade. • Agente C (receiver): requisita uma determinada tarefa à sociedade.
Figura 8 - Exemplo de uso do protocolo KQML.
Anúncio de uma habilidade ao agente B (Facilitador)
O agente A (sender) envia uma mensagem ao agente B (receiver), suposto facilitador, anunciando que pode processar mensagens do tipo especificado (somar), representado pelo
passo 1 da Figura 8. O conteúdo apresentado da mensagem refere-se a uma outra mensagem em KQML. Esta mensagem possui uma identificação para ser utilizada como tratamento da resposta, através do termo: reply-with id1, conforme apresentado abaixo.
(advertise :sender A :receiver B :reply-with id1 :language KQML :ontology kqml-ontology :content (ask-if :sender B :receiver A :language algebra :ontology matematica :content "somar(X,Y)"))
Consulta ao facilitador sobre um agente que possa atender à requisição
No trecho KQML em questão, o agente C requisita ao facilitador qual agente pode atender a sua requisição, passo 2 da Figura 8. Abaixo é apresentada a mensagem KQML enviada ao agente facilitador.
(recommend-one :sender C :receiver B :in-reply id2 :in-reply-to id1 :language algebra :ontology matematica :content "somar(X,Y)")
O facilitador (agente B) responde ao agente requisitante (agente C) enviando uma mensagem cujo conteúdo é a identificação do agente que pode atender a sua requisição, neste caso o agente A, passo 3 da Figura 8.
(tell :sender B :receiver C
:in-reply id3 :in-reply-to id2 :language algebra :ontology matematica :content "A")
Finalmente ocorre a interação entre os agentes C e A, passo 4 da Figura 8. O agente C envia uma mensagem que tem como conteúdo uma expressão matemática, ilustrado pela mensagem KQML abaixo. (tell :sender C :receiver A :in-reply id1000 :in-reply-to id1001 :language algebra :ontology matematica :content "somar(100,600)")
Efetivamente o agente A responde ao agente C enviando uma mensagem tendo como conteúdo o resultado do processamento, fim do ciclo de comunicação entre os agentes, passo 5. Apresentado abaixo.
(tell :sender A :receiver C :in-reply id1001 :language algebra :ontology matematica :content "700")