A fork of an Eliza bot implementation at https://github.com/mattshiel/eliza-go which will be the basis of derivatives such as alternative personalities
gremlin df329b157e Merge branch 'feature/Eliza-009-Dont-Repeat-Yourself' of gremlin/elizaservice into develop | пре 3 година | |
---|---|---|
bots | пре 3 година | |
eliza | пре 3 година | |
facades | пре 3 година | |
infrastructure | пре 3 година | |
templates | пре 3 година | |
web | пре 3 година | |
.gitignore | пре 3 година | |
LICENSE | пре 3 година | |
README.md | пре 3 година | |
go.mod | пре 3 година | |
go.sum | пре 3 година | |
main.go | пре 3 година | |
makefile | пре 3 година |
Assumes that Git and Go are installed along with the prerequisites. If not, they can be found from https://golang.org/dl/ and https://git-scm.com/downloads
1. Clone the Repository
> git clone https://git.riomhaire.com/gremlin/elizaservice.git
2. Change Directory to the Folder
Open the terminal/command line and navigate into the folder
eg. > cd elizaservice
2. Compile the Chatbot
> make
3. Run the Chatbot
To run the chatbot enter './' followed by the executable produced
For Mac/Linux:
> ./eliza-server
Alternatively:
> go run server.go
4. Open the localhost
Go to your browser and type:
> 127.0.0.1:8080
The primary design components that went into this project were as follows, a web server to serve a HTML as the root, Javascript to get the user input with ajax and finally all functionality and responses are contained in the eliza package.
To give Eliza the impression she was thinking Matthew implemented a delay to her responses, adding to this the delay will also randomise between 0.6 and 4 seconds per response.
Eliza crafts her responses by examining the user's text input for a keyword. When the keyword is found it goes through a pre-processing procedure. This includes things like transforming all letters to lower case and trimming unnecessary whitespace. After this the word is tested against keywords in the 'responses.go' file. If a regex group is matched, the program gets the first match, the matched group then makes up a fraction of the response for added realism. If Eliza does not find a match then there are a number of fallback default response she will chose from. All responses are chosen randomly.
A problem Matthew encountered with this method is that selecting answers from the map of responses may be slightly non-deterministic, and the map will be out of order. In Weizenbaum's original design of Eliza he used a method of decomposition where all keywords held a certain value or 'precedence number'. This weighted approach is definitely another approach I could have taken when designing my program and something I might change in the future.
This implementation of Eliza gave Matthew many ideas and provided Matthew with the main method of implementing Matthew Eliza functionality https://github.com/kennysong/goeliza
I consulted both the the Golang, Bootstrap and JQuery documentation frequently over the course of my assignment.