August 24, 2011
blank page design
When hearing a new idea presented, most people compare it to what they know and ask things like, “Have you used Wolfram|Alpha, or Cyc, or chatterbots?” Most would start by researching such projects, comparing features and approaches, getting inspiration. Personally, I prefer “blank page design”, trying to empty my mind of all influences, including my own past designs, so I can get to the core of things and limit my assumptions.
So let’s start. We know from the previous two posts that I’m creating StoryBot, a cognitive agent, with three essential capabilities: im, mu, and ex. Two of these operations, im and ex, involve communicating outside the agent, so we’ll need some conduit, some method for getting input and sending output. Rather than talk of websites and IM clients, I’ll ignore such real world concerns and simply talk of channels (which has nothing to do with the fact that I’m now watching the original Star Trek series).
An agent communicates with the outside world through channels. It’s a bit like an author trapped in a small room with only a mail slot in one wall. Ever so often, a piece of paper gets slipped through the slot. The author reads the paper, writes a response, and slips it back through the slot. The author has no idea what or who is getting the response. For all she knows, her response could be displayed on the Time Square billboard or read aloud to a kindergarten class. Her response could be used to make a movie or build an electric car. Such is the life of an agent . . . it knows only mail slots, or channels.
Using such a simple abstraction allows us to make all sorts of channels that work equally well with each agent. We’ll have an IRC channel, a web application channel, a Skype channel, a Facebook channel, etc. By using this abstraction, we can isolate such particulars from our core design.
Now that I’ve got a useful abstraction for im and ex, I’ll focus on mu. The defining attribute of mu is “change” … information comes in, gets changed somehow, and then goes back out. Reminds me of a favorite quote by Gregory Bateson: “Information is any difference that makes a difference.” It also reminds me of prisms, since they receive, change, and send light in pretty cool and clear ways.
So our central mu abstraction will be the prism, which you can think of as a kind of sub-agent that changes information on behalf of its agent. To return to the mail slot room example, imagine that prisms are other people in the room that help the author. So when a letter comes through the slot, the author (agent) gives it to the helper (prism), who then makes their own response and hands it back to the author.
Already I’m second guessing things, wondering if there’s any useful distinction between agent and prism, or between agent and channel for that matter. This likely has to do with my old designs creeping back, affecting my blank page brain. For now, agent, channel, and prism are useful as starting points.
Time to write some code.