Introducción al AIML

AIML quiere decir Artificial Intelligence Modelling Language, basado en XML y utilizado para crear aplicaciones inteligentes (bots) que pueden interactuar con humanos. En esta introducción veremos los componentes básicos de AIML con sus respectivos ejemplos.

Etiquetas de AIML

<aiml> Define el comienzo y término de un documento AIML.

<category> Define la unidad de conocimiento.

<pattern> Define el patrón que coincida con lo que el usuario puede haber ingresado.

<template> Define la respuesta del bot al texto ingresado por el usuario.

A continuación un ejemplo que incluye todas las etiquetas vistas:

<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
    <category>
        <pattern>HOLA</pattern>
        <template>¡Hola usuario!</template>
    </category>
</aiml>

En el ejemplo, si el usuario ingresa "Hola", el bot responde: "¡Hola usuario!".

<star> Etiqueta utilizada para coincidir con * en <pattern>. Se utiliza como <star index="n" /> para referirse a una posición distinta a la primera. Por ejemplo:

<category>
<pattern>MI * FAVORITO ES *</pattern>
<template>Tu <star /> favorito es <star index="2" /></template>
</category>

srai es una etiqueta que permite al bot llamar categorías de modo recurso después de transformar la entrada del usuario (reducción simbólica). Por ejemplo:

<category>
<pattern>HELLO GOOD DAY</pattern>
<template><srai>HOLA</template>
</category>

<category>
<pattern>BONJOUR</pattern>
<template><srai>HOLA</template>
</category>

<category>
<pattern>GUTEN TAG</pattern>
<template><srai>HOLA</srai></template>
</category>

<category>
<pattern>HOLA</pattern>
<template>¡Hola usuario!</template>
</category>  

random permite ser usado en conjunto con una lista de elementos para proveer un conjunto de potenciales respuestas por parte del bot, escogiéndose aleatoriamente una de ellas. Por ejemplo:

<category>
<pattern>HI</pattern>
<template>
  <random>
    <li>Hello!</li>
    <li>Well hello there.</li>
    <li>Howdy.</li>
    <li>Good day.</li>
    <li>Hi, friend.</li>
  </random>
</template>
</category>

set y get son etiquetas para trabajar con variables. Las variables pueden ser predefinidas o creadas por el programador. Por ejemplo:

<category>
<pattern>MI NOMBRE ES *</pattern>
<template>
  Mucho gusto, <set name="usuario"><star />.</set>
</template>
</category>

<category>
<pattern>CUAL ES MI NOMBRE</pattern>
<template>Tu nombre es <get name="usuario" />.</template>
</category>

En el ejemplo de más arriba, ante el ingreso del usuario de "Mi nombre es Juan", el bot responde "Mucho gusto, Juan". Luego, si el usuario pregunta "¿Cuál es mi nombre?", el bot responde "Tu nombre es Juan".

that se utiliza para responder en base a contexto.

<category>
<pattern>ME GUSTA EL CAFE</pattern>
<template>¿Usas azúcar o endulzante en tu café?</template>
</category>

<category>
<pattern>AZUCAR</pattern>
<that>USAS AZUCAR O ENDULZANTE EN TU CAFE</that>
<template>Yo también.</template>
</category>

<category>
<pattern>ENDULZANTE</pattern>
<that>USAS AZUCAR O ENDULZANTE EN TU CAFE</that>
<template>¿En serio? Yo no me preocupo de hacer dieta.</template>
</category>

<topic> es utilizado para almacenar un contexto, de modo que una conversación posterior pueda estar basada en ese contexto. Por ejemplo:

<category>
<pattern>HABLEMOS SOBRE *</pattern>
<template>
  OK, a mi gusta el <set name="topic"><star /></set>
</template>
</category>

<topic name="cine">

<category>
<pattern>ME GUSTAN LAS COMEDIAS</pattern>
<template>Yo prefiero las películas románticas</template>
</category>

</topic>

<topic name="teatro">

<category>
<pattern>ME GUSTAN LAS COMEDIAS</pattern>
<template>A mi también</template>
</category>

</topic>

En el ejemplo, la respuesta del bot a la afirmación "Me gustan las comedias" ingresada por el usuario, dependerá de si están hablando de cine o teatro.

<think> se utiliza para almacenar una variable sin notificar al usuario. Por ejemplo:

<category>
<pattern>MI NOMBRE ES *</pattern>
<template>
  <think><set name="nombre"><star /></set></think>
  Recordaré tu nombre
</template>
</category>

Por último, introducimos la etiqueta condition, que permite crear algo parecido a un IF-THEN-ELSE en programación. Por ejemplo, la respuesta a la pregunta del usuario va a depender del género de éste.

<category>
<pattern>COMO ME ENCUENTRAS</pattern>
<template>
  <condition name="genero">
    <li value="hombre">Te encuentro muy guapo.</li>
    <li value="mujer">Te encuentro muy linda.</li>
    <li>Eres una persona muy atractiva.</li>
  </condition>
</template>
</category>

En un próximo post seguiré con el resto de las etiquetas.