egg-fu is a simulated Artificial Intelligence IRC script for use with Eggdrop with many options and features and high configurability, multi-language support, grammar checker, and now with theme support! Database support is up-coming.
Introduction to egg-fu
First of all, what IS egg-fu? egg-fu is an eggdrop script coded in Tcl designed to simulate artificial intelligence, and engage an IRC user in conversation. The program is not actually artificially intelligent, as it doesn't make it's own decisions or form it's own opinions, it simply imitates such behavior by listening to what people say in a channel and remembering key points and 'learning' new things to say in this manner. When a topic that egg-fu recognizes is brought up or a keyword is said, egg-fu will randomly pick a tid-bit of information it has learned about it and respond appropriately, according to your own configurations.
This is the main function of egg-fu. To learn and respond. However, egg-fu can be configured as a medium for storing and retrieving information only when prompted.
egg-fu was based on the infoegg bot (which is based on infobot). Info egg was designed such that it would learn by listening and only respond to questions. It's learning matrices were very simple. It was these, that egg-fu was modeled after, and greatly improved upon. egg-fu talks and reacts much more fluidly and intuitively than info egg and requires no prompting to respond, unless configured that way. Being able to respond to any line of text sent to a channel (provided it's a topic that egg-fu knows) makes it's speech appear more life-like. In addition to its own learning capacity, all the teaching methods (features) coded in allow you to tweak egg-fu's responses to give it an even more realistic personality.
What prompted me to create egg-fu was when I was idly tweaking the code in infoegg and fixing bugs. When I realized how much work I was putting into it, I decided to make my own. The code was at first loosely based on infoegg's code, but has since been coded out. However I still credit infoegg's author to the birth of egg-fu.
I hope you enjoy using egg-fu as much as I enjoy coding it. I'm always open to suggestions, criticism, and bug-reports. Have fun!
In case you downloaded egg-fu thinking it was a stand-alone program, you're wrong; egg-fu is a script for the Eggdrop IRC bot. You need to have an installed copy of Eggdrop to be able to run egg-fu.
How it learns
egg-fu will listen to all the channels in it's config until it hears a declaration such as "this IS that." This is what triggers egg-fu to remember something. If the keyword or topic already exists, or is similar enough to another topic, the rest of the statement is stored under that topic as an alternate response. So when egg-fu hears "pizza is good" and later hears "pizza is here!" it will know that pizza is 'good' and 'here' Therefore, when someone idly mentions pizza ("mmm I like pizza") egg-fu will respond with something like "Didn't you say pizza is here?" Each time egg-fu hears something new, or new information on an old topic, it will store that tid-bit in it's brain for future reference. There are many features coded into egg-fu that allow you to teach it special methods and types of responses, these will be explained in the advanced section.
What egg-fu does NOT learn from: statements that don't define anything as fact or opinion. An example is a statement such as "this sucks!" since egg-fu doesn't know what 'this' is. egg-fu will not associate any one statement with the previous statement, therefore egg-fu will not make the assosiation when you say "I hate my computer" followed by "It's too old." However, saying "My computer is too old" will trigger egg-fu to learn.
How it responds
Each line sent to a channel egg-fu is monitoring is processed and it will try to determine if the subject is anything it has learned about. I like to think of this as it's 'interest' in a subject. If it's 'interested' in the subject of the last statement, it will form a reply based on what facts and opinions it's accumulated so far. If the subject is too vague matching more than one other subject in it's memory, egg-fu will then try to pick the more accurate subject.
There are two factors that randomize the formation of the response. (1) is the number of tid-bits known about the subject in case. If there are more than one tid-bit known about 'pizza' for example, egg-fu will randomly select one of them. (2) is the sentence structure. The sentence structure responses are fully configurable, as will be explained later, and is randomly selected from your personalized list of possible structures. An example of a possible response to the subject "camaro" based on the default structures is "Well, someone said the 68 Camaro is really nice" or "Do you think the 68 Camaro is really nice?" As you can see, the subject egg-fu picked as "68 Camaro" even though it might also have heard about the 71 camaro, and the tid-bit was "really nice"
A key point, if you teach it "your website is nice" it will reply to "your website", "blah blah your website", "blah your website blah", and just "website", but NOT to "blah website". Make sense?
Also, in this version the bot will generalize ideas into one keyword, such as if you teach it "the meaning of life is to question the meaning of life" it will file "life is boring" under "the meaning of life". It's still in development...meaning it won't always be so vague, the reason for this is because I intend to expand the way egg-fu thinks about a topic, and even insert some sort of topic relation system, so when it learns "a rose is red" and "a fire-truck is red" it will (in theory) be able to also make the association that both a rose and a fire-truck are red. This method of 'thinking' is very difficult to emulate in AI.
By all means send me any questions or comments you may have about egg-fu's learning or response methods, I'm always open to new opinions and ideas.
You can find more information about how to configure it on the How-to.txt file inside the archive.
- Fixed "eggfu(chans)" and "eggfu(ignorelist)" errors.