Skip to main content

AIML Evolved - Aims and Objectives


My original .NET chat-bot was written over three years ago and is based upon the AIML specifications. It was also my first project in C# and became a vehicle for me to learn about the .NET platform.

Now that I have extensive experience and knowledge of .NET, I am re-designing this library to include several modifications and improvements. The definite modifications will be (in no particular order):

  • Better cross-platform compatibility: .NET 1.1 and 2.0 as well as MONO support.
  • A significant change in the architecture of the library (more modular to make it easier for developers to extend and add functionality).
  • Better (i.e. more efficient and standards-compliant) AIML support.
  • A simpler and more logical API.

I also aim (but no promises) to include the following features (in order of priority):

  • A means of saving the bot's "brain" as a binary file. Loading a binary file into memory will be significantly faster than having to re-load and process the AIML every time the software starts up.
  • The option to run the library with at least two different types of backend:
    • The regular in-memory "brain" built from the AIML or binary file described above.
    • A relational database (initially SQL Server2000/2005, MySql and PostgreSQL) and associated code to import and process the AIML into a relational structure.
  • The implementation of some non-AIML compliant learning algorithms so the bot's vocabulary and scope for conversation grows.
  • User profiling for better awareness of conversational context.
  • Some simple code snippets and examples for developers to get started.


In addition to the work on Program#, I have been in touch with the developers of a Ruby version of the standard AIML bot (ProgramR).

By their own admission, the project is very much "alpha" code. I am going to spend time contributing to this project as both a bug fixer and implementer of new features.

My reasons for doing this are to:

  • Deepen my understanding of the capabilities and stylistic conventions of the Ruby programming language.
  • Advance ProgramR to the same level of maturity as Program#.
  • Help bring into existence something insanely useful.
  • Create a platform upon which new chat-bot techniques can be easily tried and tested.

Ultimately, both Program# and ProgramR will implement only the minimum of required features in the simplest, easiest and most helpful way possible and become solid foundations upon which bespoke systems can be built.