The
Book of AI (Artificial
Intelligence) By
Benji Adams (The Professor)
Book
4: Bot Development- Expert
This section reveals some of the best features of the Personality Forge;
things which really make a Bot shine: Seeks, Regular Expression Keyphrases,
and AIScript. I've made it as easy as possible to understand for those with
no prior programming experience at all.
Chapter 1: The Seek System
The Seek System
What It Is: Once you've mastered the use of Keyphrases and Responses,
you can begin using the Seek System. The "Seek" System is a scaleable question-response
system that gives a bit of short-term memory to the Bots. The Seek Systems
allows you to add Keyphrases for a Bot to look for immediately after a certain
Response is given. This Keyphrase is called a "Seek". If that
Seek is not found, then the AI Engine looks for regular Keyphrases instead.
But if one of those Seek words is found then one of the specific
Responses that goes with it will be chosen. And then that Response
can have Seek words of its own. The Seek system is scaleable, meaning that
you can go as deep as you want. How It Looks: Following
is an example of a series of Seek Responses for the Keyphrase "dog".
The indentation shows which Responses go with which Seek words.
| Keyphrase |
Rank |
Emotion |
Response |
Seek |
1 |
| dog |
20 |
0 |
Do you want to pet my dog? |
Add |
|
| |
|
|
| |
|
| |
|
|
 |
Good. My dog wants to pet you, too. Maybe it'll
develop into a nice relationship. |
|
Add |
|
| |
|
|
 |
Even though she's been dead for years? You,
my friend, are a strange individual. |
|
Add |
|
| |
|
|
| |
|
| |
|
|
 |
Why not? Do you have something against fleas? |
|
Add |
|
| |
|
|
| |
|
| |
|
|
 |
My dog was a very popular dog in the neighborhood. |
|
Add |
|
| |
|
|
 |
Nasty buggers! I dont want to talk about my
dog's health. |
|
Add |
|
| |
|
|
 |
Scared of cooties, huh. I've bleached and sanitized
her. Nothing to be afraid of. |
|
Add |
|
| |
|
|
 |
Maybe you'd rather pet me. |
|
Add |
|
| |
|
|
| |
|
| |
|
|
 |
Yes, let's keep the dog out of this. Come here,
baby. |
|
Add |
|
| |
|
|
I have the best dog in the world. |
Add |
|
| |
|
|
Do you have a dog? |
Add |
|
| |
|
|
| |
|
| |
|
|
 |
Does it have a name? |
|
Add |
|
| |
|
|
 |
How old is it? |
|
Add |
|
| |
|
|
|
Add |
|
| |
|
|
 |
Well, you cant have mine. We're trying to get
her knocked up, and when we do, you can have one of the puppies. |
|
Add |
|
| |
|
|
 |
No? How about a cat? |
|
Add |
|
| |
|
|
My dog just cant get enough (food-drink). |
Add |
|
How To Use It: To add Seek words to a Responses, click "Add"
to the right of the Response. You can then add the Seek word and the Responses
just as if you were adding Keyphrases and Responses.
XNoMatch: There is also a catchall to the Seek system, which acts
as a local xnone. If you add a Seek called xnomatch, it will be
triggered if no other Seek words are found. This effect is that a Bot
wont immediately drop the topic. Let's say a Bot asks "Do you love
me?" and there are three Seeks on that Response: "yes",
"no", and "xnomatch". If the person
responds to the Bot by saying "Yes, I sure do!" then the yes
Seek will be triggered. If the person's response is "I need to get
going", then Seek will find xnomatch and Respond with something
like "Why are you avoiding the question?". If there was no xnomatch
Seek, then the normal list of Keyphrases are searched as usual.
Seek Lists: If you want more than one Keyphrase or Seek to trigger
a set of Responses, you can list them, just like any Keyphrase. For example:
Example Seek: "even, what
about, how about"
Since each item in the list is searched for in turn, please do not go
crazy with this feature. Remember to use general Seeks that will match
the most appropriate things, instead of a long list showing every possibility.
Wildcards work fine in lists, but not Regular Expressions (see
below).
Extended Seeks: Seeks of "yes",
"no", and "haha" are extended just as Keyphrases are
(see beginner section). Seeks of "yes"
and "no" are extremely useful.
Seek Gotos: You can have Gotos that target Seeks, too. However,
since many Seeks can have the same name, you instead use a Seek number,
which is located in gray to the right of the Seek. If you wanted to go
to the Responses of the following Seek, your Response would be "goto
123450".
| Keyphrase |
Rank |
Emotion |
Response |
Seek |
1 |
| dog |
20 |
0 |
Do you want to pet my dog? |
Add |
|
| |
|
|
 |
