A.L.I.C.E. AIML set
The original and one of the largest AIML Sets, first authored by Dr. Richard Wallace. Because the A.L.I.C.E. AIML set was released under the GNU GPL, and because most AIML interpreters are offered under a free or open source license, many “Alicebot clones” have been created based upon the original implementation of the program and its AIML knowledge base. Free AIML sets in several languages have been developed and made available by the user community. A.L.I.C.E. AIML sets are, by default, incorporated into each of the pandorabots, available on the free Pandorabots website.
Artificial Intelligence Markup Language; an open standard markup language.
AIML categories

(See category). AIML categories in AIML are the fundamental unit of knowledge. A category consists of at least two further elements: the pattern and template elements. Here is a simple category:

   <pattern>WHAT IS YOUR NAME</pattern>
   <template>My name is John.</template>

When this category is loaded, an AIML bot will respond to the input “What is your name” with the response “My name is John.”

AIML Projects

Each AIML namespace, representing a particular bot or other set of free AIML files (such as a set of utilities) corresponds to a Project on Google code.

A Project is a large container that holds a collection of repositories. Each repository in a Project basically represents a version of a pandorabot. In particular, an individual repository in a Project is a collection of code and downloads associated with a particular release or version of a pandorabot.

You can find an AIML project on Google code by using the namespace identifier in the URL: or (alternative format)
AIML Repositories

A Pandorabots AIML project includes:

  1. A Development Snapshot Repository that includes the latest changes to the AIML set
  2. A set of Official Production Repositories that include earlier releases.
A collection of knowledge units describing a pandorabot’s knowledge. An AIML set consists of a set of AIML categories - each category is a knowledge unit.
An award-winning natural language chatbot - originally created by Dr. Wallace. There are many uses of the word Alice and Dr. Wallace uses A.L.I.C.E. (Artificial Linguistic Internet Computer Entity) to distinguish his creation from other uses of the word Alice. See A.L.I.C.E for more details.
Alice AIML Set
One of the many variants of the term A.L.I.C.E. AIML set.
A shortened form of chatbot. A pandorabot hosted on is also referred to as a bot.
An author of a pandorabot

The basic unit of knowledge in AIML is called a category. In its simplest form, the category consists of an input-side expression called the pattern and an output side expression called the template. Here is an example category:

   <pattern>WHAT IS YOUR NAME</pattern>
   <template>My name is John.  What is your name?</template>

When this category is loaded, an AIML bot will respond to the input “What is your name” with the response “My name is John. What is your name?” As this example shows, the <category> maps one input sentence to possibly more than one output sentences.

Character Content Guidelines
A definition of the character to be created. Definitions should consist of 3-5 pages (at least) of biographical description of the character including name, age, location, gender, life, job, friends, family and personal preferences such as favorite bands, movies color, religion, or political affiliation. A definition might also include a psychological profile (such as Meyer Briggs, Enneagram Style, etc). The Character Content Guidelines will serve as a reference “Character Bible” for use in creating AIML knowledge content.
Character Knowledge Outline
This means defining a collection of AIML file name. The Character Knowledge is spread throughout a collection of files. The choice of AIML file names is arbitrary for the pandorabot, but helpful to the botmaster trying to add knowledge to the pandorabot. The actual file names selected will depend on the Character Content Guidelines, and typically refer to general topic areas such as Bio, Preferences, Default Responses, Pickup Lines, and areas of knowedge such as Politics, Religion, History, Music and Sports.
A computer program you may interact with. Sometimes also called a chatterbot. See chatterbot for more details.
A collection of computer programs - each known as a chatbot.
Typically the people a pandorabot (chatbot) interacts with. Can also be another pandorabot.
Cloud computing refers to the use of Internet (“cloud”) based computer technology for a variety of services. See this wikipedia entry on cloud computing for more information.
Community Service
Pandorabots offers free computer resources at Pandorabots to develop and publish your pandorabot. The server is also referred to as the Free Community Server. You share these resources with the public. This service is free and we are unable to offer any warranty or guarantees for this service. Currently this service is available worldwide.
conversation logs
A record of the interactions between a pandorabot and a client
crossref directive

Custom Sphinx markup allowing you to create your own semantic targets within your text files and refer to them using your own custom roles. Typically the markup looks like this

Example usage:

.. topic:: application API

The application API


See also :topic:`this section <application API>`.

(Of course, the element following the topic directive needn’t be a section.)

Dedicated Service
You can always develop and publish your pandorabot on the free Community Service, however Pandorabots offers two cloud-based alternatives: the Shared hosting Service and the Dedicated hosting Service.
description unit
The basic building block of Sphinx documentation. Every description directive (e.g. function or describe) creates such a unit; and most units can be cross-referenced to. Additional Description units can be added through Sphinx’ extension API.

In the context of Restructured Text, a directive defines specific markup. Directives can have arguments, options and content.

Arguments are given directly after the double colon following the directive’s name. Each directive decides whether it can have arguments, and how many.

