Co to jest agent programowy?

(Ten dokument ma charakter historyczny – napisałem go w 2005 r. i opublikowałem w mojej nieistniejącej już witrynie internetowej pod adresem http://agtivity.com/agdef.htm, ale nadal powinien mieć przynajmniej pewne znaczenie).)

Aby zapoznać się z nowszymi przemyśleniami na ten temat, przeczytaj te nowsze prace:

  • 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.

System agentów programowych (lub Multi-Agent System (MAS)) jest środowiskiem obliczeniowym (takim jak sieć WWW lub sieć nakładkowa grid computing environment), w którym poszczególne agenty programowe współdziałają ze sobą, czasami w sposób kooperacyjny, czasami w sposób konkurencyjny, a czasami autonomicznie realizując swoje indywidualne cele, uzyskując dostęp do zasobów i usług środowiska, a czasami produkując wyniki dla podmiotów, które zainicjowały te agenty programowe.

Prostszą, bardziej uporządkowaną definicją jest stwierdzenie, że agent programowy to program komputerowy, który wykazuje cechy agencji lub agencji programowej.

Innym podmiotem może być człowiek, tradycyjny, „starszy” program komputerowy, robot lub inny agent programowy. Agent oprogramowania jest podobny do robota, ale działa w cyberprzestrzeni, w sieci komputerowej.

Agent oprogramowania jest autonomiczny lub przynajmniej półautonomiczny, co oznacza, że może wykonywać zadania w dążeniu do celu przy minimalnym lub żadnym bezpośrednim nadzorze lub bezpośredniej kontroli, ale może współdziałać z innym podmiotem w celu uzyskania wskazówek lub wyników wyjściowych. Może mieć lub nie mieć interfejsu użytkownika.

Agent oprogramowania może być w rzeczywistości interaktywny lub konwersacyjny, działający w imieniu innego podmiotu, który nie jest bezpośrednio widoczny dla „użytkownika” wchodzącego w interakcję z agentem. Byłoby to bezpośrednią analogią do tego, jak działają agenci w świecie rzeczywistym.

Agent programowy może potrzebować wysokiego poziomu „inteligencji”, aby poradzić sobie z dynamicznym środowiskiem, w którym nieoczekiwane jest normą. Ale jest to również możliwe, aby mieć „głupi” agent oprogramowania, który działa autonomicznie do osiągnięcia dobrze zdefiniowanych zadań i żąda nadzoru tylko wtedy, gdy wykryje nieoczekiwane warunki.

Agent oprogramowania może być „mobilny” i poruszać się lub być przenoszony w sieci, ale agent oprogramowania może być również „statyczny” i wykonywać całą swoją pracę na jednym komputerze-hoście w sieci, w tym dostęp do zasobów, które są na hostach innych niż host, na którym agent jest wykonywany.

Agent interaktywny lub konwersacyjny może w rzeczywistości być jedynie „asystentem”, pod bezpośrednią kontrolą i w imieniu tego samego użytkownika. Byłby to mniej autonomiczny tryb działania, ale interaktywny agent może być ewentualnie skierowany do odejścia i osiągnięcia jakiegoś celu i pracy w trybie autonomicznym podczas robienia tego. Kwestia „agencji” to głównie stopień, w jakim NIE ma relacji jeden do jednego między konwersją między użytkownikiem a agentem i faktycznym zestawem zadań wykonywanych przez rzekomego agenta. Asystent robi dokładnie to, co mu się powie. Agent otrzymuje cel i ma elastyczność co do sposobu osiągnięcia tego celu.

Agent może być pojedynczym agentem (jeden agent wykonujący szereg zadań w celu osiągnięcia celu), częścią zespołu agentów (stosunkowo mały zespół ze specjalizacją wśród członków zespołu), lub bardzo małą częścią armady agentów (duża liczba agentów ze znaczną ilością równoległości dla nawet konkretnych zadań). Nawet pojedynczy agent może wchodzić w interakcje z innymi agentami, które są odpowiedzialne przed jakimś innym podmiotem. To, co odróżnia zespół agentów od armady agentów, to fakt, że są one odpowiedzialne przed pojedynczym podmiotem.

Możemy mówić o społeczności agentów lub społeczności agentów oprogramowania lub systemu wieloagentowego, w którym wiele niezależnych agentów przynajmniej wydaje się współpracować (i/lub konkurować) w dążeniu do wspólnych celów. Społeczność może być ograniczona do wcześniej zaplanowanych członków, lub może być otwarta i pozwalać arbitralnym, zewnętrznym agentom na „dołączenie” do otwartej społeczności agentów programowych.

Agent programowy może działać wiecznie lub w nieskończoność, ciągle dążąc do swoich celów, ale jest to również możliwe dla instancji agenta, aby zakończyć, gdy jego cele zostały osiągnięte lub nie są już potrzebne.

Charakterystyki, które są często wymieniane jako odpowiednie dla agentów programowych obejmują: reaktywne, rozważne, kierujące się celem, adaptacyjne, autonomiczne, uczące się, komunikacyjne, konkurencyjne i kolaboracyjne zachowania.

Agenty programowe (i systemy agentów programowych) powinny być zaprojektowane przy użyciu architektury modułowej.

Agenty programowe są następnym krokiem ewolucyjnym poza obiektami i programami. Obiekty mają tendencję do bycia pasywnymi z tylko jednym obiektem aktywnym w tym samym czasie, a obiekty mają tendencję do bycia „ukrytymi” wewnątrz programów. Programy są względnie statyczne, a projektowanie rozproszonych obliczeń z nieokreśloną liczbą współpracujących ze sobą programów nie jest łatwym zadaniem. Agenci programowi oferują możliwości równoległości i współpracy międzyprogramowej, i to na dużą skalę, i to w sposób łatwy do wykonania oraz solidny, niezawodny, elastyczny i bezpieczny.

Do dyskusji na temat kwestii związanych z definiowaniem tego, czym agent jest lub nie jest, kliknij tutaj.

Formy agentów programowych

Jako że nie istnieje jednoznaczna definicja agenta programowego, poniżej przedstawiam różne formy agentów programowych, które do tej pory zidentyfikowałem:

  • Agent systemowy – stale działające zadanie w tle lub demon, który zazwyczaj ma wyspecjalizowany, zaprogramowany cel…
  • Agent użytkownika – interfejs użytkownika po stronie klienta dla zaawansowanej aplikacji sieciowej. Na przykład przeglądarka internetowa umożliwiająca dostęp do sieci World Wide Web.
  • Client Agent – interfejs użytkownika po stronie klienta dla aplikacji opartej na serwerze, takiej jak wyszukiwarka lub wyszukiwanie transakcji. Po stronie serwera jest to zazwyczaj po prostu wykonywanie odsyłaczy do bazy danych, która jest niezależnie utrzymywana przez jakąś formę programu indeksującego, który monitoruje zmiany na stronach internetowych.
  • Web Crawler – program oparty na serwerze, który w sposób ciągły lub okresowy skanuje sieć lub wybrane jej części w poszukiwaniu interesujących informacji. Nie jest to tak naprawdę agent, ponieważ nie działa w imieniu konkretnego użytkownika, ale zbiera dane, które mogą być wykorzystane dla szerokiej grupy użytkowników.
  • Agent konwersacyjny – interaktywny program, który prezentuje bardzo przyjazny interfejs, a następnie wykonuje określone zadania zgodnie z poleceniami użytkownika. Ponieważ odpowiada on bezpośrednio na żądania użytkownika, nie działa autonomicznie.
  • Agent inteligentny – program, który wykonuje zadanie lub dąży do osiągnięcia celu przy minimalnym określonym kierunku, używając inteligentnych lub heurystycznych technik, tak że użytkownik jest pod wrażeniem, że komputer może być tak inteligentny. IA nie musi być mobilny, ponieważ ogromna ilość informacji w sieci może być dostępna zdalnie.
  • Agent mobilny – autonomiczny program, który migruje pomiędzy systemami hosta w procesie realizacji jednego lub więcej celów. Agent mobilny nie musi być prawdziwie inteligentny, ale musi mieć wystarczającą elastyczność, aby poradzić sobie w środowisku, w którym wszystko może się zmienić lub być niedostępne w dowolnym momencie.
  • (Zamknięty) System wieloagentowy – ściśle zintegrowane środowisko aplikacji, w którym części aplikacji są rozdzielone na mini-programy realizujące podrzędne cele.
  • Otwarty System Multi-Agent – luźno zintegrowane, rozproszone środowisko aplikacji, w którym niezależnie skonstruowane programy (agenci) mogą uczestniczyć w zorganizowanych interakcjach, w których agenci mają znaczący stopień wspólnych interesów (społeczność).
  • Ultimate Software Agent – niezwykle inteligentny i elastyczny program, który może działać podobnie jak prawdziwy człowiek, ale ograniczony do cyberprzestrzeni. Ponadto, USA ma możliwość dynamicznego dzielenia się na podagentów, którzy mogą wykonywać podrzędne zadania i działać równolegle przy dowolnym stopniu interakcji. USA może również klonować samą siebie (lub, najlepiej, być automatycznie klonowana przez infrastrukturę agentową), aby wykorzystać wrodzony paralelizm sieci. Rozdzieleni lub sklonowani podagenci mogą być ponownie połączeni w dowolnym punkcie, co jest odpowiednie dla funkcji lub wydajności całego agenta. USA może również wchodzić w interakcje z innymi, niezależnymi USA (społeczność USA), dla których USA nie ma zaprogramowanej świadomości. Może być użyty szeroki zakres języków programowania, technik implementacji i protokołów komunikacyjnych. Każde USA jest w pełni interoperacyjne z każdym innym USA, z zastrzeżeniem jedynie kontroli administracyjnej i limitów zasobów.
  • Robot – inteligentny agent programowy, który jest mobilny w świecie rzeczywistym. Obecnie roboty nie mogą się klonować, ale w teorii robot mógłby fizycznie budować kopie samego siebie LUB kupować lub wynajmować „puste” (lub surowe) roboty (podobnie jak wypożyczalnia samochodów). W teorii, robot mógłby „przetransportować” się do innej lokalizacji po prostu nabywając pustą obudowę w innej lokalizacji, a następnie „przesłać” swój stan oprogramowania do tego innego „pustego” robota. Robot może zdecydować się na opuszczenie oryginalnej powłoki lub może po prostu użyć tego mechanizmu do klonowania.
  • Społeczność robotów – roboty, które mogą współdziałać w dążeniu do wspólnych interesów.
  • Hybrydowy robot/agent – robot, który może współdziałać z jednym lub więcej agentami programowymi, lub agent programowy, który może współdziałać z jednym lub więcej robotami. Sprawy stają się naprawdę interesujące, gdy społeczność robotów wchodzi w interakcję ze społecznością agentów programowych! Zauważmy też, że robot może przekazać swój stan oprogramowania agentowi programowemu, a następnie działać w cyberprzestrzeni JAKBY był agentem programowym, a następnie ZWRACAĆ swój stan z powrotem do robota. Agent programowy mógłby zrobić coś odwrotnego: przenieść swój stan do fizycznego robota, obsługiwać go, a następnie zwrócić swój stan z powrotem do cyberprzestrzeni. Robot może działać tak, jakby był agentem programowym używającym zdalnego dostępu. A agent programowy może również obsługiwać fizycznego robota bezpośrednio z cyberprzestrzeni, również używając zdalnego dostępu. W rzeczywistości pojedynczy agent programowy (lub zespół agentów) może obsługiwać wiele robotów w tej samej lub różnych lokalizacjach, w tym kontrolować interakcję tych robotów.

Jeszcze wcześniejsze spojrzenie na ten temat można znaleźć w pracy Stana Franklina i Arta Graessera zatytułowanej „Is it an Agent, or just a Program? A Taxonomy for Autonomous Agents.”

Zobacz również artykuł w Wikipedii dotyczący Software Agent.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.