Home » » Principais comandos e estruturas II

Principais comandos e estruturas II

Para facilitar é possível criar as diversas categorias e apontar elas para uma única fonte de resposta.


Código de instruções em AIML

<category>
<pattern>oi</pattern>
<template><srai>saudacao</srai></template>
</category>

<category>
<pattern>e ai</pattern>
<template> <srai>saudacao</srai></template>
</category>

<category>
<pattern>tem alguém ai</pattern>
<template><srai>saudacao</srai></template>
</category>

Seqüência do diálogo



Usuário: oi

Robô: que bom, alguém para conversar

<category>
      <pattern>saudacao</pattern>
      <template>
        <random>
        <li>como vai</li>
        <li>que bom, alguém para conversar</li>
        <li>já estava me sentindo sozinho</li>
        <li>sobre o que vamos teclar</li>
        </random>
      </template>
</category>




Usuário: e ai

Robô: sobre o que vamos teclar


No exemplo acima o comando srai direciona para uma categoria específica onde ocorrerá a resposta do robô. Desta forma, se for necessário mudar alguma coisa ou adicionar mais respostas para escolha aleatória, basta mudar em um único lugar.

O comando <srai></srai> pode ser traduzido como a seguinte instrução: “Vá para categoria X”.

Com o uso do srai o programador economiza em tempo de inserção uma vez que reduz a quantidade de roteiros repetidos.



No caso de simuladores com muitos roteiros pode ocorrer uma diminuição do tempo de resposta do robô devido ao grande número de categorias que precisam ser consultadas.

Imagine um simulador com 20.000 simulações de entrada e saída de textos, ou seja, 20.000 categorias. Cada vez que um usuário digita um texto o interpretador precisará percorrer um grande número de categorias até encontrar o diálogo referente.

Isso pode fazer com que o interpretador fique lento e pouco funcional.

Uma forma de evitar este problema é trabalhar com tópicos específicos onde o interpretador possa identificar o assunto e ir direto para o tópico correspondente, sem precisar consultar todas as categorias existentes.

Código de instruções em AIML

<category>
  <pattern>Vamos falar sobre celulares</pattern>
  <template>
  Ok. O que lhe interessa nos <set name=”topic”>celulares</set>
  </template>
</category>

Seqüência do diálogo


Usuário: Vamos falar sobre celulares

Robô: Ok. O que lhe interessa nos celulares

<topic name=”celulares”>
<category>
  <pattern>eu gosto das telas por toque</pattern>
  <template>Não consigo usar, me faltam os desdos, hehehe.</template>
</category>
</topic>


Usuário: eu gosto das telas por toque

Robô: Não consigo usar, me faltam os desdos, hehehe

No exemplo acima o comando <set name=”topic”> </set>  redireciona o diálogo para dentro do tópico “celulares” e quando algo é digitado o interpretador procura primeiro dentro do tópico e se não encontrar, direciona a busca para os outros roteiros.

O comando <set name=”topic”> “X” </set> pode ser traduzido como a seguinte instrução:procure primeiro no tópico X” e o comando <topic name=”X”> </topic>  marcam o inicio e fim do tópico.

Com o uso de tópicos o programador além de organizar melhor os roteiros permite maior agilidade do interpretador.




Outro comando possível de aplicação consiste na técnica de decisões baseadas em certos critérios ou condições.

Código de instruções em AIML

<category>
<pattern>o que é *</pattern>
<template>
<think><set name="search">generico</set></think>
<srai>define <star/></srai>
</template>
</category>

<category>
<pattern>Defina o que é *</pattern>
<template>
<think><set name="search">capital</set></think>
<srai>define <star/></srai>
</template>
</category>
Seqüência do diálogo



Usuário: o que é banana

Robô: Eu não sei o que banana é.

<category>
<pattern>define *</pattern>
<template>
<condition>
<li name="search" value="generico">Eu não sei o que <star/> é.</li>
<li name="search" value="capital">Eu não sei definir o que é <star/>.</li>
</condition>
</template>
</category>





Usuário: Defina o que é capital

Robô: Eu não sei definir o que é capital


No exemplo acima o comando <set name=”x”> </set>  redireciona o diálogo para dentro de uma categoria com critérios para resposta. Quando algo é digitado o interpretador procura pela condição e responde conforme programado.

O uso de condições facilita nos casos onde se deseja criar um conjunto de respostas de forma compactada. Se expressão for X responda Y. com várias possibilidades em um único local ou categoria.  Este procedimento é pouco usado desta forma. Em geral se prefere a técnica de múltiplas excolhas com resposta aleatória.




Além dos comandos de comportamento também existem alguns marcadores que apresentam informações do sistema. Ideal para testes ou para respostas do tipo “qual a sua versão” ou “quantas categorias você possui”, etc.

Este tipo de pergunta pode ser respondido através de comandos específicos que apresentam na tela informações sobre o interpretador ou programação do chatterbot.

Código de instruções em AIML

<category>
<pattern>Que dia é hoje</pattern>
<template>
Hoje é <date/> possuo <size/>categorias e estou na versão <version/>
</template>
</category>



Seqüência do diálogo


Usuário: Que dia é hoje

Robô: Hoje é dia/mes/ano possuo X categorias e estou na versão X



O comando date apresenta a data na tela conforme configurado no computador ou servidor. Já o comando size mostra o total de categorias/roteiros que o interpretador possui e no comando version  é apresentado a versão do aplicativo, ou seja, o numero de modificações e inovações que ele teve.

No exemplo acima os comandos possuem apenas uma tag/marcador a barra no final indica que o comando inicia e termina dentro da mesma tag.




Todos os comandos observados neste capítulo são aceitos por padrão nos diversos interpretadores existentes. Cada interpretador pode apresentar além dos comandos padronizados, variações particularidades e comandos próprios.

 Após dominar a programação aiml é aconselhável ao programador verificar o manual especifico do interpretador escolhido para gerenciar o código aiml, desta forma, ajustes e um melhor aproveitamento podem ser adotados.

No entanto, o uso de comandos específicos de um determinado interpretador pode dificultar a portabilidade para outros interpretadores. Se o projeto do chatterbot necessitar de portabilidade, procure sempre trabalhar com os comandos padronizados e evite o uso de comandos particulares.

Antes de adotar um novo comando, verifique junto aos outros interpretadores se o mesmo é aceito ou se é apenas uma particularidade de determinado interpretador.

Com os comandos apresentados neste capítulo é possível desenvolver um robusto simulador de diálogo – Chatterbot.

Leia a sequencia deste conteúdo conforme abaixo:
01 - 02 - 03 - 04 - 05 - 06 - 07 - 08 - 09 - 10 - 11 - 12 - 13 - 14 - 15 - 16
BlogdoJSilva. Tecnologia do Blogger.