The Atomic Playboy and the Radiation Romeo

The button below will open a new browser window displaying the Flash interface for Atomic and Romeo (Version 16 with Preloader). You will find a page of introductory text, some instructions and then the interface where you can suggest a topic for conversation.

This version 16 uses the landscape layout, updates the heckler and end-of-conversation functions with an audio sign-off. All the features from previous versions remain - scroll bar control,custId variable allows me to better log and track conversations.

The chat-bots are hosted on the Pandorabots server under the Shared Service subscription. Please note, the terms of the Updated Policy Guidelines for Free Community Server state that the “Use of automated scripts to make your pandorabot talk to itself or another bot or script” is proscribed (Pandorabots 2011). This project is being developed with the agreement of the Pandorabots Inc management and we would like to acknowledge their support. ( Pandorabots )

Please leave a comment...

After you have had a play with Atomic and Romeo please use this link to leave a comment.
Maybe you could suggest a topic of conversation or a layout suggestion.
All suggestions gratefully received.

Friday, July 27, 2012

All comments welcome.

I've added a new permanent section above inviting comments on Atomic and Romeo. All feedback will be gratefully received.
Want to suggest a topic of conversation? This is the place to do it.
Comment on their performance? Likewise, this is the place to do it.
What about the interface or layout? Again, this is the place to do it.

Thursday, July 26, 2012

Atomic and Romeo reach Version 5.

I've been writing scripts for Atomic and Romeo on a eclectic range of topics. These are largely ways of dealing with Atomic's "I have no answer for that" statement.

The characters are beginning to exert their influence. When I'm writing I hear their character voices in my head. If something I write for one character makes the other one 'smile' or 'grimace' then the line stays.

Some of the material isn't completely awful - at this early stage I expected a much larger proportion of truly awful dialogue. One of the scripts that I was happy with ( I may not remain so enamoured with it) ran longer than the set length of 20 lines of dialogue. That was an arbitrary figure anyway - he says trying to come up with a good reason to expand the set length.  In Version 5 the characters exchange 26 lines before the random end of conversation text kicks in.

I've also begun playing with wildcards in the AIML. But I'll leave that for later.

Tuesday, July 24, 2012


Today, after changing the Flash interface so that it generates a random set of sign-off lines, I started work on adding random elements to the AIML files.
This really speaks to the heart of the project - I'm structurally adding randomness, trying to balance structure and agency. Sure everything that comes out of Atomic and Romeo is scripted (that's part of my agency as a scriptwiter) but the order of the lines and the way the lines relate to one another is emergent (that's part of how AIML and the Pandorabots brain works). There is no Cartesian dualism. It is never going to be a matter of brain verses mind. Rather, they are complementary: brain~mind.
The particular job I've been doing is dealing with what happens when Atomic (as he always gets the first response to the user's input) doesn't know how to respond to the topic. He initially says, "I have no answer for that". I'm happy to keep that machine-like answer.
The conversation then goes:
Romeo :  That's unlike you Atomic - you always have an answer for everything.
Atomic :  You - you know fuck nothing - me, I know fuck all!
Atomic's line, when thrown to Romeo as an input, hits a random list on of five possible replies. Each of these head the conversation off in a unique direction. Further down the conversation Atomic explains where that particular expression came from. It too is used as a branching point by giving Romeo another pair of random responses.
Atomic :  An old Yugoslavian bloke used that expression all the time.
Romeo :  Nice turn of phrase.
 This leads to a discussion of odd workplace expressions.
Atomic :  An old Yugoslavian bloke used that expression all the time.
Romeo :  There is something I should tell you about Yugoslavia.
This leads to a childish fight about which of the characters is more like a machine.

Getting a good flow of responses to topics that are not explicitly covered is crucial. On the basis of statistics and probability there will always be more topics that are unknown to Atomic and Romeo than ones that are explicitly scripted and known.

New random end of conversation text.

I've re-worked the sign-off that signals the end of the conversation. Initially it was static - a three line block that was delivered by the Flash interface. When the performance reached 20 lines the following text was delivered.

            Romeo: That's enough out of us.
            Atomic: That's enough out of you.
            Romeo: Enough already!

 Don't be afraid, but it is time for a little Actionscript code.

