(Este documento é para referência histórica – Escrevi-o em 2005 e publiquei-o no meu agora extinto website em http://agtivity.com/agdef.htm, mas ainda deve ter pelo menos alguma relevância actual.)
Para uma reflexão mais recente sobre este tópico leia estes novos artigos:
- O que são Autonomia e Agência?
- Intelligent Entities: Principals, Agents, and Assistants
- What Is an Intelligent Digital Assistant?
A Software Agent (ou Agente Autônomo ou Agente Inteligente) é um programa de computador que trabalha com objetivos (ao contrário de tarefas discretas) em um ambiente dinâmico (onde a mudança é a norma) em nome de outra entidade (humana ou computacional), possivelmente durante um longo período de tempo, sem supervisão ou controle direto contínuo, e exibe um grau significativo de flexibilidade e até mesmo criatividade em como procura transformar objetivos em tarefas de ação.
Um Sistema Agente de Software (ou Sistema Multi-Agente (MAS)) é um ambiente computacional (como a Web ou uma rede superposta de ambiente de computação em grade) no qual agentes de software individuais interagem entre si, às vezes de forma cooperativa, às vezes de forma competitiva e às vezes buscando de forma autônoma seus objetivos individuais, acessando recursos e serviços do ambiente, e ocasionalmente produzindo resultados para as entidades que iniciaram esses agentes de software.
Uma definição mais simples e estruturada é dizer que um agente de software é um programa de computador que exibe as características de agência ou agência de software.
A outra entidade pode ser um humano, um programa de computador tradicional, um “legado”, um robô, ou outro agente de software. Um agente de software é semelhante a um robô, mas opera no ciberespaço, em uma rede de computadores.
Um agente de software é autônomo ou pelo menos semi-autônomo, ou seja, pode realizar tarefas na busca de um objetivo sem supervisão ou controle direto, mas pode interagir com outra entidade para obter orientação ou resultados de saída. Pode ou não ter uma interface de usuário.
Um agente de software pode, de fato, ser interativo ou conversacional, agindo em nome de outra entidade que não seja diretamente aparente para o “usuário” interagindo com o agente. Isto seria um análogo direto a como os agentes do mundo real funcionam.
Um agente de software pode precisar ter um alto nível de “inteligência” para lidar com um ambiente dinâmico no qual o inesperado é a norma. Mas também é possível ter um agente de software “idiota” que trabalha autonomamente para realizar tarefas bem definidas e solicita supervisão apenas quando detecta condições inesperadas.
Um agente de software pode ser “móvel” e mover-se ou ser movido pela rede, mas um agente de software também pode ser “estático” e fazer todo o seu trabalho em um computador host na rede, incluindo o acesso a recursos que estão em hosts diferentes do host no qual o agente está executando.
Um agente interativo ou de conversação pode na verdade ser apenas um “assistente”, sob controle direto e em nome do mesmo usuário. Este seria um modo de operação menos autônomo, mas o agente interativo poderia possivelmente ser direcionado para sair e atingir algum objetivo e trabalhar em um modo autônomo enquanto o faz. A questão da “agência” é principalmente a medida em que NÃO existe uma relação de um para um entre a conversão entre o usuário e o agente e o conjunto real de tarefas realizadas pelo alegado agente. Um assistente faz exatamente o que lhe é dito. Um agente recebe um objetivo e tem flexibilidade para atingir esse objetivo.
Um agente pode ser um único agente (um agente fazendo uma série de tarefas para atingir um objetivo), parte de um conjunto de agentes (uma equipe relativamente pequena com especialização entre os membros da equipe), ou uma parte muito pequena de uma armada de agentes (um grande número de agentes com uma quantidade significativa de paralelismo até mesmo para tarefas específicas). Mesmo um único agente pode interagir com outros agentes que são responsáveis perante alguma outra entidade. O que distingue um conjunto de agentes e uma armada de agentes é que eles são responsáveis por uma única entidade.
Podemos falar de uma comunidade de agentes ou uma comunidade de agentes de software ou sistema multi-agentes em que muitos agentes independentes pelo menos parecem estar cooperando (e/ou competindo) na busca de objetivos comuns. A comunidade pode ser limitada a membros pré-planejados, ou pode ser aberta e permitir que agentes externos arbitrários ‘se juntem’ à comunidade aberta de agentes de software.
Um agente de software pode funcionar para sempre ou indefinidamente, perseguindo continuamente seus objetivos, mas também é possível que uma instância de um agente termine uma vez que seus objetivos tenham sido alcançados ou não sejam mais necessários.
Características que são frequentemente mencionadas como apropriadas para agentes de software incluem: comportamentos reativos, deliberativos, direcionados a objetivos, adaptativos, autônomos, de aprendizagem, comunicativos, competitivos e colaborativos.
Os agentes de software (e sistemas de agentes de software) devem ser projetados usando uma arquitetura modular.
Os agentes de software são o próximo passo evolutivo além de objetos e programas. Objetos tendem a ser passivos com apenas um objeto ativo de cada vez, e objetos tendem a ser ‘escondidos’ dentro de programas. Programas tendem a ser relativamente estáticos e projetar um cálculo distribuído com um número indeterminado de programas colaboradores não é uma tarefa fácil. Agentes de software oferecem oportunidades para paralelismo e colaboração entre programas, e em grande escala, e para fazê-lo de forma fácil e robusta, confiável, flexível e segura.
Para discussão de questões relacionadas à definição do que um agente é ou não é, clique aqui.
Forms of Software Agents
Como não há uma definição dura de um agente de software, aqui estão as várias formas de agente de software que identifiquei, até o momento:
- System Agent – uma tarefa de fundo em execução contínua ou daemon que tipicamente tem um propósito especializado e pré-programado..
- User Agent – a interface de usuário do lado do cliente para uma aplicação de rede sofisticada. Por exemplo, o navegador web para acessar a World Wide Web.
- Client Agent – a interface de usuário do lado do cliente para uma aplicação baseada em servidor, como um mecanismo de busca ou de busca de negócios. O lado do servidor geralmente é simplesmente executar uma pesquisa de banco de dados em um banco de dados que é mantido independentemente por alguma forma de web crawler que monitora mudanças em sites.
- Web Crawler – um programa baseado em servidor que continuamente ou periodicamente varre a web ou partes selecionadas da web procurando por informações de interesse. Este não é realmente um agente, pois não está agindo em nome de um usuário discreto, mas está coletando dados que podem ser usados para um amplo público de usuários.
- Conversational Agent – um programa interativo que apresenta uma interface muito amigável e depois executa tarefas específicas conforme as instruções do usuário. Como ele responde diretamente às solicitações do usuário, ele realmente não opera de forma autônoma.
- Agente Inteligente – um programa que executa uma tarefa ou busca objetivos com direção específica mínima, usando técnicas inteligentes ou heurísticas para que o usuário fique muito impressionado que um computador possa ser tão inteligente. Um IA não precisa ser móvel uma vez que a vasta gama de informações na web pode ser acessada remotamente.
- Mobile Agent – um programa autônomo que migra entre sistemas host no processo de busca de um ou mais objetivos. Um MA não precisa ser verdadeiramente inteligente, mas tem flexibilidade suficiente para lidar com um ambiente no qual as coisas podem mudar ou ser inacessíveis a qualquer momento.
- (Fechado) Sistema Multi-Agente – um ambiente de aplicação fortemente integrado no qual partes da aplicação são associadas a mini-programas que perseguem sub-objectivos.
- Sistema Multi-Agente Aberto – um ambiente de aplicação distribuída e pouco integrado no qual programas (agentes) construídos independentemente podem participar em interações estruturadas nas quais os agentes têm um grau significativo de interesse comum (comunidade).
- Agente de Software Final – um programa extremamente inteligente e flexível que pode agir muito da maneira que uma pessoa real age, mas limitado ao ciberespaço. Além disso, um EUA tem a capacidade de se dividir dinamicamente em sub-agentes que podem realizar subtarefas e operar em paralelo com qualquer grau de interação. Um EUA também pode clonar-se a si mesmo (ou, de preferência, ser automaticamente clonado pela infra-estrutura do agente) para explorar o paralelismo inerente da rede. Subagentes divididos ou clonados podem ser recombinados em qualquer ponto, conforme seja apropriado para a função ou desempenho do agente em geral. Um EUA também pode interagir com outros EUA independentes (uma comunidade de EUA) para os quais os EUA não têm consciência pré-programada. Uma ampla gama de linguagens de programação, técnicas de implementação e protocolos de comunicação pode ser usada. Cada EUA é totalmente interoperável com todos os outros EUA, sujeito apenas a controles administrativos e limites de recursos.
- Robô – um agente de software inteligente que é móvel no mundo real. Os robôs não podem se clonar, hoje em dia, mas em teoria um robô COULD constrói fisicamente cópias de si mesmo OU compra ou aluga robôs “vazios” (ou shell) (ala um carro alugado). Em teoria, um robô poderia se “transportar” para outro local simplesmente adquirindo uma shell vazia em outro local e então “carregar” seu estado de software para aquele outro robô “vazio”. O robô pode optar por desocupar a shell original ou pode simplesmente usar esse mecanismo para clonagem.
- Comunidade de Robôs – robôs que podem interagir em busca de interesses comuns.
- Robô Híbrido/Agente – um robô que pode interagir com um ou mais agentes de software, ou um agente de software que pode interagir com um ou mais robôs. As coisas ficam realmente interessantes quando uma comunidade de robôs interage com uma comunidade de agentes de software! Note também que um robô pode transferir seu estado de software para um agente de software e então operar no ciberespaço como se fosse um agente de software e então VOLTAR seu estado de volta para o robô. Um agente de software poderia fazer o oposto: transferir seu estado para um robô físico, operar o robô, e então devolver seu estado de volta ao ciberespaço. Um robô pode agir como se fosse um agente de software usando acesso remoto. E um agente de software também pode operar um robô físico diretamente do ciberespaço, também usando acesso remoto. De facto, um único agente de software (ou equipa de agentes) pode operar vários robôs no mesmo local ou em locais diferentes, incluindo controlar a interacção desses robôs.
Para uma visão ainda anterior sobre o tópico veja o artigo de Stan Franklin e Art Graesser intitulado “Será um Agente, ou apenas um Programa? A Taxonomy for Autonomous Agents”
Veja também o artigo da Wikipedia para Software Agent.