Agtivity | Advancing the Science of Software Agent Technology

What is a Software Agent?

[ Home | Blog | Books | GlossaryLinks | Manifesto | Search | Contact ]


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:

Software Agent Definitions

Here are some of the various alternative definitions for the term "software agent" that have been put forth by people working in the field.


See the Wikipedia article for Software Agent.

[ Home | Blog | Books | GlossaryLinks | Manifesto | Search | Contact ]

Hit Counter

Updated: January 29, 2006 07:47:41 PM -0500

Copyright 2005 John W. Krupansky d/b/a Base Technology