¿Qué es un Agente de Software?

(Este documento es una referencia histórica -lo escribí en 2005 y lo publiqué en mi ahora extinto sitio web en http://agtivity.com/agdef.htm, pero debería tener al menos alguna relevancia actual.)

Para un pensamiento más reciente sobre este tema lea estos documentos más recientes:

  • ¿Qué son la autonomía y la agencia?
  • Entidades Inteligentes: Principals, Agents, and Assistants
  • ¿Qué es un Asistente Digital Inteligente?

Un Agente de Software (o Agente Autónomo o Agente Inteligente) es un programa informático que trabaja hacia objetivos (en contraposición a tareas discretas) en un entorno dinámico (donde el cambio es la norma) en nombre de otra entidad (humana o computacional), posiblemente durante un período prolongado de tiempo, sin supervisión o control directo continuo, y exhibe un grado significativo de flexibilidad e incluso creatividad en la forma en que busca transformar los objetivos en tareas de acción.

Un Sistema de Agentes Software (o Sistema Multi-Agente (MAS)) es un entorno computacional (como la Web o una red de superposición de entornos de computación grid) en el que los agentes software individuales interactúan entre sí, a veces de forma cooperativa, a veces de forma competitiva, y a veces de forma autónoma persiguiendo sus objetivos individuales, accediendo a los recursos y servicios del entorno, y ocasionalmente produciendo resultados para las entidades que iniciaron esos agentes software.

Una definición más simple y estructurada es decir que un agente de software es un programa de ordenador que exhibe las características de la agencia o la agencia de software.

La otra entidad podría ser un humano, un programa de ordenador tradicional, «heredado», un robot u otro agente de software. Un agente de software es similar a un robot, pero opera en el ciberespacio, en una red de ordenadores.

Un agente de software es autónomo o al menos semiautónomo, lo que significa que puede realizar tareas en pos de un objetivo con un mínimo de supervisión o control directo, pero puede interactuar con otra entidad para obtener orientación o resultados. Puede o no tener una interfaz de usuario.

Un agente de software podría de hecho ser interactivo o conversacional, actuando en nombre de otra entidad que no es directamente evidente para el «usuario» que interactúa con el agente. Esto sería una analogía directa con el funcionamiento de los agentes del mundo real.

Un agente de software puede necesitar tener un alto nivel de «inteligencia» para hacer frente a un entorno dinámico en el que lo inesperado es la norma. Pero también es posible tener un agente de software «tonto» que trabaje de forma autónoma para realizar tareas bien definidas y que solicite supervisión sólo cuando detecte condiciones inesperadas.

Un agente de software puede ser «móvil» y moverse o desplazarse por la red, pero un agente de software también puede ser «estático» y hacer todo su trabajo en un ordenador anfitrión de la red, incluyendo el acceso a los recursos que se encuentran en otros anfitriones distintos del anfitrión en el que el agente se está ejecutando.

Un agente interactivo o conversacional puede, de hecho, ser simplemente un «asistente», bajo control directo y en nombre del mismo usuario. Este sería un modo de funcionamiento menos autónomo, pero el agente interactivo podría ser dirigido para ir a lograr algún objetivo y trabajar en un modo autónomo mientras lo hace. La cuestión de la «agencia» se refiere sobre todo a la medida en que NO existe una relación unívoca entre la conversión entre el usuario y el agente y el conjunto real de tareas realizadas por el supuesto agente. Un agente hace exactamente lo que se le dice. A un agente se le da un objetivo y tiene flexibilidad en cuanto a cómo lograr ese objetivo.

Un agente puede ser un único agente (un agente que realiza una serie de tareas para lograr un objetivo), parte de un conjunto de agentes (un equipo relativamente pequeño con especialización entre los miembros del equipo), o una parte muy pequeña de una armada de agentes (un gran número de agentes con una cantidad significativa de paralelismo incluso para tareas específicas). Incluso un solo agente puede interactuar con otros agentes que son responsables ante alguna otra entidad. Lo que distingue a un conjunto de agentes y a una armada de agentes es que son responsables ante una única entidad.

Podemos hablar de una comunidad de agentes o de una comunidad de agentes de software o de un sistema multiagente en el que muchos agentes independientes parecen, al menos, cooperar (y/o competir) en la búsqueda de objetivos comunes. La comunidad puede estar limitada a miembros previamente planificados, o puede ser abierta y permitir que agentes externos arbitrarios se «unan» a la comunidad abierta de agentes de software.

Un agente de software puede funcionar para siempre o indefinidamente, persiguiendo continuamente sus objetivos, pero también es posible que una instancia de un agente termine una vez que sus objetivos se hayan cumplido o ya no sean necesarios.

Las características que se mencionan con frecuencia como apropiadas para los agentes de software incluyen: comportamientos reactivos, deliberativos, impulsados por objetivos, adaptativos, autónomos, de aprendizaje, comunicativos, competitivos y de colaboración.

Los agentes de software (y los sistemas de agentes de software) deben diseñarse utilizando una arquitectura modular.

Los agentes de software son el siguiente paso evolutivo más allá de los objetos y los programas. Los objetos tienden a ser pasivos, con sólo un objeto activo a la vez, y los objetos tienden a estar «escondidos» dentro de los programas. Los programas tienden a ser relativamente estáticos y diseñar una computación distribuida con un número indeterminado de programas que colaboran no es una tarea fácil. Los agentes de software ofrecen oportunidades para el paralelismo y la colaboración entre programas, y a gran escala, y para hacerlo fácilmente y de una manera robusta, fiable, flexible y segura.

Para la discusión de cuestiones relacionadas con la definición de lo que es o no es un agente, pulse aquí.

Formas de Agentes de Software

Como no hay una definición clara de un agente de software, aquí están las diversas formas de agente de software que he identificado, hasta la fecha:

  • Agente de Sistema – una tarea de fondo o demonio que se ejecuta continuamente y que normalmente tiene un propósito especializado y preprogramado..
  • Agente de Usuario – la interfaz de usuario del lado del cliente para una aplicación de red sofisticada. Por ejemplo, el navegador web para acceder a la World Wide Web.
  • Agente de cliente – la interfaz de usuario del lado del cliente para una aplicación basada en el servidor, como un motor de búsqueda o la búsqueda de ofertas. El lado del servidor suele limitarse a realizar una búsqueda en una base de datos mantenida de forma independiente por algún tipo de rastreador web que supervisa los cambios en los sitios web.
  • Rastreador web – un programa basado en el servidor que explora de forma continua o periódica la web o partes seleccionadas de la misma en busca de información de interés. Esto no es realmente un agente ya que no está actuando en nombre de un usuario discreto, pero está recogiendo datos que pueden ser utilizados para una amplia audiencia de usuarios.
  • Agente conversacional – un programa interactivo que presenta una interfaz muy fácil de usar y luego realiza tareas específicas según lo indicado por el usuario. Dado que responde directamente a las peticiones del usuario, realmente no opera de forma autónoma.
  • Agente Inteligente – un programa que realiza una tarea o persigue objetivos con una dirección específica mínima, utilizando técnicas inteligentes o heurísticas para que el usuario quede muy impresionado de que un ordenador pueda ser tan inteligente. Un AI no necesita ser móvil ya que se puede acceder a la gran cantidad de información de la web de forma remota.
  • Agente Móvil – un programa autónomo que migra entre sistemas anfitriones en el proceso de perseguir uno o más objetivos. Un MA no necesita ser verdaderamente inteligente, sino tener la suficiente flexibilidad para lidiar con un entorno en el que las cosas pueden cambiar o ser inaccesibles en cualquier momento.
  • Sistema Multi-Agente (cerrado) – un entorno de aplicación estrechamente integrado en el que partes de la aplicación se parcelan a mini-programas que persiguen sub-objetivos.
  • Sistema Multi-Agente Abierto – un entorno de aplicación distribuido y poco integrado en el que programas construidos independientemente (agentes) pueden participar en interacciones estructuradas en las que los agentes tienen un grado significativo de interés común (comunidad).
  • Agente de Software Definitivo – un programa extremadamente inteligente y flexible que puede actuar de forma muy parecida a como lo hace una persona real, pero limitado al ciberespacio. Además, un USA tiene la capacidad de dividirse dinámicamente en subagentes que pueden realizar subtareas y operar en paralelo con cualquier grado de interacción. Un USA también puede clonarse a sí mismo (o, preferiblemente, ser clonado automáticamente por la infraestructura de agentes) para explotar el paralelismo inherente a la red. Los subagentes divididos o clonados pueden recombinarse en cualquier punto según convenga a la función o al rendimiento del agente global. Un EUA también puede interactuar con otros EUA independientes (una comunidad de EUA) para los que el EUA no tiene conocimiento preprogramado. Se puede utilizar una amplia gama de lenguajes de programación, técnicas de implementación y protocolos de comunicación. Cada USA es totalmente interoperable con cualquier otro USA, sujeto sólo a controles administrativos y límites de recursos.
  • Robot – un agente de software inteligente que es móvil en el mundo real. Los robots no pueden clonarse a sí mismos, hoy en día, pero en teoría un robot PODRÍA construir físicamente copias de sí mismo O comprar o alquilar robots «vacíos» (o de cáscara) (como un coche de alquiler). En teoría, un robot podría «transportarse» a otro lugar simplemente adquiriendo una carcasa vacía en otro lugar y luego «cargar» su estado de software a ese otro robot «vacío». El robot podría optar por desocupar el caparazón original o podría simplemente utilizar este mecanismo para la clonación.
  • Comunidad de robots – robots que pueden interactuar en busca de intereses comunes.
  • Robot/Agente híbrido – un robot que puede interactuar con uno o más agentes de software, o un agente de software que puede interactuar con uno o más robots. ¡Las cosas se ponen realmente interesantes cuando una comunidad de robots interactúa con una comunidad de agentes de software! También hay que tener en cuenta que un robot podría transferir su estado de software a un agente de software y luego operar en el ciberespacio COMO si fuera un agente de software y luego DEVOLVER su estado al robot. Un agente software podría hacer lo contrario: transferir su estado a un robot físico, operar el robot y luego devolver su estado al ciberespacio. Un robot puede actuar como si fuera un agente de software utilizando el acceso remoto. Y un agente de software también puede operar un robot físico directamente desde el ciberespacio, también utilizando el acceso remoto. De hecho, un solo agente de software (o un equipo de agentes) podría operar múltiples robots en el mismo o en diferentes lugares, incluyendo el control de la interacción de esos robots.

Para una visión aún más temprana sobre el tema, véase el documento de Stan Franklin y Art Graesser titulado «Is it an Agent, or just a Program? A Taxonomy for Autonomous Agents» (¿Es un agente o sólo un programa? Una taxonomía para los agentes autónomos).

También puede consultarse el artículo de la Wikipedia sobre el agente de software.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.