(Ce document est une référence historique – je l’ai écrit en 2005 et publié sur mon site web maintenant disparu à http://agtivity.com/agdef.htm, mais il devrait encore avoir au moins une certaine pertinence actuelle.)
Pour une réflexion plus récente sur ce sujet, lisez ces articles plus récents :
- Que sont l’autonomie et l’agence ?
- Entités intelligentes : Principaux, agents et assistants
- Qu’est-ce qu’un assistant numérique intelligent ?
Un agent logiciel (ou agent autonome ou agent intelligent) est un programme informatique qui travaille à la réalisation d’objectifs (par opposition à des tâches discrètes) dans un environnement dynamique (où le changement est la norme) pour le compte d’une autre entité (humaine ou informatique), éventuellement sur une période prolongée, sans supervision ou contrôle direct continu, et qui présente un degré significatif de flexibilité et même de créativité dans la manière dont il cherche à transformer les objectifs en tâches d’action.
Un système d’agents logiciels (ou système multi-agents (MAS)) est un environnement informatique (tel que le Web ou un réseau superposé d’environnement de calcul en grille) dans lequel des agents logiciels individuels interagissent les uns avec les autres, parfois de manière coopérative, parfois de manière compétitive, et parfois de manière autonome en poursuivant leurs objectifs individuels, en accédant aux ressources et aux services de l’environnement, et en produisant occasionnellement des résultats pour les entités qui ont initié ces agents logiciels.
Une définition plus simple et plus structurée consiste à dire qu’un agent logiciel est un programme informatique qui présente les caractéristiques de l’agence ou de l’agence logicielle.
L’autre entité peut être un humain, un programme informatique traditionnel, « hérité », un robot ou un autre agent logiciel. Un agent logiciel est similaire à un robot, mais fonctionne dans le cyberespace, sur un réseau informatique.
Un agent logiciel est autonome ou au moins semi-autonome, ce qui signifie qu’il peut effectuer des tâches dans la poursuite d’un objectif avec un minimum ou aucune supervision ou contrôle direct , mais peut interagir avec une autre entité pour obtenir des conseils ou des résultats de sortie. Il peut ou non avoir une interface utilisateur.
Un agent logiciel pourrait en fait être interactif ou conversationnel, agissant au nom d’une autre entité qui n’est pas directement apparente pour l' »utilisateur » qui interagit avec l’agent. Il s’agirait d’une analogie directe avec le fonctionnement des agents du monde réel.
Un agent logiciel peut avoir besoin d’un haut niveau d' »intelligence » afin de faire face à un environnement dynamique dans lequel l’inattendu est la norme. Mais il est également possible d’avoir un agent logiciel « muet » qui travaille de manière autonome pour accomplir des tâches bien définies et ne demande une supervision que lorsqu’il détecte des conditions inattendues.
Un agent logiciel peut être « mobile » et se déplacer ou être déplacé dans le réseau, mais un agent logiciel peut aussi être « statique » et faire tout son travail sur un ordinateur hôte du réseau, y compris accéder à des ressources qui se trouvent sur des hôtes autres que l’hôte sur lequel l’agent s’exécute.
Un agent interactif ou conversationnel peut en fait être simplement un « assistant », sous le contrôle direct et pour le compte du même utilisateur. Il s’agirait d’un mode de fonctionnement moins autonome, mais l’agent interactif pourrait éventuellement recevoir l’ordre d’aller atteindre un certain objectif et de travailler en mode autonome pendant ce temps. La question de l' »agence » est surtout la mesure dans laquelle il n’y a PAS de relation univoque entre la conversion entre l’utilisateur et l’agent et l’ensemble des tâches effectivement exécutées par le prétendu agent. Un assistant fait exactement ce qu’on lui dit. Un agent se voit attribuer un objectif et dispose d’une certaine flexibilité quant à la manière d’atteindre cet objectif.
Un agent peut être un agent unique (un agent effectuant une série de tâches pour atteindre un objectif), une partie d’un ensemble d’agents (une équipe relativement petite avec une spécialisation parmi les membres de l’équipe), ou une très petite partie d’une armada d’agents (un grand nombre d’agents avec une quantité significative de parallélisme pour même des tâches spécifiques). Même un agent unique peut interagir avec d’autres agents qui sont responsables d’une autre entité. Ce qui distingue un ensemble d’agents et une armada d’agents est qu’ils sont responsables devant une seule entité.
On peut parler d’une communauté d’agents ou d’une communauté d’agents logiciels ou d’un système multi-agents dans lequel de nombreux agents indépendants semblent au moins coopérer (et/ou être en compétition) dans la poursuite de buts communs. La communauté peut être limitée à des membres planifiés à l’avance, ou elle peut être ouverte et permettre à des agents arbitraires et externes de » rejoindre » la communauté ouverte des agents logiciels.
Un agent logiciel peut fonctionner pour toujours ou indéfiniment, poursuivant continuellement ses objectifs, mais il est également possible pour une instance d’un agent de se terminer une fois que ses objectifs ont été atteints ou ne sont plus nécessaires.
Les caractéristiques qui sont fréquemment mentionnées comme appropriées pour les agents logiciels comprennent : les comportements réactifs, délibératifs, axés sur les objectifs, adaptatifs, autonomes, d’apprentissage, communicatifs, compétitifs et collaboratifs.
Les agents logiciels (et les systèmes d’agents logiciels) devraient être conçus en utilisant une architecture modulaire.
Les agents logiciels sont la prochaine étape évolutive au-delà des objets et des programmes. Les objets ont tendance à être passifs, avec un seul objet actif à la fois, et les objets ont tendance à être « cachés » dans les programmes. Les programmes ont tendance à être relativement statiques et la conception d’un calcul distribué avec un nombre indéterminé de programmes collaborant n’est pas une tâche facile. Les agents logiciels offrent des possibilités de parallélisme et de collaboration inter-programmes, et à grande échelle, et de le faire facilement et d’une manière robuste, fiable, flexible et sécurisée.
Pour une discussion des questions liées à la définition de ce qu’est ou n’est pas un agent, cliquez ici.
Formes d’agents logiciels
Comme il n’existe pas de définition stricte d’un agent logiciel, voici les différentes formes d’agents logiciels que j’ai identifiées, à ce jour :
- Agent système – une tâche d’arrière-plan ou un démon fonctionnant en continu qui a généralement un objectif spécialisé et préprogrammé..
- Agent utilisateur – l’interface utilisateur côté client pour une application réseau sophistiquée. Par exemple, le navigateur web pour accéder au World Wide Web.
- Agent client – l’interface utilisateur côté client pour une application basée sur un serveur, comme un moteur de recherche ou la recherche de marchés. Le côté serveur est généralement simplement en train d’effectuer une consultation de base de données sur une base de données qui est indépendamment maintenue par une certaine forme de crawler web qui surveille les modifications des sites web.
- Crawler web – un programme basé sur le serveur qui scanne continuellement ou périodiquement le web ou des portions sélectionnées du web à la recherche d’informations d’intérêt. Ce n’est pas vraiment un agent puisqu’il n’agit pas au nom d’un utilisateur discret, mais il recueille des données qui peuvent être utilisées pour un large public d’utilisateurs.
- Agent conversationnel – un programme interactif qui présente une interface très conviviale puis exécute des tâches spécifiques selon les instructions de l’utilisateur. Puisqu’il répond directement aux demandes de l’utilisateur, il ne fonctionne pas vraiment de manière autonome.
- Agent intelligent – un programme qui exécute une tâche ou poursuit des objectifs avec un minimum de directives spécifiques, en utilisant des techniques intelligentes ou heuristiques à l’effet que l’utilisateur est très impressionné qu’un ordinateur puisse être si intelligent. Un IA n’a pas besoin d’être mobile puisque la vaste gamme d’informations sur le web peut être accessible à distance.
- Agent mobile – un programme autonome qui migre entre les systèmes hôtes dans le processus de poursuite d’un ou plusieurs objectifs. Un MA n’a pas besoin d’être vraiment intelligent, mais d’avoir suffisamment de flexibilité pour faire face à un environnement dans lequel les choses peuvent changer ou être inaccessibles à tout moment.
- Système multi-agents (fermé) – un environnement d’application étroitement intégré dans lequel des parties de l’application sont morcelées en mini-programmes qui poursuivent des sous-objectifs.
- Système multi-agents ouvert – un environnement d’application distribué, faiblement intégré, dans lequel des programmes construits indépendamment (agents) peuvent participer à des interactions structurées dans lesquelles les agents ont un degré significatif d’intérêt commun (communauté).
- Agent logiciel ultime – un programme extrêmement intelligent et flexible qui peut agir à peu près comme une personne réelle, mais contraint au cyberespace. En outre, un USA a la capacité de se diviser dynamiquement en sous-agents qui peuvent exécuter des sous-tâches et fonctionner en parallèle avec n’importe quel degré d’interaction. Un USA peut également se cloner (ou, de préférence, être cloné automatiquement par l’infrastructure d’agents) pour exploiter le parallélisme inhérent au réseau. Les sous-agents divisés ou clonés peuvent être recombinés à tout moment en fonction de la fonction ou des performances de l’agent global. Un USA peut également interagir avec d’autres USA indépendants (une communauté d’USA) pour lesquels l’USA n’a aucune connaissance préprogrammée. Un large éventail de langages de programmation, de techniques de mise en œuvre et de protocoles de communication peut être utilisé. Chaque USA est entièrement interopérable avec tous les autres USA, sous réserve uniquement des contrôles administratifs et des limites de ressources.
- Robot – un agent logiciel intelligent qui est mobile dans le monde réel. Les robots ne peuvent pas se cloner, aujourd’hui, mais en théorie un robot POURRAIT physiquement construire des copies de lui-même OU acheter ou louer des robots « vides » (ou coquilles) (ala une location de voiture). En théorie, un robot pourrait se « transporter » vers un autre endroit simplement en acquérant une coquille vide à un autre endroit, puis « télécharger » son état logiciel vers cet autre robot « vide ». Le robot pourrait choisir de libérer la coquille d’origine ou pourrait simplement utiliser ce mécanisme pour le clonage.
- Communauté de robots – robots qui peuvent interagir dans la poursuite d’intérêts communs.
- Robot/Agent hybride – un robot qui peut interagir avec un ou plusieurs agents logiciels, ou un agent logiciel qui peut interagir avec un ou plusieurs robots. Les choses deviennent vraiment intéressantes lorsqu’une communauté de robots interagit avec une communauté d’agents logiciels ! Notez également qu’un robot peut transférer son état logiciel à un agent logiciel, puis opérer dans le cyberespace COMME s’il s’agissait d’un agent logiciel, avant de RETOURNER son état au robot. Un agent logiciel pourrait faire l’inverse : transférer son état dans un robot physique, faire fonctionner le robot, puis renvoyer son état dans le cyberespace. Un robot peut agir COMME S’il était un agent logiciel utilisant un accès à distance. Et un agent logiciel peut également faire fonctionner un robot physique directement depuis le cyberespace, en utilisant également un accès à distance. En fait, un seul agent logiciel (ou une équipe d’agents) pourrait faire fonctionner plusieurs robots dans le même endroit ou dans des endroits différents, y compris contrôler l’interaction de ces robots.
Pour une vue encore plus ancienne sur le sujet, voir l’article de Stan Franklin et Art Graesser intitulé « Is it an Agent, or just a Program ? A Taxonomy for Autonomous Agents. »
Voir aussi l’article de Wikipédia sur l’agent logiciel.