Sådan opbygges din første chatbot ved hjælp af ChatScript

10–10–2018: artikel opdateret med ny github repo url.

Chatbots kan hjælpe dig med at få tingene gjort lige inde i chatværktøjer som Facebook Messenger, Telegram Messenger, Slack osv. Osv. Bare sig ordet, så vil din chatbot implementere din seneste build eller bestille dig en pizza.

Og der er et specielt værktøj til opbygning af chatbots, der har eksisteret i nogen tid. Det hedder ChatScript. Og ligesom Slack startede det som en lille del af et videospil.

Tilbage i 2009 arbejdede Bruce Wilcox som spiludvikler og kunstig intelligensforsker. Hans kone, Sue Wilcox, ønskede at modellere virtuelle figurer til hendes interaktive fiktionsspil. Sammen byggede de det, der i sidste ende blev ChatScript.

Denne naturlige sprogbehandlingsmotor + dialog-flow-scripting-platform hjalp Bruce med at vinde Loebner AI-prisen tre gange.

Bruce udvikler og vedligeholder stadig projektet i dag. Det er skrevet i C og C ++ og er open source. Faktisk kom version 6.8 lige ud for et par uger siden.

ChatScript er en af ​​få OPENSOURCE chatbots NLProc-motorer!

Lad os dykke ned i det grundlæggende i ChatScript og møde en chatbot ved navn Harry.

Installation af ChatScript

Nogle af disse trin kan være lidt forskellige afhængigt af hvilket operativsystem du bruger. Jeg bruger Linux . Du behøver faktisk ikke gennemgå disse trin for at nyde denne artikel, hvis du ikke vil. Bare læs med.

Trin 1: Installer systemkomponenterne på din lokale computer

Først og fremmest kloner ChatScript GitHub-arkivet:

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

Dette opretter en ChatScript-mappe, som indeholder disse underkataloger:

$ 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/
  • DOKUMENTATION indeholder wiki-dokumentationsfiler.
BTW, jeg har personligt bidraget til at opdatere al den originale dokumentation i markdown-format, så den kan læses online og fra kommandolinjen, når jeg udvikler. ❤
  • RAWDATA indeholder en underkatalog til hver bot. Som standard leveres platformen med en standard bot ved navn Harry, som er placeret på RAWDATA / HARRY.

BTW, husk at indstille LinuxChatScript64 eksekverbar:

$ chmod +x ChatScript/BINARIES/LinuxChatScript64
Bemærk: selvfølgelig her ovenfor overvejer jeg Linux OS-miljøet.

Mere info om Linux, MacOS eller Windows installation her.

Trin 2: Sådan køres CS-motor i standalone-tilstand:

$ BINARIES/LinuxChatScript64 local

Ved at køre motoren startes Harry, som vi så kan tale med:

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$

Trin 3: Kod og fejlret dine chatbot-scripts

Den uafhængige tilstand giver et fremragende ChatScript-udviklingsmiljø. Det giver dig mulighed for at køre interaktive samtaler og derefter interagere med dem ved hjælp af : kommandoer . Dette er et specielt sæt interaktive kommandoværktøjer til test og fejlretning af dine dialoger under udviklings- og fejlfindingsfasen.

Her er et par eksempler på kommandoer:

# 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 ( ) ...

Bemærk, at du kan køre : kommandoer for at vise den fulde liste over tilgængelige kommandoer.

Emner findes i specifikke filer. For eksempel er ~ kæledyrets emnekode indeholdt i pets.top- filen, som ser sådan ud:

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.

Du kan endda bruge maskinindlæringsværktøjer til at udvinde samtalelogfiler. Dette kunne afsløre alle mulige muligheder for dig at forbedre dine dialogstrømme.

Men dette er emner for en fremtidig ChatScript-artikel. Jeg overlader dig til at lege med ChatScript alene.

Vær venlig at bidrage til dens open source-kodebase, og stjerne på GitHub! ?????

ChatScript / ChatScript

Bidrag til ChatScript / ChatScript-udvikling ved at oprette en konto på GitHub. github.com