AIML
Visão geral
AIML é Artificial Intelligence Markup Language. É um padrão XML para a definição de chat bot respostas.
Bot Livre bots apoio AIML, mas baseiam-se na Auto e ter uma base de dados de conhecimento semelhante ao cérebro humano.
Sobre AIML
AIML define como um bot deve responder a uma pergunta, utilizando <pattern> <template>
elementos. Um modelo representa o usuário questão, e o modelo define o bot resposta.
O padrão e o modelo de elementos são agrupados em uma categoria de elemento, que podem ser agrupadas sob o tópico de elementos.
Lista de AIML tags de template
Tags |
Description |
<star index="N"/> |
Replaced with value of * in pattern (or Nth *). |
<that index="M,N"/> |
Replaced with value of bot's previous response (or Mth previous response, and N sentence of the response). |
<input index="N"/> |
Replaced with value of users's input (or Nth *). |
<thatstar index="N"/> |
Replaced with value of * in "that" (or Nth *). |
<topicstar index="N"/> |
Replaced with value of * in topic (or Nth *). |
<get name="XXX"/> |
Replaced by the value of the conversation specific variable. |
<bot name="XXX"/> |
Replaced by the value of the bot specific variable. |
<sr/> |
Short form for <srai><star/><srai> (replaced with response to value of * from pattern). |
<person2/> |
Converts the text (or <star/>) between 1st and 2nd person (I <-> he, etc.). |
<person/> |
Converts the text (or <star/>) between 1st and 3rd person (I <-> you, etc.). |
<gender/> |
Converts the text (or <star/>) between male and female (he <-> she). |
<date/> |
Replaced with the current date and time, a "format" attribute is also supported. |
<id/> |
Replaced by the client id. |
<size/> |
Replaced with the size of bot's memory. |
<version/> |
Replaced with the AI engine version. |
<uppercase> |
Converts the text to uppercase. |
<lowercase> |
Converts the text to lowercase. |
<formal> |
Converts all words in the text to be capitalized. |
<sentence> |
Converts the first word in the text to be capitalized. |
<condition name="X" value="Y"> |
Defines an "if" condition based on comparing the value of a variable to a pattern. |
<condition name="X"> |
Case statement. |
<condition> |
Multi-valued if/else statement. |
<random> |
Choose on of the nested <li> values at random. |
<li name="X" value="Y"> |
Used in random and condition tags. |
<li value="Y"> |
Used in random and condition tags. |
<li> |
Used in random and condition tags. |
<set name="XXX"> |
Set the value of a variable. |
<gossip> |
Logs the text. |
<srai> |
Recursively evaluates the text and replaces it with the response. |
<think> |
Evaluates the nested statements but does not output any result. |
<learn> |
Load external AIML file, this is not currently allowed. |
<system> |
Executes a OS command, this is not currently allowed. |
<javascript> |
Executes JavaScript code. |
<topic> |
Category topic tags can now be set on a category to make it easier to add categories to topics. |
<map> |
Maps tag to allow the lookup of the element value in a predefined mapping, returning the mapped value. |
<loop> |
Condition loops tag to loop a conditional statement. |
<var> |
Local variables attribute for variables scoped to a category. |
<sraix> |
Remote requests tag to make a remote request of another bot instance, or service. |
<normalize> and <denormalize> |
Normalization and denormalization tags to convert special character into words, and back again. |
<request> |
Request tag to return the user's previous input request. |
<response> |
Response tag to return the bot's previous response. |
<learn>, <learnf>, and <eval> |
Learning tags to dynamically train a bot with new responses. |
<explode> |
Explode tag to split a word into its characters. |
<oob> |
Mobile (out of band) tag to support client and mobile device commands. |
(<b>, <a>, <i>, <ul>, <ol>, <li>, <p>, <br>, <button>, <img>, <video>) |
Various HTML tags are also allowed. |
<self> |
Evaluate Self code (Bot Libre extension). |
Lista de AIML padrão de operadores
Tags |
Description |
* |
Matches one or more words. |
_ |
Matches one or more words, takes priority over all other words and wildcards, except $. |
^ |
Matches zero or more words. |
# |
Matches zero or more words, takes priority over all other words and wildcards, except $. |
$ |
Pattern priority marker to make a pattern word match highest priority. |
() |
Optional set of words (Bot Libre extension). |
[] |
Required set of words (Bot Libre extension). |
<set> |
Set tag to evaluate a pattern based on words defined in a predefined set. |
/ |
Regular expression pattern (Bot Libre extension). |
{} |
Self code (Bot Libre extension). |
Exemplos
Aqui é um simples "Hello World" AIML exemplo:
Este código fará o seu bot responder com 'Olá para você também' para a pergunta 'Olá Mundo'.
<aiml>
<category>
<pattern>HELLO WORLD</pattern>
<template>Hello to you too</template>
</category>
</aiml>
Aqui está uma simples curinga exemplo:
Este código fará o seu bot responder com 'Olá para você também' a qualquer pergunta que contenham a palavra "olá".
<aiml>
<category>
<pattern>* HELLO *</pattern>
<template>Hello to you too</template>
</category>
</aiml>
Aqui é uma piada 'que' exemplo:
Este código fará o seu bot contar uma piada.
<aiml>
<category>
<pattern>TELL ME A JOKE</pattern>
<template>Why did the chicken cross the road?</template>
</category>
<category>
<pattern>* WHY *</pattern>
<that>Why did the chicken cross the road?</that>
<template>To get to the other side.</template>
</category>
</aiml>
Aqui é um complexo modelo de exemplo:
Este código fará o seu bot responder à pergunta "você gosta de maçãs ou laranjas' com 'eu maçãs do amor e eu adoro laranjas".
<aiml>
<category>
<pattern>* OR *</pattern>
<template><srai><star/></srai> and <srai><star index="2"/></srai></template>
</category>
<category>
<pattern>DO YOU LIKE *</pattern>
<template>I love <star/></template>
</category>
</aiml>
^ e # Curingas
<category>
<pattern>^ aiml ^</pattern>
<template>AIML is cool.</template>
</category>
<category>
<pattern>^ chat bot^</pattern>
<template>Yes, I am a chat bot.</template>
</category>
$ Prioridade
<category>
<pattern># sex #</pattern>
<template>I'm not that kind of bot.</template>
</category>
<category>
<pattern>$what is your sex</pattern>
<template>I am female.</template>
</category>
() e [] Listas
<category>
<pattern>do [you u] (really) [like love luv lv] me</pattern>
<template>Yes, I love you.</template>
</category>
Expressões regulares
<category>
<pattern>my email is /.+\@.+\..+</pattern>
<template>That is a valid email</template>
</category>
Define
<category>
<pattern>I am <set>name</set></pattern>
<template>Pleased to meet you <star/>.</template>
</category>
<category>
<pattern><set>number</set> + <set>number</set></pattern>
<template><srai>addition <star/> <star index="2"/></srai></template>
</category>
AIML modelo para definir um conhecimento objeto do tipo:
<category>
<pattern>load animals</pattern>
<template>
<think>
<map name="meaning" value="dog">dog</map><map name="instantiation" value="animal"><map name="meaning">dog</map></map>
<map name="meaning" value="dog">doggy</map>
<map name="meaning" value="cat">cat</map><map name="instantiation" value="animal"><map name="meaning">cat</map></map>
</think>
</template>
</category>
Padrão de tags
<category>
<pattern><bot name="name"/></pattern>
<template>Yes, that's my name.</template>
</category>
<category>
<pattern>I am </pattern>
<template>That is my age too.</template>
</category>
<category>
<pattern></pattern>
<template>You are repeating yourself.</template>
</category>
<category>
<pattern><response/></pattern>
<template>Please don't repeat me.</template>
</category>
Atributos como Elementos
<category>
<pattern>My * is *</pattern>
<template>I will remember that your <star/> is <star index="2"/><think><set><name><star/></name><star index="2"/></set></think></template>
</category>
<category>
<pattern>What is my *</pattern>
<template>Your <star/> is <get><name><star/></name></get></template>
</category>
Mapas
<category>
<pattern>what is the capital of <set>country</set></pattern>
<template>The capital of <star/> in <map name="capital"><star/></map>.</template>
</category>
Bot Livre estende-se o
mapa de operação para permitir também a definição do mapa de valor. Isto irá definir o valor de uma relação entre o objeto de conhecimento.
<category>
<pattern>the opposite of * is *</pattern>
<template>Okay, the opposite of <star/> is <star index="2"/>.
<think><map name="opposite"><value><star index="2"/></value><star/></map></think>
</template>
</category>
<category>
<pattern>what is the opposite of *</pattern>
<template>the opposite of <star/> is <map name="opposite"><star/></map>
</template>
</category>
Loops e condições
<category>
<pattern>count down from <set>number</set></pattern>
<template>
<think><set var="count"><star/></set></think>
<condition var="count">
<li value="5"><think><set var="count">4</set></think>5 <loop/></li>
<li value="4"><think><set var="count">3</set></think>4 <loop/></li>
<li value="3"><think><set var="count">2</set></think>3 <loop/></li>
<li value="2"><think><set var="count">1</set></think>2 <loop/></li>
<li value="1"><think><set var="count">0</set></think>1 </li>
</condition>
</template>
</category>
<category>
<pattern>what is <set>number</set> + <set>number</set></pattern>
<template>
<think>
<set var="result"><star/></set>
<set var="count">0</set>
</think>
<condition var="count">
<li><value><star index="2"/></value></li>
<li>
<think>
<set var="result"><map name="word"><map name="next"><map name="meaning"><get var="result"/></map></map></map></set>
<set var="count"><map name="word"><map name="next"><map name="meaning"><get var="count"/></map></map></map></set>
</think>
<loop/>
</li>
</condition>
The answer is <get var="result"/>
</template>
</category>
Aprendizagem
<category>
<pattern>learn question * answer *</pattern>
<template>
<think>
<learn>
<category>
<pattern><eval><star/></eval></pattern>
<template><eval><star index="2"/></eval></template>
</category>
</learn>
</think>
Okay, I will answer "<star index="2"/>" to "<star/>" next time
</template>
</category>
<category>
<pattern>wrong</pattern>
<template>What should I have said?</template>
</category>
<category>
<pattern>*</pattern>
<that>what should I have said</that>
<template>
<think>
<learn>
<category>
<pattern><eval><input index="3"/></eval></pattern>
<template><eval><star/></eval></template>
</category>
</learn>
</think>
Okay, I will answer "<star/>" to "<input index="3"/>" next time
</template>
</category>
Sraix
<category>
<pattern>ask * about *</pattern>
<template><star/> says "<sraix default="Timeout or max anonymous API calls exceeded"><botname><star/></botname><star index="2"/></sraix>"</template>
</category>
<category>
<pattern>ask pandorabot * about *</pattern>
<template><star/> says "<sraix server="http://www.pandorabots.com" default="Timeout or max anonymous API calls exceeded"><botid><star/></botid><star index="2"/></sraix>"</template>
</category>
<category>
<pattern>ask pandorabot chomsky about *</pattern>
<template>He says "<sraix server="http://www.pandorabots.com" botid="b0dafd24ee35a477" default="Timeout or max anonymous API calls exceeded"><star/></sraix>"</template>
</category>
<category>
<pattern>wikidata *</pattern>
<template><sraix service="wikidata" default="Timeout or missing data"><star/></sraix>
</category>
<category>
<pattern>wikidata * hint *</pattern>
<template><sraix service="wikidata" default="Timeout or missing data"><hint><star index="2"/></hint><star/></sraix></template>
</category>
<category>
<pattern>wiktionary *</pattern>
<template><sraix service="wiktionary" default="Timeout or missing data"><star/></sraix></template>
</category>
Auto
<category>
<pattern>what is * + *</pattern>
<template><star index="1"/> + <star index="2"/> = <self>star + star</self></template>
</category>
Veja Também