Cómo construir su primer chatbot usando ChatScript

10-10-2018: artículo actualizado con la nueva URL del repositorio de github.

Los chatbots pueden ayudarlo a hacer las cosas bien dentro de las herramientas de chat como Facebook Messenger, Telegram Messenger, Slack, etc. Simplemente diga la palabra y su chatbot implementará su última versión o le pedirá una pizza.

Y hay una herramienta especial para crear chatbots que existe desde hace bastante tiempo. Se llama ChatScript. Y al igual que Slack, comenzó como una pequeña parte de un videojuego.

En 2009, Bruce Wilcox trabajaba como desarrollador de juegos e investigador de inteligencia artificial. Su esposa, Sue Wilcox, quería modelar personajes virtuales para sus juegos de ficción interactivos. Juntos, construyeron lo que finalmente se convirtió en ChatScript.

Este motor de procesamiento de lenguaje natural + plataforma de secuencia de comandos de flujo de diálogo ayudó a Bruce a ganar el premio Loebner AI en tres ocasiones.

Bruce todavía desarrolla y mantiene el proyecto hoy. Está escrito en C y C ++, y es de código abierto. De hecho, la versión 6.8 acaba de salir hace unas semanas.

ChatScript es uno de los pocos motores de chatbots NLProc de OPENSOURCE.

Profundicemos en los conceptos básicos de ChatScript y conozcamos a un chatbot llamado Harry.

Instalación de ChatScript

Algunos de estos pasos pueden ser un poco diferentes según el sistema operativo que esté utilizando. Estoy usando Linux . En realidad, no es necesario seguir estos pasos para disfrutar de este artículo si no lo desea. Solo sigue leyendo.

Paso 1: instale los componentes del sistema en su computadora local

En primer lugar, clone el repositorio de ChatScript GitHub:

$ git clone //github.com/ChatScript/ChatScript

Esto creará un directorio ChatScript, que contendrá estos subdirectorios:

$ cd ChatScript/$ ls -d1 */
BINARIES/DICT/DOCUMENTATION/LINUX/LIVEDATA/LOEBNERVS2010/LOGS/MAC/RAWDATA/REGRESS/SERVER BATCH FILES/SRC/SUBLIME TEXT EDITOR/TMP/TOPIC/USERS/VERIFY/VS2010/VS2015/WEBINTERFACE/
  • DOCUMENTATION contiene archivos de documentación wiki.
Por cierto, personalmente contribuí a actualizar toda la documentación original en formato de rebajas para que se pueda leer en línea y desde la línea de comandos durante el desarrollo.
  • RAWDATA contiene un subdirectorio para cada bot. De forma predeterminada, la plataforma viene con un bot predeterminado llamado Harry, que se encuentra en RAWDATA / HARRY.

Por cierto, recuerde configurar el ejecutable LinuxChatScript64:

$ chmod +x ChatScript/BINARIES/LinuxChatScript64
Nota: obviamente aquí arriba estoy considerando el entorno del sistema operativo Linux.

Más información sobre la instalación de Linux, MacOS o Windows aquí.

Paso 2: para ejecutar el motor CS en modo independiente:

$ BINARIES/LinuxChatScript64 local

Hacer funcionar el motor lanzará a Harry, con quien luego podremos hablar:

ChatScript EVSERVER Version 6.8 64 bit LINUX compiled Aug 16 2016 17:35:43 host=localParams: dict:720895 fact:800000 text:70000kb hash:50000 buffer:22x80kb cache:1x5000kb userfacts:100WordNet: dict=201350 fact=85710 stext=12703744 Jul26'16-21:58:46Build0: dict=67726 fact=130289 stext=1145656 Jul31'16-13:45:49 0Build1: dict=167 fact=15 stext=211304 Jul31'16-13:45:44 harryUsed 53MB: dict 269,244 (23693kb) hashdepth 18/1 fact 216,014 (8640kb) text 14183kb buffer (1760kb) cache (5000kb) POS: 918 (29kb)Free 79MB: dict 451,651 hash 924 fact 583,986 text 55,816KB
Enter user name: giorgio
HARRY: Welcome backgiorgio: > what is your name ?HARRY: My name is Harry.giorgio: > who is Bruce Wilcox?HARRY: Bruce Wilcox (born 1951) is an artificial intelligence programmer.giorgio: > ok, I have to goHARRY: Indeed.giorgio: > :quitExiting ChatScript via Quit$