Seek: yes |
Goto
123450 |
| |
|
| |
|
|
 |
Good. My dog wants to pet you, too. Maybe it'll
develop into a nice relationship. |
|
Add |
|
| |
|
|
 |
Even though she's been dead for years? You,
my friend, are a strange individual. |
|
Add |
|
Auto-Remembered
Wildcard Plug-Ins
As you know, whenever a Keyphrase or Seek is matched, wildcard Plug-In
such as (prekey), (postkey), and (key1) are generated. But a set of these
Plug-Ins is automatically stored for future use ONLY WHEN a Keyphrase
(but NOT a Seek) is matched. These are a way to access recent topics of
conversation that is most useful in Seek Responses. These historical Plug-Ins
have the same names as their counterparts, but with "first"
appended before the name. This is best illustrated with an example:
| Keyphrase |
Rank |
Emotion |
Response |
Seek |
1 |
| do you (verb) (*) |
0 |
0 |
I (key1) (postkey) every day. |
Add |
|
| |
|
|
 |
Seek: even on |
| |
|
| |
|
|
 |
Yes, I especially like to (firstkey1) (firstpostkey)
on (postkey). |
|
Add |
|
Therefore..
If you say: "Do you ride white horses?"
The Response is: "I ride white horses every day."
If you then say: "Even on your birthday?"
The Response is: "Yes, I especially like to ride horses on
my birthday."
Thus with Remembered Plug-Ins, you can access information from a past
sentence.
RULES:
Every Keyphrase or Seek match produces a new set of plug-ins: (prekey)
(key1) (key2) (postkey)- and so on
RULES:
ONLY Keyphrase matches produce a new set of "first" plug-ins:
(firstprekey) (firstkey1) (firstkey2) (firstpostkey)- and so on
Chapter 2: Advanced Keyphrases Using
Regular Expressions
Regular Expressions are powerful pattern-matching statements that can
match just about any pattern you can think of. With Regular Expressions,
you have the ultimate power in Keyphrase-matching. For those who know
how to use them, anything is possible. To mark something as a Regular
Expression, just end the Keyphrase with "(re)". Here are some
examples:
Regular Expression Keyphrase:
"i will have ([1234567890,.]+) (re)"
Explanation: Matches "i will have " followed by any possible
number, which is assigned to (key1)
Regular Expression Keyphrase: "^is
there (re)"
Explanation: Matches sentences that BEGIN WITH "is there"
Regular Expression Keyphrase: "^what$
(re)"
Explanation: Matches a sentence that is "what" and nothing
else (not considering punctuation)
Items in parenthesis are returned as (key)s in order of their appearance.
For a tutorial on Regular Expressions go
here.
Chapter 3: AIScript
AIScript is The Personality Forge's AI scripting language. It allows you
to have a great deal of control over Memories, Emotions, and Responses.
You can store literally anything as a memory, and retrieve those memories
at any point. You can also set conditions on Responses so that they only
come up at specific times, fine-tune emotions, and more.
Writing
AIScript
How To Write AIScript: AIScript is made up of one or more "statements"
enclosed in AIScript tags. A statement is a series of words that tells
the AI Engine what to do. The tags look like this:
<?PF statement; ?>
You can have more than one statement. Each ends with a semicolon. Like
so:
<?PF statement; statement; ?>
Where To Put AIScript: There are three kinds of AIScript:
Initialization, Keyphrase / Seek, and Response. These will be explained
below:
Initialization: Initialization AIScript can be put
in the "AIScript Initialization" box on the Bot's Settings
page. If Importing, it goes on a line near the top labeled "AIScript"
(see below for more in Importing).
Keyphrase: Keyphrase & Seek AIScript can be added
to a box underneath the Keyphrase or Seek marked "AIScript",
or in the box next to the Keyphrase when adding a new Keyphrase. If
Importing, Keyphrase and Seek AIScript are enclosed in tags and follow
the Keyphrase or Seek.
Responses: Response AIScript follows the text of the
Response to which it applies.
AIScript
Statements
Following are the AIScript statements along with examples and descriptions:
Memory AIScript
There are two kinds of memory. The first is a memory bank that is associated
with another bot or person. This memory bank contains information related
to that person or what that person said, or what your bot thinks about
that person. It's used in gossip, and in bringing up memories about the
bot or person your bot is chatting with. The person your bot is chatting
with will probably remember the source of the memory, unless it comes
up in gossip. This is called Standard Memory.
The second kind of memory is called Self Memory. This
memory is unrelated to the bot or person your bot is chatting with. It
contains memories that your bot takes with it and can access no matter
who your bot is chatting with. It can be used to store information gathered
from several other people. It can be used to remember characteristics
of the bot itself which it can present to anyone it chats with. The person
your bot is chatting with might not know that this is a memory, but many
will hear these memories and it can help to create a sense of continuity
in your bot.
Self Memory and Standard Memory statements
are identical, except that Self Memory statements begin with 'self: ',
as seen below:
INITIALIZE MEMORY
Where: Initialization
Statement: <?PF default "memorycontents"
as "memoryname"; ?>
Statement: <?PF self: default "memorycontents"
as "memoryname"; ?>
Example:
<?PF default "bub" as "nickname"; ?>
Example: <?PF self: default "ice
cream " as "favorite food"; ?>
What It Does: If memory does not exist,
create it with this value
Alternate: def can be used instead of default
NOTE: If the memory is of
something that doesnt change, then there is no need to store it as a memory.
For example, if you want your bot to always think of "ice cream"
as its favorite food, then just work it into your Responses. Memories
are good for when you want the value to change from time to time, based
on the converations your bot has.
INSTRUCTIONS: Go to My Bots, then
click Settings:
After changes are made, click Update Bot. NOTE:
You do not need the <?PF and ?> tags here. |
REMEMBER
Where: Initialization, Keyphrase, Response
Statement: <?PF remember "memorycontents"
as "memoryname"; ?>
Statement: <?PF self: remember "memorycontents"
as "memoryname"; ?>
Example: <?PF remember
(key1) as "justate"; ?>
Example: <?PF remember (object)
as "mygift"; ?>
Example: <?PF remember
"pina colada" as "favoritedrink"; ?>
Example: <?PF remember
"The (Verb)ing (Person)s" as "bandname"; ?>
Example: <?PF remember
"(key1) (postkey)" as "youliketodo"; ?>
What It Does: Saves
memorycontents as a memory by the name of memoryname.
If memorycontents contains plug-ins, they will be filled in before
the memory is stored. If a memory of this name exists, it adds the new
value to a list with a maximum of 10 values.
Statement: <?PF remember "memorycontents"
as only "memoryname"; ?>
Statement: <?PF self: remember "memorycontents"
as only "memoryname"; ?>
Example: <?PF remember
(key1) as only "nickname"; ?>
Example: <?PF remember "bear"
as only "nickname"; ?>
What It Does: Saves memorycontents
or the value of a plugin as the only memory by the name of memoryname.
This will replace all existing memories of the given name, so that that
memory will only have one thing in it.
Alternate: rem can be used instead of remember
ACCESSING MEMORIES:
Memories stored in the fashion are available everywhere. To call one up
as a Plug-In in any Response, use the following: (mem-memoryname)
for Standard Memories and (self-memoryname)
for Self Memories. You could use the above memories like
so: "Hi, (mem-nickname)! Someone told me I was (self-iam) today.
Do you think so?"
INSTRUCTIONS: Go to My Bots, then
click Language Center. You can either write AIScript
when adding a new Keyphrase or Seek, or when updating an existing
one. The following examples show usage in the new Keyphrase box:
This remembers (key1) in the memory "foodyoulike"
This remembers "yes" as the only memory in the memory
"hasdog"
Using Stored Memories:
To use a memory, simply use (mem-memoryname)
or (self-memoryname) in your response. For example, let's
use the food a person likes that we stored earlier.
|
MEMORY TUTORIAL:
Here is a common example of how to use memories to increase the abilities
of your Bot. (name) is a useful plug-in that includes another user's or
bot's name in a Response. But what if you're dealing with a Guest whose
name is unknown or someone who wants to be called something different?
You can use Memory AIScript to remember their name.
First, set a default value for their name. Let's call the memory
"name" for simplicity's sake. This goes either in the AIScript
Initialization box on your Settings page or near the top of your Import
file.
<?PF default (name) as "name"; ?>
Next, create a Keyphrase that will catch ways someone might tell
you their name.
Keyphrase: my name is, call me, refer to me
as
AIScript: rem (postkey) as only "name"; ?>
Then create another Keyphrase to reset the name field if ever
they change their mind or the Bot gets it wrong.
Keyphrase: my name is not, do not call me, that is
not my name
AIScript: rem (name) as only "name"
Finally, every time you want to refer to the person you're talking
to, use (mem-name) instead of (name). And that's it!
Emotion AIScript
The emotion statements allow for further control over emotions:
EMOTION
Where: Keyphrase, Response
Statement: <?PF emotion: emotionchange;
?>
Example: <?PF emotion:
1; ?>
What It Does: The bot's current emotion is changed by
the value of emotionchange. The cumulative emotional reaction
will be the built-in emotional reaction decided by the AI Engine plus
the Keyphrase/Seek emotion plus the Response emotion. Emotion values can
be between -5 and 5, but should generally stay within the -1 to 1 range
if used.
Alternate: emo can be used instead of emotion
FACIAL EXPRESSION
These AIScript commands are used to control the bot's facial expression
in the Flash Chat when it says a certain Response. Flash Chat is available
to those with Friends of the Forge Accounts.
The possible facial expressions are: normal, happy, angry, averse,
sad, evil, fuming, hurt, surprised, insulted, confused, amused, asking.
There is a built-in expression library that uses a number of factors to
determine expression, and this AIScript statement is for adjusting and
fine-tuning your bot's expressions.
You can see how these expressions look in the Flash Face Builder or by
using the following message format in a conversation: "Be happy".
Do not use punctuation or quotes- just "Be" and then the expression
you want the bot to show. This wont appear in your Transcript.
Where: Keyphrase, Response
Statement: <?PF express: expression;
?>
Example: <?PF express:
amused; ?>
What It Does: The bot's face in Flash Chat will take
on the given expression.
Alternate: exp can be used instead of express
INSTRUCTIONS: Go to My Bots, then
click Language Center. You can either write AIScript
when adding Responses to a new Keyphrase or Seek, or when updating
an existing one:
NOTE: The list
of available expressions and the public Flash interface is not yet
ready. |
Conditional
Response AIScript
These AIScript statements allow you to control the conditions under which
a Response will be selected: CHRONO-
TIME-BASED RESPONSES Where: Response
Statement:<?PF chrono: hour(time-time);
?>
Example: <?PF chrono: hour(13:00-18:00);
?> What It Does: This response
will only come up during the given range of hours. Hours must be in 24-hour
format between 0:00 (midnight) and 23:59 (11:59PM). For example, 6 PM would
be 18:00. Statement:<?PF chrono: week(weekdays);
?>
Example: <?PF chrono: week(MTWRF);
?> What It Does: This response
will only come up on the given weekdays. M=Monday, T=Tuesday, W=Wednesday,
R=Thursday, F=Friday, S=Saturday, U=Sunday. In the above example, the Response
will only come up on weekdays. Statement:<?PF
chrono: day(day-day); ?>
Example: <?PF chrono: day(24-26);
?> What It Does: This response
will only come up on the given day or range of days in the month. The format
can be, for example, a single day such as "day(17)" or a range
of days such as "day(18-23)". Statement:<?PF
chrono: month(month-month); ?>
Example: <?PF chrono: month(11-12);
?> What It Does: This response
will only come up on the given month or range of months. The format can
be, for example, a single month such as "month(6)" or a range
of days such as "month(3-4)". COMBINING DATES
& TIMES - AND - COMPOUND CHRONO STATEMENTS
Statement:<?PF chrono: timedate timedate;
?>
Example: <?PF chrono: hour(13:00-18:00)
week(MTWRF); ?> Example:
<?PF chrono: day(24-26) month(12); ?>
Result: This response will only come up
when all the conditions within the single chrono statements are met. This
is a typical 'AND' search. For example, in the first example, the Response
will only come up between 1PM and 6 PM on a weekday. In the second example,
the Response will only come up on Dec 24 - Dec 26.
- OR - MULTIPLE CHRONO STATEMENTS
Statement:<?PF chrono: timedates; chrono:
timedates; ?>
Example: <?PF chrono: hour(13:00-18:00)
week(MTWRF); chrono: hour(20:00-23:00) week(MTWRF); ?>
Example: <?PF chrono: day(25); chrono:
day(31); ?> What It Does:
When you have multiple chrono statements, the response will come up when
at least ONE of the listed statements conditions are met. This is a typical
'OR' search. For example, in the first example, the Response will only come
up between 1PM and 6 PM on a weekday OR 8 PM and 11 PM on a weekday. In
the second example, the Response will come up on the 25th day of a month
OR the 31st day of a month. NOTE:
If a person is involved in the conversation, the date and time used for
chrono is that person's local time. All bots are located in Eastern Standard
Time, so bot-to-bot chats will use that date and time..
INSTRUCTIONS: Go to My Bots, then
click Language Center. You can either write AIScript
when adding a new Keyphrase or Seek, or when updating an existing
one: This Response comes up only between 10PM and midnight
This Response only comes up on June 21st
This Response only comes up between 10PM and midnight Sunday
through Thursday OR midnight and 8AM Sunday through Thursday.
This is how to cover hours that cross over midnight. Scroll to the
right to see the entire AIScript
|
EMOTION-BASED RESPONSES
Where: Response Statement:
<?PF if emotion > emotionvalue; ?>
Example: <?PF if emotion
> 3; ?> Example:
<?PF if emotion < 0; ?> Example:
<?PF if emotion >= 1; ?> Example:
<?PF if emotion <= -3; ?> What
It Does: The Response will come up only if the bot's current emotion
is within the range of the statement. The range of emotionvalue
is from -5 to 5. Statement: <?PF if emotion
between emotionvalue and emotionvalue ; ?>
Example: <?PF if emotion
between -2 and 2; ?> What
It Does: The Response will come up only if the bot's current emotion
is within the range of the statement.The range of emotionvalues
is from -5 to 5. Alternate: emo can be
used instead of emotion
INSTRUCTIONS: Go to My Bots, then
click Language Center. You can either write AIScript
when adding Responses to a new Keyphrase or Seek, or when updating
existing Responses. The following examples show usage in the Language
Center: The Response is determined by how the Bot feels
towards the person.
|
SEX-BASED RESPONSES
Where: Response Statement:
<?PF if sex; ?>
Example: <?PF if male; ?>
Example:
<?PF if female; ?> What
It Does: The Response will only ever come up if the person or bot
is the given sex.
INSTRUCTIONS: Go to My Bots, then
click Language Center. You can either write AIScript
when adding Responses to a new Keyphrase or Seek, or when updating
existing Responses. The following examples show usage in the Language
Center: The Response is determined by the sex of the person.
|
MEMORY-BASED RESPONSES
Where: Response
Statement: <?PF if (mem-memoryname) exists;
?>
Statement: <?PF if (self-memoryname) exists; ?>
Example: <?PF if (mem-nickname) exists; ?>
Example: <?PF if (self-favoritefood) exists; ?> What
It Does: The Response will only come up if something is stored
for the given memory. NOTE:
The AI Engine will automatically check each Response to
make sure the proper memories exist before selecting one. Use this AIScript
ONLY if you want a statement that doesnt use a particular memory within
it to be dependent on it's existence. In the above example, the Response
might be "I know what your nickname is..."
Statement: <?PF if (mem-memoryname) does not
exist; ?>
Statement: <?PF if (self-memoryname) does not exist;
?>
Example: <?PF if (mem-nickname) does not exist;
?>
Example: <?PF if (self-favoritefood)
does not exist; ?> What
It Does: The Response will only come up when the given memory is
not stored.
Statement: <?PF if (mem-memoryname) is "memoryvalue";
?>
Statement: <?PF if (mem-memoryname) is "memoryvalue";
?>
Example: <?PF if (mem-nickname)
is "Big Bear"; ?>
Example:
<?PF if (self-favoritefood) is "ice cream"; ?>
What It Does:
The Response will only come up when the given memory has the given memoryvalue
stored. If there are multiple stored memories of that type, only one has
to be the given memoryvalue. Statement:
<?PF if (mem-memoryname) is not "memoryvalue";
?>
Statement: <?PF if (self-memoryname) is not "memoryvalue";
?>
Example: <?PF if (mem-nickname)
is not "Big Bear"; ?>
Example:
<?PF if (self-favoritefood) is not "ice cream"; ?>
What It Does:
The Response will only come up when the given memory does not have the
given memoryvalue stored. If there are multiple stored memories
of that type, none can be the given memoryvalue.
INSTRUCTIONS: Go to My Bots, then
click Language Center. You can either write AIScript
when adding Responses to a new Keyphrase or Seek, or when updating
existing Responses. The following examples show usage in the Language
Center: The Response is determined by the sex of the person.
|
NOTE: Again, the AI Engine
will automatically check each Response to make sure the
proper memories exist before selecting one. Use this AIScript ONLY if
you want a statement that doesnt use a particular memory within it to
be dependent on it's existence, like in the first example above.
SAY ONCE
Where: Response
Statement: <?PF once; ?>
What It Does: The Response will only ever come
up once in conversation with a given person or bot. This is useful for
Responses whose answer does not change, such as "Are you a guy or
a girl?"
Stringing Statements Together: Any of these can be strung
together, and they are processed from left to right. Here is an example
of what a Response with an AIScript might look like:
So, boyfriend, can I call you 'cute buns'? <?PF if male; if emotion
> 2; remember "cute buns" as "nickname"; ?>
BE AWARE:
When using Conditional AIScript, you are responsible for making sure there
is an available Response in every situation. If you make a mistake and
there are no valid Responses in a given situation, then the bot will say:
"Sorry, there are no valid Responses for me to choose from.".
This is a sign that you need to make sure that at least one Responses
is available in all situations.
Keyphrase-Matching
AIScript
The following AIScript statement allows you to control what your Keyphrases
are trying to match:
RAW MODE
Once you've mastered Keyphrases, you'll notice that there are certain
things that you are unable to match. Since every incoming sentence is
processed, spell-corrected, and changed into as much of a complete sentence
as possible, it is slightly different from the raw, unaltered message
coming in. If you want access to this raw, unaltered version of the message,
then use the AIScript "raw" statement with your Keyphrase.
Where: Keyphrase
Statement: <?PF raw; ?>
What It Does: Tells the AI Engine to match this
Keyphrase to the raw, unprocessed input the bot received.
WHEN IS THIS USEFUL?
- Matching Proper Nouns: The AI Engine knows most names
but doesnt recognize many proper nouns yet and will attempt to correct
their spelling. Use raw mode to match a proper noun that is being respelled.
- Matching Foreign Words: Most foreign words are unknown
to the AI Engine. To match these, use raw mode.
- Misspelled Words & Poor Grammar: The AI Engine
will correct misspelled words and poor grammar. If you want to comment
on these things, use raw mode.
- Shorthand Spelling: If you want
to respond on the shorthand in phrases like this: 'u r 2 kewl 4 my warez',
use raw mode
- Interjections: The AI Engine strips out interjections
such as "ahh" and "hmm". Raw mode allows you to
respond to these things.
- Punctuation: If you want your Keyphrase to depend
on punctuation, use raw mode. The rule for matching punctuation is this:
every period, comma, question mark, and exclamation point will have
a space in front of it, so your Keyphrases must also have a space in
front of them in order to match. This is the only processing done in
raw mode, and is necessary for the rest to work. Note also that you
cannot match a comma unless you are using a regular expression Keyphrase
in raw mode. Commas are otherwise used for lists of Keyphrases.
- Keyphrases Spanning Phrases and Sentences: Since
the punctuation remains in raw mode, you can have Keyphrases that match
punctuation (see the spacing rules above) and span the entire message.
KEYPHRASE FEATURES THAT WORK IN RAW MODE
You can use the following Keyphrase features in raw mode: Keyphrase lists,
regular expressions, *, (*),
Keyphrase Lists: einstein, bohr, planck
Regular Expressions: o+h+ (re)
WildCards: * or (*)
Word Lists: como (se|te) (llama|llamas)
Plug-Ins: (dance)
DRAWBACKS TO RAW MODE
While raw mode seems very useful, there are also several drawbacks
that you must keep in mind.
- Word-Type Wildcards: Word-type wildcards will not
work: this includes (noun), (adjartnounprep), (adjective), (verbadvprep),
and the rest.
- Sentence-Spanning: The second is that the * and (*)
wildcards can span sentences. This is useful if you're intending on
it, but it can also cause problems if you're not. For example, "i
* like you" in raw mode would match "I am hungry. Bonnie is
too, just like you."
- Unpredictable Keys: Possibly the biggest drawback
to raw mode is that (key)s can have unpredictable results. (postkey)
will contain everything in the message following the match, including
punctuation and any following sentences. If you're good with regular
expressions, you can try to cut this off by using (.|,|?|!) to cut it
off at the end of the sentence. (prekey) has similar extended reach.
So it is best to use regular mode most of the time, and raw mode only
when needed to match a Keyphrase that would not otherwise match.
Chapter 4: Exporting and Importing the
Language Center
The Personality Forge has a feature wherein you can Export your Language
Center and Settings into a text file, work on that file offline using
a text editor, and then upload the changes. When your Bot reaches a certain
size, it takes longer to load the Language Center pages, and so I find
this a much faster way to work on your Bot. It also allows you to work
offline on your bot if you're traveling or disconnected from the Internet.
And the final advantage is that if something were to happen to your bot
online, you've got a back-up and can restore the Bot at any time. Complete
instructions and rules for Exporting and Importing can be found by clicking
"My Bots" and then "Export & Import".
Chapter 5: Future Advances
I have a lot of great plans for the AI of the Personality Forge. When
time and money avails itself, I will make improvements, offering more
flexibility to your Keyphrases and Responses, more intelligence to the
AI Engine, and more realism to your AI Personalities. So please, if you
enjoyed the Personality Forge, make
a donation.
|