lunes, 15 de mayo de 2017

MoMo: Mil maneras de decir lo mismo

Al hablar, tenemos una variedad infinita de maneras diferentes de expresar prácticamente la misma idea, lo cual con frecuencia supone todo un desafío cuando queremos crear un chat de conversación. Por ejemplo, imaginemos las siguientes frases que puede decir un usuario:
>Háblame del amor.
>¿Qué opinas del amor?
>¿Qué te parece el amor?
>¿Cuál es tu opinión sobre el amor?
>Quiero que me hables del amor.

Cinco maneras diferentes de, básicamente, interrogar a un bot sobre el amor. Dado que todas estas opciones solo comparten una palabra en común «amor», podemos pensar que basta con crear una regla sobre el amor. Por ejemplo,
amor Cuando el amor llega así de esa manera, uno no se da ni cuenta.

Esta regla saltará en todas las ocasiones anteriores, así que problema solucionado, ¿o no?

Lamentablemente la respuesta es que no necesariamente. Sí, la regla se activará en todos los casos anteriores, pero siempre que no haya una regla que tenga mayor prioridad.

Por tanto, surgirá un problema si se nos ocurre crear una regla como:
me hables del * No sé qué decir del *1.

La idea de la regla es buena. Aunque no sepa exactamente qué decir, el bot se está dando cuenta de que se le está preguntando sobre un tema y reconoce su ignorancia. El problema es que antes teníamos una regla que nos hubiera dado una respuesta bastante mejor cuando el usuario está interesado en cuestiones de amor, pero ha dejado de activarse porque la nueva regla tiene prioridad cuando el usuario dice cosas como:
>Quiero que me hables del amor.

A simple vista parece el típico caso en el que, al aumentar el número de reglas, disminuye la calidad de ciertas respuestas. Afortunadamente, con un poco de ingenio y un pequeño script, podemos crear un bot que aúne lo mejor de ambos mundos. Para ver cómo hacerlo, vamos a crear un bot con solo cinco líneas:
%id="xhello" Hola.
me hables del * $respuesta$%script="$especifica$=1;$respuesta$=getOutput(*1);if($especifica$==0){$respuesta$=No sé qué decir del *1.;}"
amor Cuando el amor llega así de esa manera, uno no se da ni cuenta.
* %script="$especifica$=0;"
%id="xnone" No sé que decir.

La magia de este pequeño bot se concentra en un par de scripts. Ahora vemos que cuando el usuario dice «Quiero que me hables del amor.» se ejecuta el siguiente script, que pasamos a comentar línea por línea:
$especifica$=1; 
Esta línea consiste sencillamente en una instrucción que establece una variable que utilizaremos a modo de baliza.
$respuesta$=getOutput(*1);
La instrucción getOutput() nos permite obtener una respuesta al texto que queramos. En este caso *1=amor, con lo que nos quitamos de encima todo el enunciado genérico del texto del usuario y nos quedamos con la palabra clave. El problema de este método es que el bot normalmente siempre encontrará una respuesta y, en el peor de los casos, mostrará el xnone, algo que no nos interesa.
Y aquí viene el truco, podemos ver que hay una regla que siempre se cumple y que consiste únicamente en un script.
script="$especifica$=0;"

Pues bien, si el bot encuentra una respuesta antes de esta regla, $especifica$ conservará el valor 1, pero si no la encuentra, tomará el valor 0. De esta manera, podemos dividir el archivo de reglas en dos partes: una con las reglas que preferimos a una respuesta genérica y otra con las que no.

if($especifica$==0){$respuesta$=No sé qué decir del *1.;}

Ahora lo único que queda por hacer es que si no hemos encontrado una respuesta que nos satisfaga, procederemos a mostrar una respuesta que al menos demuestre que hemos entendido la intención del usuario. De lo contrario, se mostrará la respuesta que se encontró en la instrucción anterior.

Una de las grandes ventajas de MoMo es que, gracias a las variables y las funciones, podemos modelar comportamientos mucho más inteligentes de lo permiten las reglas estáticas. Y no se necesitan complicados programas para ello. En el ejemplo anterior, hemos visto que bastan cuatro instrucciones y un par de variables para resolver un problema bastante complicado.

Esperamos que este tutorial os anime a comenzar a utilizar las funciones de script de MoMo y, si tenéis cualquier duda, será un placer atenderos bien a través de este blog o mediante nuestro foro sobre MoMo.

¡Feliz programación!

No hay comentarios:

Publicar un comentario