Options are given after the arguments, in form of a field lists.

A common gotcha with directives is that the first line of the content must be indented to the same level as the options are.

Here is the complete list of Restructured Text directives. You may also find the cheatsheet useful.

Restructured Text also provides facilities to extend markup functionality by allowing you to define your own directives. Typically directives are formed beginning with two periods followed by a space ”.. ” followed by a directive type and two colons. The text string ”.. directive type::” is referred to as the directory marker. The directory block immediately follows the directive marker and includes all subsequent indented lines. Sphinx uses this directive for images. Follow this link to peruse the complete RestructuredText syntax details. Here is a simple example:

.. name:: content -- where name is the directive name,
                     and content is what it points to

For example, we can insert an image using this directive:

.. image:: \_static\docicons-behindscenes.png

Resulting in:

Dr. Richard Wallace
The inventor of A.L.I.C.E., and original author of the A.L.I.C.E. AIML Set. See the Wikipedia entry for Richard Wallace for more details.
The world’s first chatbot - Eliza was created by Joseph Weizenbaum.
See learn.
field Lists

In the context of Restructured Text reST has the concept of “field lists”; these are a sequence of fields marked up like this:

:fieldname: Field content
Google Code
Google Code is a way to share and store bot content with others using the Mercurial version control system.
A short name for the Mercurial version control system used by Pandorabots
input sentences

In common ordinary usage an input sentence would simply mean a sentence you offer the bot. However, more than one sentence might be offered to the bot, and so in the context of AIML we call the one or more input sentences submitted together, a request.

The request consists of a sequence of input sentences. Each of these sentences is called an input in AIML and is denoted by the <input> tag. The request “Hello. Are you busy? I have a question.” consists of three inputs “Hello”, “Are you busy” and “I have a question.”


Pandorabots extends AIML with a <learn>/<eval> tag pair that makes it possible for the clients to train the bot through conversation. The purpose of <learn> is to store a new AIML category in the bot’s memory. The following example illustrates the use of <learn>/<eval>:

  <pattern>REMEMBER * LOVES *</pattern>
  <template>Ok I will remember it.
      <pattern>WHO DOES <eval><star/></eval>LOVE</pattern>
        <eval> <star index="2"/></eval>.

Generates the dialog:

Human: Remember John loves Jane.

Bot: OK, I will remember it.

Human: Who does John love?

Bot: Jane.

A version control system used by Pandorabots
The AIML sets are named using a namespace convention to make them easy to find.
A chatbot hosted on a Pandorabots server
One or more chatbots hosted on a Pandorabots server
The free and open web server providing development and hosting tools for pandorabot style chatbots.
Pandorabots takes each individual input in the request and finds the category with the best matching pattern. An AIML pattern consists of individual words separated by spaces, interspersed with zero or more wild cards.
persistent predicate
A persistent predicate keeps track of clients across sessions. You can use this capability to remember a client’s name, age, gender, preferences, etc. across multiple different sessions. Typically, Pandorabots provides session predicates - meaning that information is retained only for the length of a session. And optionally you may sign up for the persistent predicates capability, which permits you to retain client information across multiple sessions.
AIML uses a predicates to keep track of information about the client such as their name, age, gender and preferences. A predicate value is set with a <set> tag and retrieved with a <get> tag. The expression <set name=”age”>36</set> sets the predicate “age” to 36 and any subsequent <get name=”age”/> returns 36, until “age” is set again. Pandorabots offers session predicates - meaning that information is retained only for the length of a session.
A flexible project management web application which includes a gantt chart, calendar, wiki, forums, multiple roles, and email notification.
The input to the bot may consist of one or more sentences. The totality of this paragraph of inputs is formally called the request in AIML and is denoted by the <request> tag. In AIML terms, we say that “Hi. My name is John. How are you?” is a request that contains three inputs. (For an example using the <request> tag, see response).

For each input request, the output of the bot may consist of one or more sentences. The totality of this paragraph is called the response and is denoted by the <response> tag. Although the <request> and <response> tags are rarely used in AIML, one example is a category to display a record of the recent conversation. This example illustrates printing the last 3 interactions:

   <pattern>DIALOG HISTORY</pattern>
   Human: <request index="3"/>
   Robot: <response index="3"/>
   Human: <request index="2"/>
   Robot: <response index="2"/>
   Human: <request index="1"/>
   Robot: <response index="1"/>
reST is an abbreviation for Restructured Text.
Restructured Text
Restructed Text is part of the Docutils project a collection of really useful tools for processing text documents into a variety of useful formats. These documents are entirely based on Sphinx and these tools.

Sphinx uses a specially defined text-strings, called a roles, to determine how to insert markup into documents. References to roles are used to generate cross references. Writing :role:`target`, generates a link to the target of the type indicated by role. The links’s text will be the same as target.

