Saturday, March 31, 2012

Two kinds of agent: data source agents and normal agents

Stage 0 my my new Agent Server supports two distinct kinds of agent:
  • Data Source Agents – read web resources (HTML pages, XML files, text files, RSS feeds, etc.) on a periodic basis and extract useful information and output it in a form suitable for consumption by other agents. A single data source agent can in fact access multiple web resources on different time scales and aggregate the extracted information.
  • Normal Agents – consume the output of other agents, both data source agents and other normal agents, and in turn generate their own output. No timers are needed since activation of agents is automatic based on their dependency graphs.
Actually, there is not real distinction between these "types" of agent, other than simply whether the agent happens to use any timers. In fact, you can have hybrid agents that consume some web resources on a periodic basis using timers and output from other agents as it becomes available.

The agent server, a place for agents to live

When Semantic Web pioneer Prof. James Hendler famously asked "Where are all the Intelligent Agents?" five years ago, the response was mixed and I would say rather muddled. Basically the answer was that we are making progress, but we are far from being "there" yet. Now, five years later, I have some running code as the beginnings of a better answer: agents need a special kind of operational environment in order to flourish; they need an agent server, which is what I am now working on. Five years ago I suggested that software agents needed a rich semantic infrastructure in order to flourish. My initial cut at an agent server is certainly not as semantically rich as I suggested, but I have made it a lot easier to develop and deploy relatively simple software agents, which is the first required step.
 
As rudimentary as it is, my Stage 0 Agent Server makes it dirt-simple to construct and deploy agents that periodically read data from HTML web pages, XML files, text files, JSON REST APIs, and the outputs of other agents, etc. The agents are long-lived and their state is persistent, even if the server must be shutdown and rebooted, all with zero effort on the part of the developer.
 
It is certainly not ready for prime time, but is definitely a candidate for giving agents a place to live.

Moving forward with developing a software agent server

Back in the middle of January I ruminated about the possibility that after 15 years of thought and research, maybe I was finally on the verge of being ready to actually make some forward progress with developing a software agent server. About a week later I started writing some serious code in Java and two months later I now have a preliminary working version of an agent server. It is still far from finished and I would not want anybody to actually start trying to use it, but I do have open source code and a downloadable Java zip file up on github. I call it "the Base Technology Agent Server – Stage 0." Call it pre-alpha quality. after I get some preliminary feedback from some people, fill in some gaps, and finish some documentation, then I will officially make it public. For now, people can actually take a peek if they are adventurous enough:
 
 
I hope to get the introductory doc and tutorial in at least marginally usable shape within a week or so.