Vous êtes sur la page 1sur 6

Chatterbots

Zbigniew Banach

Construimos nuestro propio bot

ada chatterbot consta de dos componentes bsicos: la base de conocimientos y el motor de tratamiento de estos datos. En este artculo vamos a conocer las bases del lenguaje AIML, elaborado para cubrir las necesidades del lenguaje que describe el conocimiento AIML, inventado para el proyecto de la inteligencia artificial ALICE. Este proyecto es la raz del funcionamiento de todos los bots que se basan en los xitos de este proyecto abierto. Vamos a crear un bot sencillo que saluda al usuario y da informaciones sobre la pgina web Software 2.0. Estos bots ganan cada vez ms popularidad en Internet. Vamos a servirnos de un motor preparado para tratar datos PyAIML escrito en Python, pero la base de datos creada en AIML se puede usar en cada bot que est conforme con el estndar ALICE (el listado de implementaciones gratis de ALICE para varios idiomas se encuentra en: http://www.alicebot.org/downloads). En el CD adjuntamos todo lo que es necesario para crear y arrancar nuestro bot que hable espaol; pues, A trabajar, botmasters!

Arranque rpido
En el artculo vamos a servirnos del motor de un bot elaborado dentro del proyecto PyAIML, escrito en Python. Para utilizarlo, hay que instalar un intrprete de Python (los usuarios de Linux probablemente ya lo tienen) y el mdulo PyAIML. En el CD adjuntamos ficheros de instalacin de Python y de PyAIML para Windows y para Linux. Basta con utilizar los instaladores Python-2.3.4.exe y PyAIML-0.8.3.win32.exe bajo Windows. Bajo Linux, a Python slo hay que agregar el mdulo PyAIML: descomprimimos el archivo PyAIML0.8.3.tar.gz y arrancamos el script setup.py con el comando python setup.py. Ahora los programas de Python, arrancados por nosotros, podrn utilizar la librera aiml que implementa el lenguaje AIML para Python. Almacenamos los programas en Python en ficheros con la extensin .py y arrancamos haciendo dos clicks o ejecutando, desde la lnea de comandos, el comando python nombre_fichero.py (con el supuesto de que el directorio principal de Python con el fichero python.exe se encuentre en la ruta del sistema). El cdigo completo del bot de ejemplo, descrito en este artculo se encuentra en el CD, en el fichero devbotES.py , y su base de conocimientos en el fichero devbotES.aiml. En el directorio standard se hallan unas bases estndar de la base de conocimientos AIML para ingls, y en el fichero standard.py .hay un script de ejemplo que los usa.

Rpidisima interfaz del bot

PyAIML es slo un motor de tratamiento AIML y no tiene una interfaz de usuario, pues antes de empezar a crear la base de conocimientos, vamos a escribir un script en Python, que cargar las enunciaciones del usuario y mostarar por pantalla las respuestas del bot. En el Listado 1 vemos un ejemplo de este tipo de script. Al principio, su funcionamiento comienza con la importacin de la librera aiml, despus se arranca un intrprete facilitado por la librera AIML y carga el fichero de conocimientos indicado (en nuestro caso es el fichero devbot.aiml). El funcionamiento del mismo bot se limita a descargar una cantidad ilimitada de bucles de enunciaciones del usuario y a escribir unas respuestas generadas por el mdulo aiml. Para terminar el trabajo del script en su forma actual, hay que presionar [Ctrl-C]. Ms tarde, vamos a centrarnos en este elemento de la interfaz; por ahora vamos a dedicarnos a la creacin del fichero AIML, o sea, la base de conocimientos de nuestro bot.

rada dentro de los marcadores <aiml></aiml>. En los marcadores <!--...--> colocamos los comentarios. En AIML son principalmente los marcadores <category> los que contienen el conocimiento. En los marcadores <pattern> hay modelos de enunciaciones de usuario y las respuestas de bot se encuentran en los marcadores <template>. El conocimiento del bot consta de unidades con la siguiente estructura:
<category> <pattern> <!-- modelo de enunciacin del usuario--> </pattern> <template> <!-- reaccin del bot al modelo --> </template> </category>

Preguntas y respuestas

AIML en su versin actual 1.0 est conforme con el estndar XML, de manera que la estructura del fichero AIML no sorprender a nadie que ha tenido que ver con XML o HTML. El fichero AIML es un fichero de texto que contiene marcadores con una estructura determinada: en la primera lnea se encuentra un prlogo estndar XML y el contenido del fichero idneo, es decir, la base de conocimientos de nuestro bot est cer-

El funcionamiento de AIML se basa en un modelo de impulso y de reaccin a este impulso (ing. stimulusresponse model). Vamos a ensear a nuestro bot a reaccionar a la bienvenida. Por eso, en los marcadores <pattern> escribimos HOLA, y en los marcadores <template> escribimos Buenos das. Hay que tener en cuenta dos cosas importantes: primero, en AIML hay

Artculo originalmente publicado en la revista Software 2.0 Extra! Ms detalles en la pgina web de la revista www.software20.org. Todos los derechos reservados. La reproduccin de completo o parcial de los artculos sin previa autorizacin de la editorial Software Sp. z o.o. est prohibida.

Listado 1. El script ms sencillo de soporte de bot


import aiml # arranca el intrprete AIML k = aiml.Kernel() # se carga el fichero de modelos k.learn("devbot.aiml") # bucle principal del programa while True: # se cargan enunciaciones del usuario user_input = raw_input("> ") # creacin de respuestas de bot answer = k.respond(user_input) # las respuestas se muestran por pantalla print answer

cribe una de las tres respuestas posibles de bienvenida. El Listado 3 presenta el cdigo de una base de conocimientos construida as. Desde luego, con esto no terminan los problemas con el saludo, ya que el usuario no siempre empieza a saludar con la palabra Hola. Por eso, deberamos instruir nuestro bot para que se enfrente tambin con otras posibilidades.

Muchos modelos en uno

que escribir el texto de modelos con maysculas, y segundo, nuestro motor de Python slo aguanta los caracteres bsicos del alfabeto romano, por eso, hay que evitar el uso de caracteres nacionales especficos. El Listado 2 presenta el contenido del fichero AIML creado de este modo. Si arrancamos el bot con este tipo de conocimiento, responder correctamente Buenos das a la enunciacin del usuario Hola, y a todas las dems preguntas responder con un comunicado estndar de PyAIML con informacin sobre error. Hay un problema, porque el bot reacciona slo a la enunciacin que corresponda exactamente al modelo (no hace caso a los tamaos de caracteres), as que genera el error si el usuario escribe, por ejemplo: Hola, Qu pasa?. Para resolver este problema, AIML hace posible el uso de smbolos ambigos * y _ , que aumentan la cantidad de funcionalidades de modelos. Para que nuestro bot reaccione con un saludo a una enunciacin que comience con la palabra Hola, tenemos que modificar nuestro modelo de modo siguiente:
<pattern>HOLA *</pattern>

Ahora, cuando escribamos Hola, amigo! o Cmo te va?, se generar la misma respuesta Buenos das. En la realidad, hay muchos modos de saludar, por eso, para que nuestro bot sea ms humano, agregamos cualquier saludo del grupo de varios saludos, en la categora de bienvenida. Para ello, nos servir el marcador <random> que muestra una de las enunciaciones que se encuentran dentro de sus lmites. Cada enunciacin est entre los marcadores <li></li>. Vamos a ampliar el contenido de nuestro marcador de respuestas con tres saludos posibles:
<template> <random> <li>Buenos das.</li> <li>Hola!</li> <li>Buenas!</li> </random> </template>

Uno de los rasgos ms tiles de AIML es la posibilidad de atribuir varios modelos a un modelo bsico. Esto posibilita tomar en consideracin de modo rpido y claro diferentes enunciaciones del usuario y atribuirlas a un significado bsico. Es exactamente lo que necesitamos, puesto que queremos que nuestro bot reaccione saludando del mismo modo a varias bienvenidas del usuario. Para esto sirve el marcador <srai> colocado dentro del marcador <template>. En este marcador indicamos el modelo al que hay que referirse. Ya tenemos un modelo bsico de reaccin al saludo HOLA (Listado 2) y tenemos un modelo ampliado HOLA* (Listado 3). Ahora, los juntamos sustituyendo las respuestas del modelo ampliado con revocacin al modelo bsico en el marcador <srai>. Adems, aadimos una reaccin del bot a la palabra Buenas y todas las enunciaciones que comiencen con esta palabra. En el Listado 4 vemos cdigos de estos modelos. Ahora, el bot va a interpretar cada enunciacin que empiece con Hola o Buenas del mismo modo, como si fuera una palabra Hola y va a reaccionar con un saludo seleccionado al azar. Lo importante es que el modelo bsico no tenga que contestar a una enunciacin real del usuario: puede tener un nombre significante para el botmaster (p.e. SALUDO) y servir slo para que otros modelos puedan referirse a l con ayuda del marcador <srai>. Es un rasgo caracterstico muy cmodo de AIML, que facilita bastante la creacin de bases de conocimientos y aumenta la claridad del cdigo. La estructura de revocaciones mediante los marcadores <srai> puede ser bastante compleja, lo que permite construir bases de conocimientos muy complicadas. Ya es hora de realizar la parte del trabajo ms difcil de cada botmaster: la previsin de las posibles enunciaciones del usuario. Cada bot bueno tiene que reaccionar razonablemente a cada enunciacin juiciosa del usuario, que es un reto serio para botmasters. Existen modos de solucionar situaciones en las que el bot no sabe qu decir; a continuacin, voy a describir estos modos. En la base del fichero de conocimientos devbot.aiml se agregan otros saludos posibles, ya que cada bot serio debera disponer de una mayor cantidad de posibles saludos y de reacciones a los saludos del usuario. Desde luego, un saludo no es todo, nuestro bot ante todo debe contestar a las preguntas de acuerdo con su destinacin original. El DevBot, incluido en el CD, Listado 2. Un modelo sencillo que reacciona al saludo
<?xml version="1.0" encoding="iso-8859-1"?> <aiml version="1.0"> <category> <pattern>HOLA</pattern> <template>Buenos das</template> </category> </aiml>

Vamos a resumir las funciones de nuestro bot descritas hasta ahora: reacciona a cada enunciacin que comience con la palabra Hola (aunque no reacciona a la palabra Hola sola), y es-

Artculo originalmente publicado en la revista Software 2.0 Extra! Ms detalles en la pgina web de la revista www.software20.org. Todos los derechos reservados. La reproduccin de completo o parcial de los artculos sin previa autorizacin de la editorial Software Sp. z o.o. est prohibida.

Chatterbots

contesta a un par de preguntas relativas a Software 2.0 y a su sitio web: os recomiendo ver el contenido del fichero devbot.aiml.

Variables, o sea, la memoria del bot

AIML facilita algo como variables en las que podemos, p.e. almacenar informaciones sobre el usuario. Dos marcadores: <set> y <get> sirven para el soporte de las variables. La sintaxis <set> es la siguiente:
<set name = "nombre_variable">valor_variable</set>

Para cargar el valor de la variable antes determinada, escribimos simplemente <get name = "nombre _ variable"/>. Normalmente, estos dos marcadores hacen que se muestre por pantalla el valor de la variable. Si no queremos que se muestren los valores devueltos por ellos u otros marcadores, tenemos que cerrarlos en los marcadores <think></think>: todo lo que se halle dentro de <think> sern "pensamientos interiores" del bot y no se imprimirn por pantalla. Por ejemplo, si queremos cargar el nombre del usuario en su enunciacin, y luego responder saludando con este nombre (dentro de un momento, vamos a ver cmo hacerlo), podemos utilizar el siguiente modelo de enunciacin:
<template> <think><set name="name"><star/></set></think> Buenas<get name="name"/>! </template>

en <pattern>. La Figura 1 ilustra la norma del funcionamiento de este mecanismo. Merece la pena observar que <that> verifica la ltima respuesta del bot, o sea, palabras concretas, y no el modelo segn el cual se respondi. Ahora aadimos la opcin de cargar el nombre del usuario y de responder saludando con este nombre. Ya hemos conocido el marcador <set>, que servir para recordar y escribir el nombre, y ahora tenemos que construir un contexto adecuado. Supongamos que el bot pregunte por el nombre en reaccin a la pregunta del usuario por su nombre. Vamos a utilizar dos formas de esta pregunta: Cmo te llamas? y Cul es tu nombre?. Al principio, vamos a construir los modelos adecuados:
<category> <pattern>CUL ES TU NOMBRE</pattern> <template>Me llamo DevBot. Y cul es tu nombre? </template> </category> <category> <pattern>* LLAMAS </pattern> <template><srai>CUL ES TU NOMBRE</srai></template> </category>

Ahora nos ocuparemos del contexto. Veamos que el bot responde a las dos preguntas del mismo modo, as que podemos verificar la respuesta. Agregamos el marcador <that> que comprueba si la ltima respuesta estuvo conforme con el modelo * TE LLAMAS (o sea, si es cualquier enunciacin que termine con las palabras te llamas):
<category> <pattern>*</pattern> <that>* TE LLAMAS</that> <template>Buenas<set name="name"><star/></set>!</template> </category>

Dentro de <template>, que corresponde al smbolo * en el modelo, colocamos el marcador <star/>. Supongamos que la enunciacin consta slo del nombre Hal: el cdigo descrito arriba provocar que se asigne Hal al valor de la variable name y, a continuacin, se cargar este valor y se lo emplear para escribir la respuesta Buenas Hal! Podemos escribir el mismo cdigo con ms concisin. En este caso no son necesarios los marcadores <think> y <get>, al mismo tiempo se guarda el nombre y se lo escribe en la pantalla:
<template> Buenas <set name="name"><star/></set>! </template>

Veamos los efectos que produce este fragmento. En cada enunciacin del usuario (en <pattern> indicamos slo una estrella, se puede escribir cualquier cosa); el bot verifica si su enunciacin anterior termin con las palabras te llamas: si es as, recuerda el nombre del usuario y escribe el comunicado del modo que ya hemos conocido. Listado 3. El modelo de bienvenida ampliado
<?xml version="1.0" encoding="iso-8859-1"?> <aiml version="1.0"> <category> <pattern>HOLA *</pattern> <template> <random> <li>Buenos das.</li> <li>Hola!</li> <li>Buenas!</li> </random> </template> </category> </aiml>

Cmo llevar la conversacin

Por ahora, nuestro bot funciona nicamente a base de impulso-reaccin: recibe la enunciacin y reacciona a ella escribiendo una respuesta. Trata por separado cada intercambio de frases y no es posible trabar una conversacin, porque el bot no recuerda la respuesta anterior. Por suerte, en AIML disponemos de los marcadores <that> y <topic>, gracias a los que el bot puede reaccionar de modos distintos conforme con su ltima respuesta y en relacin con el tpico actual de la conversacin. El marcador <that>, puesto dentro de la categora, es un tipo de la instruccin condicional que permite contestar segn el modelo de <template>, slo en caso de que la respuesta anterior estuviera de acuerdo con el modelo indicado en <that>, y la respuesta del usuario estuviera con el modelo indicado

Artculo originalmente publicado en la revista Software 2.0 Extra! Ms detalles en la pgina web de la revista www.software20.org. Todos los derechos reservados. La reproduccin de completo o parcial de los artculos sin previa autorizacin de la editorial Software Sp. z o.o. est prohibida.

Recordar el tema

Cada botmaster tiene que conformarse con que nunca podr prever todas las preguntas del usuario en todos los contextos: el lenguaje natural ofrece simplemente demasiadas posibilidades. Nos ayuda el marcador del tema de la conversacin <topic>, junto con una variable del sistema que le acompaa, que tiene el mismo nombre. Si se indica la variable topic y el bot no es capaz de contestar a la enunciacin del usuario, busca un bloque adecuado <topic> y carga la respuesta de este bloque. Vemoslo en el ejemplo del saludo. A menudo el saludo entre la gente no termina slo con un intercambio de saludos, sino que le acompaa una corta conversacin de cortesa, p.e. sobre la salud o sobre el tiempo. Incluimos estas opciones en nuestro bot, indicando el tema del saludo como: SALUDO y agregando el bloque <topic> responsable de este tema. Si el bot se despista despus del saludo con una enunciacin que desconozca, podr ayudarse con las respuestas del bloque <topic>. Al principio, aadimos en el saludo HOLA un fragmento que indique el valor de la variable topic adecuado:
<category> <pattern>HOLA</pattern> <template> <think><set name="topic">SALUDO</set></think> <random>

Bots en la Red
El sitio web Pandorabots (http://www.pandorabots.com) es una iniciativa interesante que facilita un hosting gratuito de bots e interfaz destinada a la creacin, entrenamiento y modificacin de bots a travs de un navegador de Internet. Despus de crear una cuenta y entrar en el sistema, tenemos la oportunidad de construir desde el principio un bot, o de cargar nuestros ficheros o ficheros AIML. Desde el nivel de la interfaz de botmaster, podemos fcilmente determinar unos rasgos generales, por ejemplo, sexo o nombre y de instruirle a travs de una conversacin guiada. El sitio es gratuito y bien documentado y, por lo general, para construir y entrenar el bot no es necesario conocer AIML (aunque desde luego es posible introducir modificaciones manualmente). El bot ya construido se puede presentar en una pgina web o conectar a un canal IRC seleccionado o a Instant Messenger: hay varias posibilidades.

<li>Buenos das!</li> <li>Buenas!</li> <li>Hola!</li> </random> </template> </category>

Listado 4. El modelo bsico de bienvenida y la revocacin a l


<?xml version="1.0" encoding="iso-8859-1"?> <aiml version="1.0"> <category> <pattern>HOLA</pattern> <template> <random> <li>Buenos das.</li> <li>Hola!</li> <li>Buenas!</li> </random> </template> </category> <category> <pattern>HOLA *</pattern> <template><srai>HOLA</srai></template> </category> <category> <pattern>BUENAS</pattern> <template><srai>HOLA</srai></template> </category> <category> <pattern>BUENAS *</pattern> <template><srai>HOLA</srai></template> </category> </aiml>

Ahora en un espacio libre escribimos el bloque <topic> que corresponda al tema del saludo (lo ms fcil es colocarlo justo detrs de los modelos del saludo):
<topic name="SALUDO"> <category> <pattern>*</pattern> <template> <random> <li>Qu tal?</li> <li>Cmo vas de salud?</li> <li>Pues, en qu puedo ayudarte?</li> </random> </template> </category> </topic>

Como podemos observar, es una categora normal con la sintaxis que ya hemos conocido, que escribe una respuesta al azar a todas las preguntas del usuario. La diferencia consiste en que est cerrada en el bloque <topic>. Para entrar en este bloque hay que cumplir la condicin de que el bot no podr responder a la pregunta con ayuda de modelos disponibles, y el valor de la variable topic se cuadrar con SALUDO. Ya hemos conocido los marcadores ms importantes y los mecanismos de AIML, ahora incluiremos todo en una sola base de conocimientos: los fundamentos del posterior desarrollo del bot (Listado 5). El fichero devbot.aiml incluye el ejemplo del desarrollo de la base de conocimientos. Aparte de los marcadores que conocemos, hay un marcador condicional <condition> que permite decidir sobre el funcionamiento posterior del bot, conforme con la autenticidad de la condicin examinada. A continuacin, vamos a hablar brevemente de su funcionamiento en el ejemplo del modelo que verifica si en un contexto determinado el usuario quiere obtener in-

Artculo originalmente publicado en la revista Software 2.0 Extra! Ms detalles en la pgina web de la revista www.software20.org. Todos los derechos reservados. La reproduccin de completo o parcial de los artculos sin previa autorizacin de la editorial Software Sp. z o.o. est prohibida.

Chatterbots

Listado 5. Base de conocimientos con todos los mecanismos conocidos


<?xml version="1.0" encoding="iso-8859-1"?> <aiml version="1.0"> </category> <category> <pattern>HOLA</pattern> <template> <think><set name="topic">SALUDO</set></think> <random> <li>Buenos das!</li> <li>Buenas!</li> <li>Hola!</li> </random> </template> </category> <category> <pattern>HOLA *</pattern> <template><srai>HOLA</srai></template> </category> <category> <pattern>BUENAS</pattern> <template><srai>HOLA</srai></template> </category> <category> <pattern>BUENAS *</pattern> <template><srai>HOLA</srai></template> </category> <category> <pattern>CUL ES TU NOMBRE</pattern> </aiml> <topic name="SALUDO"> <category> <pattern>*</pattern> <template> <random> <li>Qu tal?</li> <li>Cmo vas de salud?</li> <li>Pues, en qu puedo ayudarte?</li> </random> </template> </category> </topic> </category> <category> <pattern>* LLAMAS</pattern> <template><srai>CUL ES TU NOMBRE</srai></template> </category> <category> <pattern>*</pattern> <that>* ES TU NOMBRE</that> <template>Buenas<set name="name"><star/></set>!</ template> <template>Me llamo DevBot. Y t, Cmo te llamas?</ template>

formacin sobre Software 2.0 o sobre Software Extra. Supongamos que con el tema de conversacin indicado en SOFTWARE o SOFTWARE EXTRA , el bot pregunta si al locutor le gust el nmero anterior, y el usuario responde que s. Ahora, el bot hace una pregunta que empieza con palabras Qu te gust ms en el nmero anterior?, y segn el tema actual de la conversacin se agrega la terminacin de esta pregunta. El cdigo utilizado en esta situacin es el siguiente:
<category> <pattern>S</pattern>

<that>* NMERO ANTERIOR</that> <template>Qu te gust ms en el nmero anterior <condition name="topic"> <li value="SOFTWARE">Software 2.0</li> <li value="SOFTWARE EXTRA">Software 2.0 Extra</li> <li></li> </condition>? </template> </category>

En la Red
Proyecto ALICE http://www.alicebot.org Documentacin de AIML http://www.alicebot.org/documentation/aiml-reference.html Sitio para botmasters; tambin es posible construir los bots on-line http://www.pandorabots.com Proyecto PyAIML http://pyaiml.sourceforge.net Base de scripts AIML gratis http://www.aiml.info A-Z List of Chatterbots un listado grande de bots alcanzables en Internet http://www.angelfire.com/trek/amanda/botlist.htm

Despus de encontrar el marcador <condition name="topic">, el programa empieza a verificar si el valor de la variable topic equivale al valor indicado en el atributo value de los sucesivos marcadores <li>. Estos marcadores se procesan uno tras uno hasta encontrar un valor que encaje, que ocasiona la inscripcin del ttulo adecuado de la revista. Si, por cualquier razn, ningn valor cuadrase, se realiza el ltimo marcador, sin el atributo value. En nuestro caso este marcador queda vaco, por eso, despus de su realizacin, no escribir ningn comunicado.

Las ltimas modificaciones

Hemos construido una base de conocimientos que funciona y es universal (teniendo en cuenta su tamao reducido), pero el script, con el que la cargamos y probamos, est lejos de ser un script del chatterbot verdadero. Ningn botmaster puede perfeccionar su bot, si desconoce sus errores e imperfecciones, por eso, una funcin esencial de cada bot

10

Artculo originalmente publicado en la revista Software 2.0 Extra! Ms detalles en la pgina web de la revista www.software20.org. Todos los derechos reservados. La reproduccin de completo o parcial de los artculos sin previa autorizacin de la editorial Software Sp. z o.o. est prohibida.

consiste en el registro de conversaciones en diarios de conversaciones (logs). Nuestro DevBot de ejemplo tendr tres logs: el log de todas las conversaciones, el log de sugerencias de Lectores para la redaccin, y el ms importante para cada botmaster: el log de preguntas a las que el bot no contest. El log de sugerencias se escribe desde el nivel de la base de conocimientos con ayuda del marcador <system>, que facilita la realizacin del comando del sistema operativo indicado dentro de sus lmites. En nuestro caso, la categora siguiente realizar esta tarea:
<category> <pattern>*</pattern> <that>CULES TEMAS *</that> <template>Muchas gracias por las sugerencias, las voy a pasar a la redaccin. <system>echo <star/> >> suggestions.log</system> </template> </category>

Se ejecutar el contenido del marcador <system> en cuanto el usuario conteste a la pregunta que empiece con las palabras Cules temas. Entonces ejecutamos el comando del sistema echo, comn tanto para Windows como para Linux, que agrega la enunciacin del usuario en el fichero suggestions.log. Aqu vale la pena mencionar que, junto Listado 6. Cdigo completo del bot en Python
import aiml #arrancar el interprte AIML k = aiml.Kernel() #cargar ficheros de modelos k.learn("devbotES.aiml") # abrir/construir ficheros de logs conv_log = file("conversation.log","a",1) unknown_log = file("unknown.log","a",1) conv_log.write("-----------\n") # bucle principal del programa while True: #cargar enunciaciones de usuario user_input = raw_input("> ") if user_input == "quit": break # determinar respuestas answer = k.respond(user_input) # si respuesta est vaca (es decir desconocida) # escribimos pregunta en log de las desconocidas if answer == "": unknown_log.write(user_input+"\n")

Figura 1. Norma de funcionamiento del marcador <that> al <system>, AIML ofrece tambin otra posibilidad de comunicarse con el sistema exterior, es decir, el marcador <javascript> que es muy til a la hora de crear bots de soporte de sitios web. Vamos a usar los dos logs restantes con el cdigo del bot, con ayuda de operaciones estndar en los ficheros. Agregamos al script bsico una opcin de registro de todas las enunciaciones sucesivas en el fichero conversation.log y de registro de las preguntas a las que el bot no respondi en el fichero unknown.log. La ltima modificacin del cdigo del bot consiste en agregar la posibilidad de terminar la conversacin con el comando quit para que el usuario no tenga que cerrar el programa [Ctrl-C]. En el Listado 6 vemos el cdigo completo del bot.

Qu ms?

# registrar pregunta y respuesta en el log principal conv_log.write(user_input+" : "+answer+"\n") # escribir respuestas en la pantalla print answer # cerrar los ficheros de los logs conv_log.close() unknown_log.close()

Los ejemplos descritos en este artculo tienen como objetivo presentar las enormes posibilidades que ofrece AIML y animaros a construir vuestros propios bots: es una tarea fascinante a la que se dedica mucho tiempo. El bot que acabamos de crear no es muy universal y, para emplearlo en la prctica, tendramos que dedicarle mucho ms trabajo. Para examinar a fondo los secretos de AIML y los trucos de botmasters, son inestimables los ricos fondos de Internet. Las direcciones ms importantes las indicamos en el recuadro En la Red. Los bots se pueden emplear en la prctica (por ejemplo, para contestar a las preguntas ms frecuentes de clientes en los servicios de atencin al cliente), pero tambin se pueden crear slo con el objetivo de parecerse al hombre lo ms posible. Si consideramos que nuestro "protegido ya es muy bueno, podemos presentarlo en un concurso de chatterbots, descrito por Anna Meller en su artculo. La imaginacin y la determinacin del botmaster son los nicos lmites. Por eso, les animo a que construyan su propio bot: es una aventura magnfica. n

Artculo originalmente publicado en la revista Software 2.0 Extra! Ms detalles en la pgina web de la revista www.software20.org. Todos los derechos reservados. La reproduccin de completo o parcial de los artculos sin previa autorizacin de la editorial Software Sp. z o.o. est prohibida.

11

Vous aimerez peut-être aussi