The Open Agent
ArchitectureTM
A framework for integrating a community of heterogeneous software agents in a distributed environment.
In the context of the Open Agent ArchitectureTM (OAA®), we are focused on building distributed communities of agents, where agent is defined as any software process that meets the conventions of the OAA society. An agent satifies this requirement by registering the services it can provide in an acceptable form, by being able to speak the Interagent Communication Language (ICL), and by sharing functionality common to all OAA agents, such as the ability to install triggers, manage data in certain ways, etc. In our community of agents, we are able to include, and make use of, each of the different types of agents mentioned above.
So, what can Distributed Agents possibly add to the Distributed Object paradigm? With distributed objects, even though objects may run on different platforms, applications generally form a single monolithic entity of tightly-bound objects, with hand-coded calls to known methods of pre-existing objects.
In a distributed agent framework, we conceptualize a dynamic community of agents, where multiple agents contribute services to the community. When external services or information are required by a given agent, instead of calling a known subroutine or asking a specific agent to perform a task, the agent submits a high-level expression describing the needs and attributes of the request to a specialized Facilitator agent. The Facilitator agent will make decisions about which agents are available and capable of handling sub-parts of the request, and will manage all agent interactions required to handle the complex query. The advantage? Such a distributed agent architecture allows the construction of systems that are more flexible and adaptable than distributed object frameworks. Individual agents can be dynamically added to the community, extending the functionality that the agent community can provide as a whole. The agent system is also able to adapt to available resources in a way that hardcoded distributed objects systems can't.
With this in mind, we designed the InterAgent Communication Language (ICL) to be a logic-based declarative language capable of representing natural language expressions. In addition, we incorporated techniques into the architecture for communicating with agents using simulataneous multiple (natural) input modalities; humans can point, speak, draw, handwrite, or use standard graphical user interface when trying to get a point across to a collection of agents. The agents themselves will compete and cooperate in parallel to translate the user's request into an ICL expression to be handled. These techniques, in combination with the use of special class of agents called Facilitator agents (Facilitator agents reason about the agent interactions necessary for handling a given complex ICL expression), allow human users to closely interact with the ever-changing community of distributed agents.
As noted under Documentation & Distribution, we are moving away from use of OAA 1.0 libraries, as OAA 2.x is better documented and supported. However, because OAA 1.0 provides libraries for more programming languages, and the OAA 2.x facilitator supports backwards compatible use of OAA 1.0 agents, we continue to make available the OAA 1.0 libraries.
OAA 2.x agent libraries exist for the following languages, and have been used on (at least) the following platforms:
| Quintus Prolog | SunOs/Solaris, Windows 9x/NT/2000/XP, other Quintus-supported platforms |
| Sicstus Prolog | SunOs/Solaris, Linux, Windows 9x/NT/2000/XP, other Sicstus-supported platforms |
| ANSI C/C++ (Unix, Microsoft, Borland) | SunOs/Solaris, Linux, Windows 9x/NT/2000/XP |
| Java | Any Java platform |
| Compaq's Web Language | Any Java platform |
| Quintus Prolog | SunOs/Solaris, Windows 9x/NT, other Quintus-supported platforms |
| ANSI C/C++ (Unix, Microsoft, Borland) | SunOs/ Solaris, SGI IRIX, Windows 9x/NT |
| Common Lisp (Allegro & Lucid) | SunOs/Solaris, Linux |
| Java | Any Java platform |
| Borland Delphi | Windows 3.1, Windows 9x/NT |
| Visual Basic | Windows 3.1, Windows 9x/NT/2000/XP |
| Compaq's Web Language | Any Java platform |
| Perl | Unix |