Paso 3: codifique y depure sus scripts de chatbot

El modo independiente lo convierte en un excelente entorno de desarrollo de ChatScript. Le permite ejecutar conversaciones interactivas y luego interactuar con ellas usando : comandos . Este es un conjunto especial de herramientas de comando interactivas para probar y depurar sus cuadros de diálogo durante la fase de desarrollo y depuración.

Aquí hay algunos comandos de ejemplo:

# recompile the bot Harry and reset the status of conversations with user giorgio
giorgio: > :build Harry giorgio: > :reset
# request statistics about topic ~pets
giorgio: > :topicstats ~pets ~pets gambits 2 responders 2 rejoinders 5 empties 0Concepts 1860 Topics 1 rules 9 empties 0 gambits 2 responders 2 (?: 2 s: 0 u: 0) rejoinders 5
# conversation ...
giorgio: > do you like snakes?HARRY: I love pythons except ^"Python" (the programming language)
# ask the reason why a rule fired
giorgio: > :why~pets.2.0.5.9.0 ?: ( <> ) I love pythons except Python ( the programming language ) via ~control.5.9.0 u: ( ) $$currenttopic = %topic ^if 00m( %response 0 ) 00I{ ^nofail ( TOPIC ^rejoinder ( ) ...

Tenga en cuenta que puede ejecutar : comandos para mostrar la lista completa de comandos disponibles.

Los temas están contenidos en archivos específicos. Por ejemplo, el código de tema ~ pets está contenido en el archivo pets.top , que se ve así:

topic: ~pets (dog cat pet animal bird fish snake)
?: ( <> ) I love pythons except ^"Python" (the programming language)
?: ( <> ) I love all animals.
t: Do you have any pets? #! yes a: ( ~yes ) Great. You like animals.
#! no a: ( ~no ) You don’t like animals?
#! I have two parrots a: ( parrots ) Birds are nice.
#! I have a cat a: ( cat ) I prefer dogs
#! I have a canary a: ( [parrot bird canary finch swallow] ) Birds are nice.
t: I have a dog.

ChatScript is a rule-based engine, where rules are created by humans writers in program scripts through a process called dialog flow scripting. These use a scripting metalanguage (simply called a “script”) as their source code.

Here what a ChatScript script file looks like:

## file: food.top#
topic: ~food []
#! I like spinachss: ( I like spinach ) Are you a fan of the Popeye cartoons?
a: ( ~yes ) I used to watch him as a child. Did you lust after Olive Oyl? b: ( ~no ) Me neither. She was too skinny. b: ( ~yes ) You probably like skinny models.
a: ( ~no ) What cartoons do you watch? b: ( none ) You lead a deprived life. b: ( Mickey Mouse ) The Disney icon.
#! I often eat chickenu: ( ![ not never rarely ] I * ~ingest * ~meat ) You eat meat.
u: ( !~negativeWords I * ~like * ~meat ) You like meat.
?: (do you eat _ [ ham eggs bacon]) I eat ‘_0
?: (do you like _* or _*) I don’t like ‘_0 so I guess that means I prefer ‘_1.
s: ( ~like ~fruit ![~animal _bear] ) Vegan, you too...
?: (do you eat _~meat) No, I hate _0.
s: ( I eat _*1 >) $food = ‘_0 I eat oysters.

You can define your bot’s dialog flows with a script stored as a normal text file. This is much simpler than methods that other chatbot tools use, which often involve browser-based user interfaces, JSON, or XML.

Writing your scripts as a text files gives you full control over your dialog flows. You a can easily process and upgrade your conversational code with back-end scripts and tools.

For example, you could automatically update ChatScript dialog rules based on records in your database.

Incluso podría utilizar herramientas de aprendizaje automático para extraer registros de conversaciones. Esto podría revelar todo tipo de oportunidades para mejorar los flujos de diálogo.

Pero estos son temas para un futuro artículo de ChatScript. Te dejo para que juegues con ChatScript por tu cuenta.

¡Contribuya a su base de código de fuente abierta y destaque en GitHub! ?????

ChatScript / ChatScript

Contribuya al desarrollo de ChatScript / ChatScript creando una cuenta en GitHub. github.com