In this latest version (ARbotsAS3v04.swf) I've built in a variable called 'whichEnding'. The variable holds a random number with the possible values of 4, 3, 2, 1 or 0. These values are generated by the following line.

               var whichEnding:Number = Math.floor(Math.random()*5);

In the code is another variable that counts how many lines have been interchanged - it has the truly imaginative name of 'howMany'. Once the value of 'howMany' reaches 20 a function fires the following set of if-statements.

        if(whichEnding == 4) {
            Romeo: That's enough out of us.
            Atomic: That's enough out of you.
            Romeo: Enough already!
        } else if(whichEnding == 3){
            Romeo: The show's over folks.
            Atomic: You don't have to go home...
            Romeo: But you can't stay here!
        } else if(whichEnding == 2){
            Romeo: Our work here is done.
            Atomic: Atomic has left the building, thank you and goodnight.
            Romeo: That jumpsuit is a little tight...
        } else if(whichEnding == 1){
            Romeo: Live long, and prosper.
            Atomic: Die young, and leave a pretty corpse!
            Romeo: So how's that working out for you?
        } else {
            Romeo: That's enough thinking.
            Atomic: The Budda said - With our thoughts we make the world.
            Romeo: Yes Monkey - and it's a very small world.

The result is that there are five possible sign-offs. I've simplified the code for the purposes of illustration but the logic remains the same.

Why bother? The single sign-off was not strong enough to have 'catch-phrase' status. Rather than fighting to find a Simpson-esque phrase I felt that Atomic and Romeo could show just a bit of variability. 

PS > The variable names are purposefully written in camelCase. This really shows my age - camelCase is an old tradition in programing that came from Pascal and other languages. It's generally good advice to avoid spaces in names.

PPS > I've given up on the free AIML set. It takes far too much editing on all levels: punctuation, tone, factual content. There is far too much in the set that affected the personality of the characters. The blank slate approach is the only real option. I will end up with less content but it will be better targeted and it will, if nothing else, be all of my doing.

Friday, July 20, 2012

On Character and Categories

One of the difficulties in using the AIML set from is the development of character. Characters can, and I think should, be defined by rules. These rules should be really simple, broad scale rules that are applied religiously. For example:

Rule 1 - Atomic died in 1995. Therefore he should have limited knowledge of events after that time.

Rule 2 - Atomic is obsessed with his death. He doesn't care about death in general, only his death is important. He created the bot to share his 'wisdom' with the world. At the time he knew he was going to die soon. Understandable obsession, but annoying and self-centered. Oddly being obsessed with death motivates Atomic need to observe the present and peer into the future.

Rule 3 - Romeo is deeply conflicted in his relationship to Atomic. Let's face it, he was born Catholic and never really grew up.

Rule 4 - Romeo is nostalgic. He plays in the past with Atomic. Sometimes he will bring Atomic up to date on a topic, but he would prefer they lived in the past.

Is any of that funny? Hell no! But it is a basis for comedy.

Another difficulty with the free set of AIML is organisation of the individual units of knowledge into scripts. But that's for another post.

Thursday, July 19, 2012

Character development in AIML

Over the past couple of months I've been working on the AIML for Atomic and Romeo.

Initially I started with an AIML set sourced from ( This set contains a huge repository of knowledge  - tens of thousands of categories.

One of the early problems I encountered was the 'full-stop' problem. Inside a Category the Template (the response to the Pattern) can contain multiple ideas expressed as independent sentences each with a full-stop. That works well when the chat-bot is talking to a human being. The human puts the ideas together in some manner. However, when a multi-sentence Template is transposed to become the input Pattern for a second chat-bot that chat-bot tends to respond to each of the sentences as if they were unconnected ideas. This often leads to non sequiturs. This problem is exacerbated by iteration.
The dialogue runs off in multiple strange directions. Also, if another multi-sentence Template is encountered there are now four individualised lines of thought. As the process continues the blocks of dialogue from each character become longer, more complex and riddled with non sequiturs.

I decided to strip a lot of the content out of the supplied set to bring it back to just a couple of AIML file containing just a couple of thousand Categories. Then I went on to strip out full-stops in the middle of Patterns and Template. This took ages - seriously weeks of work and testing.

And the result of all of this was truly unsatisfactory. The chat-bots were processing words but the words were in on consistent way related to the characters.

In the next post I'll talk about the characters.