¿Cómo se crea un bot con MoMo?


Para hablar con un usuario, un bot creado con MoMo consulta una tabla con dos columnas: en una aparecen todas las cosas que puede decir un usuario y, en la otra, lo que le responderá el bot. Por ejemplo, imaginemos que esta tabla es la siguiente:

UsuarioBot
Hola¿Cómo estás?
AdiósMe alegro de haber hablado contigo.
¿Cómo te llamas?Me llamo Martín.
Según este ejemplo, si el usuario dice Hola el bot le responderá ¿Cómo estás?, si el usuario dice Adiós, el bot dirá Me alegro de haber hablado contigo., etc. Es decir, son una serie de reglas del tipo si el usuario dice X, el bot responde Y.

A partir de ahora, a cada una de estas convenciones las denominaremos reglas y de las dos partes que la forman, al texto que debe decir el usuario, lo llamaremos entrada y al texto con el que le responderá el bot, lo denominaremos salida.

Por comodidad, esta tabla podemos definirla en un archivo con formato XML donde cada una de las reglas tiene el siguiente aspecto:

<rule>
     <input>hola</input>
     <output>¿Cómo estás?</output>
</rule>
Esta regla sencillamente indica al bot que diga ¿Cómo estás? cuando el usuario diga Hola.

En busca de respuestas más interesantes

Aunque el sistema que acabamos de ver es muy sencillo, rápidamente aparecen un par de problemas:
  • Es muy aburrido que el bot responda exactamente siempre lo mismo.
  • El bot nunca parece tener en cuenta lo que le decimos.
Para solucionar el primer problema y que el bot no sea tan aburrido, podemos especificar varias salidas (respuestas), de manera que el bot responda la primera vez la primera, luego pase a la segunda, etc. Por ejemplo, podemos reescribir la regla anterior como:

<rule>
     <input>hola</input>
     <output>¿Cómo estás?</output>
     <output>Me alegro de verte.</output>
     <output>¿Cómo te encuentras?</output>
</rule>
De esta manera, la primera vez que el usuario diga Hola, el bot le preguntará ¿Cómo estás?, la segunda le dirá Me alegro de verte., etc.

Para solucionar el segundo problema y que el bot incluya en sus respuestas lo que le decimos, podemos utilizar comodines lo que, además, reduce el número de reglas que hay que escribir. Por ejemplo, veamos la siguiente regla:

<rule>
     <input>el <wildcard name="$color$"> es mi color favorito.</input>
     <output>¡Vaya!, el $color$ también es mi color favorito.</output>
</rule>
Solo con esta regla, si el usuario dice El verde es mi color favorito, el bot le responderá ¿¡Vaya!, el verde también es mi color favorito.. Si dice El azul es mi color favorito, el bot le responderá ¡Vaya!, el azul también es mi color favorito., etc. Diga lo que diga el usuario, el bot lo repetirá en su respuesta. Esta sencilla manera de tomar parte de las palabras del usuario para utilizarlas en la respuesta del bot consigue que la conversación con el bot sea mucho más interesante.

    Si conoces el formato AIML, te resultará útil saber que los elementos rule, input y output de esta especificación son similares a los elementos category, pattern y template de AIML. No obstante, ten en cuenta que hay grandes diferencias entre estas especificaciones.

Conclusión

Solo con los elementos que hemos visto aquí, reglas, entradas y salidas, es posible construir un bot que responda inteligentemente a un usuario. No obstante, estos conceptos básicos son solo el principio. MoMo ofrece gran cantidad de características que facilitan la creación de bots realmente inteligentes, capaces de seguir un hilo de conversación, almacenar recuerdos y relacionarlos con las palabras del usuario, por solo mencionar algunas de las posibilidades.

Para saber más

  • Consulta Reglas para ver cómo se organizan en detalle las reglas.
  • Consulta Entradas para ver todas las posibilidades de las entradas.
  • Consulta Salidas para ver todas las posibilidades de las salidas.


Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-ley 13/2012.
Si continúa navegando consideramos que acepta el uso de cookies. Aceptar | Más información