(This document is for historical reference —I wrote it in 2005 and published it on my now defunct web site at http://agtivity.com/agdef.htm, but it should still have at least some current relevance.)
For more recent thinking on this topic read these newer papers:
- What Are Autonomy and Agency?
- Intelligent Entities: Principals, Agents, and Assistants
- What Is an Intelligent Digital Assistant?
A Software Agent (or Autonomous Agent or Intelligent Agent) is a computer program which works toward goals (as opposed to discrete tasks) in a dynamic environment (where change is the norm) on behalf of another entity (human or computational), possibly over an extended period of time, without continuous direct supervision or control, and exhibits a significant degree of flexibility and even creativity in how it seeks to transform goals into action tasks.
A Software Agent System (or Multi-Agent System (MAS)) is a computational environment (such as the Web or a grid computing environment overlay network) in which individual software agents interact with each other, sometime in a cooperative manner, sometimes in a competitive manner, and sometimes autonomously pursuing their individual goals, accessing resources and services of the environment, and occasionally producing results for the entities that initiated those software agents.
A simpler, more structured definition is to say that a software agent is a computer program that exhibits the characteristics of agency or software agency.
The other entity could be a human, a traditional, “legacy” computer program, a robot, or another software agent. A software agent is similar to a robot, but operates in cyberspace, on a computer network.
A software agent is autonomous or at least semi-autonomous, meaning it can perform tasks in pursuit of a goal with minimum of no direct supervision or direct control , but can interact with another entity to obtain guidance or output results. It may or may not have a user interface.
A software agent could in fact be interactive or conversational, acting on behalf of another entity that is not directly apparent to the “user” interacting with the agent. This would be a direct analog to how real-world agents work.
A software agent may need to have a high level of “intelligence” in order to deal with a dynamic environment in which the unexpected is the norm. But it is also possible to have a “dumb” software agent which works autonomously to accomplish well-defined tasks and requests supervision only when it detects unexpected conditions.
A software agent may be “mobile” and move or be moved around the network, but a software agent may also be “static” and do all its work on one host computer on the network, including accessing resources which are on hosts other than the host on which the agent is executing.
An interactive or conversational agent may in fact merely be an “assistant”, under direct control and on behalf of the same user. This would be a less autonomous mode of operation, but the interactive agent could possibly be directed to go off and achieve some goal and work in an autonomous mode while doing so. The question of “agency” is mostly the extent to which there is NOT a one-to-one relationship between the conversion between the user and agent and the actual set of tasks performed by the alleged agent. An assistant does exactly as told. An agent is given a goal and has flexibility as to how to achieve that goal.
An agent may be a single agent (one agent doing a range of tasks to accomplish a goal), part of an agent ensemble (a relatively small team with specialization among the team members), or a very small part of an agent armada (large numbers of agents with a significant amount of parallelism for even specific tasks). Even a single agent may interact with other agents which are responsible to some other entity. What distinguishes an agent ensemble and an agent armada is that they are responsible to a single entity.
We may speak of an agent community or an community of software agents or multi-agent system in which many independent agents at least seem to be cooperating (and/or competing) in pursuit of common goals. The community may be limited to pre-planned members, or it could be open-ended and allow arbitrary, external agents to ‘join’ the open community of software agents.
A software agent may run forever or indefinitely, continuously pursuing its goals, but it is also possible for an instance of an agent to terminate once its goals have been met or no longer needed.
Characteristics that are frequently mentioned as appropriate for software agents include: reactive, deliberative, goal-driven, adaptive, autonomous, learning, communicative, competitive, and collaborative behaviors.
Software agents (and software agent systems) should be designed using a modular architecture.
Software agents are the next evolutionary step beyond objects and programs. Objects tend to be passive with only one object active at a time, and objects tend to be ‘hidden’ inside programs. Programs tend to be relatively static and designing a distributed computation with an indeterminate number of collaborating programs is not an easy task. Software agents offer opportunities for parallelism and inter-program collaboration, and on a large scale, and to do it easily and in a robust, reliable, flexible, and secure manner.
For discussion of issues related to defining what an agent is or isn’t, click here.
Forms of Software Agents
As there is no hard definition of a software agent, here are the various forms of software agent that I have identified, to date:
- System Agent — a continuously running background task or daemon that typically has a specialized, pre-programmed purpose..
- User Agent — the client-side user interface for a sophisticated network application. For example, the web browser for accessing the World Wide Web.
- Client Agent — the client-side user interface for a server-based application such as a search engine or deal-seeking. The server side is usually simply performing a database lookup on a database that is independently maintained by some form of web crawler that monitors changes to web sites.
- Web Crawler — a server-based program that continuously or periodically scans the web or selected portions of the web looking for information of interest. This is not really an agent since it is not acting on behalf of a discrete user, but it is collecting data that can be used for a wide audience of users.
- Conversational Agent — an interactive program that presents a very user-friendly interface and then performs specific tasks as directed by the user. Since it is directly responding to user requests it really doesn’t operate autonomously.
- Intelligent Agent — a program that performs a task or pursues goals with minimal specific direction, using intelligent or heuristic techniques to the effect that the user is very impressed that a computer could be so smart. An IA does not need to be mobile since the vast range of information on the web can be accessed remotely.
- Mobile Agent — an autonomous program that migrates between host systems in the process of pursuing one or more goals. An MA does not need to be truly intelligent, but have enough flexibility to deal with an environment in which things can change or be inaccessible at any time.
- (Closed) Multi-Agent System — a tightly integrated application environment in which portions of the application are parceled out to mini-programs that pursue sub-goals.
- Open Multi-Agent System — a loosely integrated, distributed application environment in which independently constructed programs (agents) can participate in structured interactions in which the agents have a significant degree of common interest (community).
- Ultimate Software Agent — an extremely intelligent and flexible program that can act much the way a real person acts, but constrained to cyberspace. In addition, a USA has the ability to dynamically split itself into sub-agents which can perform sub-tasks and operate in parallel with any degree of interaction. A USA can also clone itself (or, preferably, be automatically cloned by the agent infrastructure) to exploit the inherent parallelism of the network. Split or cloned sub-agents can be recombined at any point as is appropriate for either the function or performance of the overall agent. A USA can also interact with other, independent USAs (a community of USAs) for which the USA has no pre-programmed awareness. A wide range of programming languages, implementation techniques, and communications protocols can be used. Every USA is fully interoperable with every other USA, subject only to administrative controls and resource limits.
- Robot — an intelligent software agent that is mobile in the real world. Robots cannot clone themselves, today, but in theory a robot COULD physically build copies of itself OR buy or rent “empty” (or shell) robots (ala a car rental). In theory, a robot could “transport” itself to another location simply by acquiring an empty shell at another location and then “upload” its software state to that other “empty” robot. The robot might elect to vacate the original shell or may simply use this mechanism for cloning.
- Robot Community — robots that can interact in pursuit of common interests.
- Hybrid Robot/Agent — a robot that can interact with one or more software agents, or a software agent that can interact with one or more robots. Things get really interesting when a community of robots interacts with a community of software agents! Also note that a robot could transfer its software state to a software agent and then operate in cyberspace AS IF it were a software agent and then RETURN its state back to the robot. A software agent could do the opposite: transfer its state into a physical robot, operate the robot, and then return its state back to cyberspace. A robot can act AS IF it were a software agent using remote access. And a software agent can also operate a physical robot directly from cyberspace, also using remote access. In fact, a single software agent (or team of agents) could operate multiple robots in the same or different locations, including controlling interaction of those robots.
For an even earlier view on the topic see the paper by Stan Franklin and Art Graesser entitled “Is it an Agent, or just a Program?: A Taxonomy for Autonomous Agents.”
Also see the Wikipedia article for Software Agent.
For more of my writings on artificial intelligence, see List of My Artificial Intelligence (AI) Papers.