There are some additional facilities, however, that make cross-referencing roles more versatile:

  • You may supply an explicit title and reference target, like in reST direct hyperlinks: :role:`title <target>` will refer to target, but the link text will be title.
  • If you prefix the content with !, no reference/hyperlink will be created.
  • For the Python object roles, if you prefix the content with ~, the link text will only be the last component of the target. For example, :meth:`~Queue.Queue.get` will refer to Queue.Queue.get but only display get as the link text.

In HTML output, the link’s title attribute (that is e.g. shown as a tool-tip on mouse-hover) will always be the full target name.

An open-source slide show application based on restructured text. More details are available at S5 Slide Show.
Shared Service
You can always develop and publish your pandorabot on the free Community Service, however Pandorabots offers two cloud-based alternatives: the Shared hosting Service and the Dedicated hosting Service.

The <srai> tag gives AIML the ability to link a template to other responses recursively. The srai tag is used to link together synonyms, to rewrite sentences into canonical forms, and to divide inputs and combine the responses together.

Perhaps the most common use of <srai> is to link the same response to many different ways of saying the same thing. The following categories make it possible for the bot to respond the same way to different variations of “What is your name?”


  <pattern>WHAT IS YOUR NAME</pattern>

  <pattern>WHO ARE YOU</pattern>

  <pattern>IDENTIFY YOURSELF</pattern>
In the context of Restructured Text, a target is part of the syntax of Restructured text directives and a more complete description can be found roles.
In its simplest form the AIML template consists a simple text response. The template may also contain AIML tags that turn it, in effect, into a mini computer program for computing the response. These tags may customize the response by inserting predicate values such as the client’s name, or may even recursively link to other AIML categories (see srai).

In AIML the term <that> refers to the robot’s previous utterance. This is based on the common English usage of “that” as in “That makes sense” or “I understand that.” Each element of the <response> is a <that>. The <that> provides rudimentary context mainly in question answering. For example, if you say “Yes” to me, I better remember what I asked you that made you say “Yes”, in order to form a coherent reply.

The following example illustrates the use of <that>:

Bot: What is your name?

Human: Jane.

Bot: Nice to meet you, Jane.

This dialog may be achieved with the category:

   <that>WHAT IS YOUR NAME</that>
   <template>Nice to meet you, <set name="name"><star/></set>.

The <topic> tag provides an additional level of context in AIML, so that many categories can be grouped together under common topics such as “Humor”, “Sales”, “Chit Chat” etc.

The <topic> tag may be used to group categories so that when the predicate value “topic” matches the topic name in the tag, those categories may be activated:

<topic name="CARS">

<topic name="TRAINS">
ultimate default category

The category with the pattern <pattern>*</pattern> i.e. just the wild card‘s * by itself, is called the ultimate default category because it means that no other more specific matching pattern exists. Essentially when an input matches this category, the bot has no idea what was said. A good strategy with this category is to write a list of non-sequitors that the bot may draw upon randomly, in order to get the conversation back onto something it knows about. We sometimes call this list of random choices pickup lines.

It is also a good strategy when creating a bot, to write the ultimate default category first.

           <li>What's your favorite movie?</li>
           <li>Do you like ice cream?</li>
           <li>I didn't understand that.  Can you rephrase it?</li>
Wallace, Richard
See Dr. Richard Wallace
wild card
See wild cards
wild cards

Wild cards are special characters in AIML input patterns that can match one or more words. AIML has two wild cards: _ and *. Each matches one or more words. The difference between them is that _ has the highest priority in matching. Individual words have the next highest priority, and * has the lowest priority.

Suppose we have 3 categories with the patterns:

A. <pattern>_ MOTHER</pattern>
B. <pattern>WHO IS YOUR MOTHER</pattern>
C. <pattern>* MOTHER</pattern>

(and for the purpose of this example, assume there are no other categories in the bot). If the input ends in the word “MOTHER” then category A will match, no matter what, even if the input is exactly the phrase “Who is your mother”. The reason is, the wildcard _ has highest priority in matching, even higher than exact matching words. If we eliminated category A, the input “Who is your mother” would match B, and “Tell me about your mother”, “Do you have a mother” etc. would match C.

XaaS (EVERYTHING as a service) XaaS refers to a set of acronyms - each designating a type of service typically available through the internet. The most common examples of XaaS are Software as a Service (SaaS), Infrastructure as a Service (IaaS) and Platform as a Service (PaaS). The combined use of these three is sometimes referred to as the SPI model (SaaS, PaaS, IaaS). Other examples of XaaS include Storage as a Service (STaaS), Communications as a Service (CaaS), Network as a Service (NaaS) and Monitoring as a Service (MaaS), Backend as a Service (Baas). Where infrastructure-as-a-service gives you access to a VM that acts like it is an individual server, and platform-as-a-service gives you access to a (usually language-specific) runtime environment, a backend-as-a-service gives you an API into a common infrastructure for sending data between applications.

Introductory Documents for Pandorabots, Inc.


Pandorabots, Inc. <>


$Date: 2014-1-2$


© 2014 by Pandorabots, Inc.