Why don't you come up to the lab,
and see what's on the slab.
I can see you're quivering with an-ti-ci ........ pation.Well, I've been making me a man,
with blonde hair, and a tan,
and he's good for relieving my ........ tension.I'm just a 1337 bot master,
from Sunny Brisbane,
Aust-ra-li-a-a-a-a-a!
[apologies to F. N. Furter, Dr, retired, for stealing and mashing lyrics unashamedly]
Wrangling with artificial intelligences is my current passion. More specifically, AIs that can link to things in-world in SecondLife via mash-ups.
A curious mash-up sequence that involves an AIML conversation bot, a client-side utility that messages via port 80 [the http port ... yes, plain old web] to log in an avatar [player file] into SecondLife, connect it to the AIML bot [so you can talk to it] whilst providing some degree of remote-control to that avatar is what I am currently researching - phew.
Why?
Well ... my SecondLife avatar, Wonko Whizenhunt is building an historical SecondLife sim above an island owned by Decka Mah [RL name Lindy McKeown, a PHD researcher looking at learning models in 3D worlds - I am one of her "lab Rabbits"]. The sim based on some fact and a lot of conjecture, and need "players" in the scenario that visitors can interrogate, that can take part in a murder trial, generally do things on their own, and because I thought this would be a cool way to experience a narrative.
I have already created static objects that talk - thanks to a variation of an ingenious script developed by Azwaldo Villota [a nice e-chappie that is a teacher and researcher in the US whom I have only met virtually - RL name John Wallace] and am looking at using a range of interactive objects to embed clues, information and provide a rich experience for the visitor.
This research, strangely, has not come without cost. Time and energy probably being the most expensive here, but knowledge is a good thing. I needed an in-world agent that would connect an avatar to the conversation engine - these are beginning to emerge, one that I bought (L$2000 EACH avatar = approx $7 in real money) was made by a SecondLife Resident called Thoys [SLURL] thanks to a grant from Decka. I created my ALT avatar [apparently not wise to use your primary avatar for this, as it terminally breaks it - a feature apparently] and then associated that avatar to the in-world agent by telling the vending machine who the "owner avatar" was - in this case Wonko Whizenhunt was going to be the owner of the ALT avatar named Doppelganger Writer.
Then I browsed on over to Thoys's Wobshite : http://slbot.thoys.nl/ and downloaded the client program that is used to control [much like a puppeteer controls it's puppets] via http strings the in-world avatar, unpack and run the install. It is a great shame that there is almost NO documentation for this tool, and the links of the wobshite mostly lead to "to be developed" pages - you get that. The story continues ...
So ... to the process of AIML mash-up bot creation:
defining the AIML bot |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The nice people at pandorabots.com offer free, trainable, AIML-based bots. Aren't they nice? AIML is Artificial Intelligence Markup Language - a subset of XML, allowing associative definition of question/response and pattern-based chat |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The botmaster console allows you to manage your many bots [well, yes, when this screen grab was taken there was only 1]. As far as I can tell, there is no stated limit on the number of bots you can have. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Pandora offers a few basic flavours of bot, I have only experimented with a few - for this character I decided to start with a blank bot. Give it a name, press create and you are ready to start teaching your bot stuff. The different flavours determine what AIML markup your bot starts with - some are very chatty and rich, others appear confused, still others arrive tabla-rasa [empty headed] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The basic steps [as I have encountered them, so far] are:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Properties are things about itself that the bot knows. In the pictured example, I have added a property called "age", so that when a chatter asks "how old are you" it will access this property. I am still learning what to include as properties and what to include as general chatter in the conversation training [later]. there seems no logical limit to the complexity here, and if you create an odd property that it cannot connect with you can always tweak it's response later in the trainng interface. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
When training a bot, you type the thing you might say to the bot - it will search it's conversation database looking for "matches" to all or part of what you said, and respons accordingly. Because I started with a blank bot, it does not know how to respond to anything much at all. this is where it then becomes time consuming but interesting. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The training interface indicates how truly blank my bot is initially. When I mention a key question to it "what is evidence", it has NO IDEA what I am talking about. It's standard response is "I have no answer for that". By entering questions and responses, you "teach" the bot stuff, presumably later the more you talk to it, the more connections it makes to that response. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This screen demonstrates that the bot has now learnt that bit of knowledge. Digging into it's AIML brain, the markup that has occurred is:
this is also fairly useful programatically, as the above markup can also be generated by server-side web services like alicebot.com, from locally hosted PHP/MySQL Databases, which in itself is a neat way to control your content without relying on third-party external services. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
To make the bot visible to the outside world, you PUBLISH it. There again seems no logical limit to the munber of published bots you can have - each publishing creates the necessary database links to allow you to chat to that bot via HTTP [common old web]. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
We now have a live-to-web bot. Talk to him:
or see and talk to the flash-interfaced [Oddcast VHost] bot at:
The "botID" is important here - as it is the Pandora-specific Unique Identifier used later. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Connect and communicate |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; | A video tutorial that almost, but not entirely, fails to adequately describe very much useful at all - pity really as this is almost the only documentation available from Thoys. It does, however, address visually the process of associating the bot to an alternative avatar's account, and hints at a command set you issue to your bot in-world via instant message to it. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
r-clicking on the tray icon brings up a menu that lets you initiate the remote login process - choose ADD CLIENT. this menu also lets you switch between the bots [yes, apparently you can have many bots in at the same time - yet to test this] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nominate the login details of the ALT avatar [remembering, this ALT Avatar is like a totally complete character, not a dumbed down object pretending to be a person-driven in-game presence] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
You get confirmation when your remote instance has entered the SecondLife Grid | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
You can nominate who is in remote control of this avatar, and the tabbed dialogue lets you browse some of the characteristics of this avatar remotely. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
... including it's inventory - not yet sure how useful this feature is in the current version of the client. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
You can hold conversations with anyone in talking distance, without being in-world. A truly useful feature would be the ability to IM people also, but that is not available yet. Similarly, with the inventory not active, remotely teleporting and other things are not accessible. this necessitates the puppet master being in-world to get the ALT avatar to do much more than speak. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
By wiring the ALT avatar to your pre-prepared Pandora AIML Bot, that avatar has fulll control over the pre-programmed vocabulary. This is where it starts to get interesting, as the avatar is live in world, and can be talked to as though it is a person, it looks like a person and can be dressed appropriately. This has real potential to be useful I think as an in-world expert when real people are not available. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
So we come to the wierd [yet strangely wonderful] part of the project - with Me in world [the handsome grey thin alienesque chappie in the tweed suit - it was late, and I was tired] with my Doppelganger [the muscle-bound hunk of spunk], I can issue commands to get him to do stuff. Pictured are me dancing with myself [nigel no-friends?] and simultaneously having a chat, with the response from Doppy coming from the AIML Pandora Bot made previously. There is something slightly surreal about this scenario, particularly as my doppelganger dances better than I do, but exploring the command set, there seems some commands that work better than others. I have summarized the command list below, but have found some of them do not yet work - I can hope this is still in development as I see HUGE potential should it ever stabilise. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This is an in-world demo of Me with my BOT, dancing with myself [yes, I realise just how sad that sounds]. It demonstrates some of the abilities of the Bot to converse using the Pandora Chat engine, and obey instructions Instant Messaged to it. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
available commands: -=animation=- repeatanims, stoprepeatanims -=appearance=- clone, detach, fixlook, wear, wearnum -=build=- deletethis, rezmap, thiskey, thispermissions -=communication=- dialoglisten, dialogreply, listen, say, saychan, shout, stoplisten, whisper, who -=finances=- balance, buythis, givecash, paythis, sellthis -=friendlist=- allrights, invitefriend, resetrights -=info=- help, helpnote, programstats, regioninfo, version -=inventory=- cd, ls, mkdir, rezinvo, rmdir -=movement=- fly, follow, land, sit, sithere, sitkey, sitnum, stand, stopfollow, teleport, teleportav, teleportme, touchhere -=status=- busy, forceresit, logout |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
as I get commands to work, I will annotate the above table. |
Mail me with your ideas/feedback - I'll post it for others to see if you like.