Agenci, do usług!
01.09.2025 | Małgorzata Stolarska
Wstęp
Pojawienie się Chata GPT w 2022 roku było momentem przełomowym w świecie technologii. Sztuczna inteligencja, jako termin, zdominowała media społecznościowe, zmieniła sposób pozyskiwania wiedzy i… odrabiania zadań domowych. Jednocześnie stała się impulsem dla wielu nowych projektów, w szczególności związanych z budową chatbotów.
I choć po efekcie „wow” zazwyczaj przychodzi ostudzenie emocji (szczególnie, gdy orientujemy się, że za fasadą zgrabnych słów - poprzez tzw. halucynacje - jesteśmy wpuszczani w maliny), warto zastanowić się nad potencjałem modeli językowych.
Co takiego się stało wraz z ich pojawieniem? Każdy model sztucznej inteligencji jest oparty o algorytmy matematyczne, jednak w przypadku modeli językowych dzieje się rodzaj magii. Choć pod spodem każde słowo to „tylko” szereg liczb, algorytm odzwierciedla ich znaczenia i powiązania między słowami. To sprawia, że model – przechodząc na poziom języka naturalnego – jest w stanie operować abstrakcjami. Myślenie abstrakcyjne jest natomiast podstawą rozumowania!
Tak więc, to nie sama zgromadzona wiedza (mniej lub bardziej aktualna) stanowi o mocy dużych modeli językowych, lecz sam fakt operowania językiem naturalnym. Dzięki niemu nie tylko możemy komunikować się z maszynami, ale przede wszystkim delegować na nie zadania wymagające planowania, rozumowania i podejmowania decyzji. Warto więc pomyśleć o modelu językowym nie jak o źródle wiedzy, ale jak o cyfrowym mózgu, potrafiącym m.in. interpretować i przekształcać złożone komunikaty, rozumieć kontekst, dostrzegać wzorce i adaptować się do sytuacji.
Tak dochodzimy do koncepcji agentów AI.
Czym jest agent AI?
To system lub komponent systemu komputerowego, wykorzystujący najczęściej duży model językowy lub multimodalny (czyli przetwarzający także obraz lub dźwięk), zdolny do autonomicznego wykonywania określonych zadań, podejmowania działań z użyciem dostarczonych narzędzi i wchodzenia w interakcje ze światem zewnętrznym. W zależności od stopnia autonomiczności, agent może wykonywać zadania samodzielnie lub pod nadzorem człowieka, podejmować inicjatywę, a także dostosowywać się do aktualnych warunków.
Przykładem agenta może być system, który samodzielnie przeszuka strony internetowe pod kątem ważnych dla nas informacji i zdecyduje, które przekazać nam w postaci newsletteru, przesyłanego raz w tygodniu, a o których poinformować nas niezwłocznie np. na Slacku.
W przykładzie powyżej agent realizuje określony zestaw zadań. Tworzenie uniwersalnych agentów, wykonujących dowolne zadania, nie jest raczej możliwe przy obecnej technologii, jednakże możemy tworzyć całe zespoły wyspecjalizowanych agentów, komunikujących się ze sobą i realizujących wspólnie cel.
Przykładem zespołu współpracujących agentów może być system wsparcia technicznego, który po otrzymaniu zgłoszenia od użytkownika, może podjąć następujące działania:
- dopytać użytkownika o dodatkowe szczegóły,
- przejrzeć bazę wiedzy i zasugerować rozwiązanie,
- automatycznie sprawdzić działanie wybranych serwisów,
- jeśli to możliwe, podjąć działania naprawcze (np. zrestartować wybraną usługę),
- utworzyć odpowiednie zgłoszenie w systemie, nadając mu kategorię i priorytet,
- dołączyć do niego zebrane logi,
- poinformować o awarii odpowiednie osoby,
- przygotować wskazówki dla obsługi technicznej,
- przygotować propozycję maila z odpowiedzią.
Sercem każdego agenta jest prompt (lub często zestaw promptów), czyli instrukcje dla modelu językowego, z opisem celu zadania, regułami postępowania, informacją o dostępnych narzędziach, do którego dołączany jest kontekst zadania. W odpowiedzi na prompt, model językowy wykonuje swoje zadanie krok po kroku.
Warto przyjrzeć się bliżej działaniu agentów…
Co wyróżnia systemy agentowe?
Autonomia
Agenci AI samodzielnie decydują o sposobie realizacji zadania i jego zakończeniu. Bez interakcji z człowiekiem mogą podejmować kolejne kroki, a także – otrzymując informację zwrotną – samodzielnie reagować na błędy, poprawiać swoje działanie lub szukać alternatywnych rozwiązań.
W praktyce agenci mogą działać mniej lub bardziej autonomicznie, przy czym granice ich autonomiczności wyznaczone są przez nasze zaufanie i dostarczone im narzędzia. Ostatecznie to człowiek decyduje, jakie zadania agent może wykonywać samodzielnie i gdzie kończy się jego swoboda.
Planowanie
Agent AI generuje plan działań na podstawie swojej wiedzy, kontekstu oraz dostarczonych narzędzi. Potrafi zrozumieć cel, który ma osiągnąć, rozbić złożone zadanie na mniejsze i ustalić ich kolejność, a następnie, realizując zadania w sposób iteracyjny, monitorować postępy w drodze do celu i korygować swoje działania. Jednocześnie cechuje go zdolność do dynamicznej zmiany planu, np. na skutek zmiany warunków lub nowych informacji.
Jak widać, agent nie działa deterministycznie wg sztywnego algorytmu. Nie działa też chaotycznie, bowiem jego działanie jest metodyczne.
Pamięć
Pamięć jest kluczowym elementem agenta, który pozwala na utrzymanie kontekstu, uczenie się na podstawie interakcji oraz zwiększanie skuteczności działania w dłuższym horyzoncie czasowym.
Jak zorganizowana jest pamięć?
Dla iteracyjnego działania, agent potrzebuje kontekstu zadania, ostatnich wiadomości, informacji o podjętych akcjach i ich skutkach. Składają się one na pamięć krótkoterminową, typowo przekazywaną do modelu językowego przy każdym kolejnym zapytaniu. W prostych przypadkach będzie to po prostu historia konwersacji. W przypadkach bardziej złożonych lub wymagających pracy z obszernymi zasobami, problemem może okazać się ograniczone okno kontekstu (czyli limit wielkości promptu) lub ograniczona zdolność modelu do utrzymania uwagi. W takich przypadkach stosuje się podsumowania wcześniejszej konwersacji, streszczenia lub mechanizmy cache’owania kluczowych informacji.
Osobnym rodzajem jest pamięć długoterminowa agenta, umożliwiająca mu przechowywanie wspomnień, informacji o użytkowniku, istotnych faktów lub logów z działania. Dzięki temu, że informacje te zachowywane są długoterminowo i są dostępne między różnymi sesjami interakcji, agent „uczy się” użytkownika oraz środowiska w którym działa, a jego działanie staje się bardziej zindywidualizowane, inteligentniejsze i spójne. Zbierając doświadczenia z wcześniejszych interakcji, agent może się doskonalić, zwiększając swoją użyteczność.
Ponieważ pamięć długoterminowa rozrasta się z czasem i nie ma możliwości dostarczania jej w całości do modelu, kluczowa jest możliwość jej szybkiego przeszukiwania. Z tego tytułu, stosuje się często połączenie klasycznej bazy danych (relacyjnej lub dokumentowej) z bazą wektorową, a czasami również bazą grafową oraz wzbogaca się dane o kategorie, słowa kluczowe, tagi, hierarchię tematów itp., pozwalające na dodatkowe filtrowanie.
Czym są bazy wektorowe i grafowe?
Baza wektorowa działa w taki sposób, że dane zapisywane są w niej jako wielowymiarowe wektory, mające tę właściwość, że treści podobne znaczeniowo (np. „zbiera się na deszcz” i „zaraz zacznie padać”) reprezentowane są przez wektory skierowane w podobnym kierunku. W momencie odpytywania takiej bazy, pytanie zamieniane jest również na wektor, po czym znajdowane są te wektory, które charakteryzują się najmniejszym kątem względem wektora-pytania. W ten sposób realizujemy wyszukiwanie semantyczne, tj. wyszukiwanie treści podobnych znaczeniowo, nawet jeśli różnią się słowami. Z kolei baza grafowa przechowuje dane w formie grafów, tj. węzłów i krawędzi, gdzie węzły to obiekty (np. ludzie, miejsca, rzeczy), a krawędzie to relacje między nimi (np. „zna”, „lubi”, „posiada”). Bazy grafowe są użyteczne tam, gdzie kluczowe są relacje między obiektami, szczególnie jeśli ich struktura jest złożona i dynamiczna. Przykładem może być analiza powiązań między ludźmi, sieci komputerowe, czy sieć transportowa.
Warto dodać, że wspomnienia i inne dane, zachowywane w pamięci długoterminowej, wymagają stałego porządkowania, aktualizowania, usuwania duplikatów i sprzeczności.
Zdolność do korzystania z narzędzi
Zdolność agenta AI do korzystania z narzędzi to cecha pozwalająca mu łączyć moc modeli językowych z rzeczywistymi funkcjami oraz aplikacjami. Dzięki niej, agent nie ogranicza się do generowania tekstu, ale – o ile ma dostęp do odpowiednich narzędzi – może np. przeszukiwać Internet, tworzyć pliki, integrować się z kalendarzem, wysyłać e-maile, korzystać z dowolnych aplikacji udostępnionych mu po API lub wchodzić w interakcję z innymi agentami.
W praktyce model językowy otrzymuje listę narzędzi (ich nazwy, krótki opis i interfejs) i sam decyduje, których i jak użyć. Po podjęciu decyzji o użyciu narzędzia, po prostu zwraca nazwę wybranego narzędzia oraz odpowiednie argumenty, z którymi ma być wywołane. Samo jego użycie ma miejsce już poza modelem, natomiast odpowiedź z narzędzia (bezpośrednio lub po wcześniejszym przekształceniu) przekazywana jest zwrotnie do modelu w kolejnym prompcie.
Zdolność do korzystania z narzędzi może być realizowana za pomocą naszych własnych promptów lub z użyciem funkcjonalności typu „function calling” / „tool use”, oferowanych przez nowoczesne platformy, ale działających tak samo jak opisano powyżej.
Ciekawym i przyszłościowym rozwiązaniem jest standard MCP, czyli Model Context Protocol, opracowany przez firmę Anthropic pod koniec 2024r. W klasycznym podejściu, dodanie nowego narzędzia wymaga rozszerzenia listy narzędzi, napisania funkcji, która wykonuje odpowiednie działanie oraz zadbania o obsługę błędów i kontrolę uprawnień, co każdorazowo oznacza pewną pracę po stronie implementacji agenta. W standardzie MCP wygląda to inaczej:
- aplikacje (narzędzia) obsługujące protokół MCP, rejestrowane są po stronie serwera MCP,
- klient MCP (agent) odpytuje serwer o dostępne narzędzia i otrzymuje ich listę,
- gdy agent podejmie decyzję o użyciu wybranego narzędzia, żądanie jest wysyłane na serwer,
- serwer MCP wykonuje zadanie i odsyła wynik do klienta.
W ten sposób MCP upraszcza integrację, bowiem agent AI może korzystać z dowolnego, dostępnego narzędzia, obsługującego protokół MCP, bez potrzeby pisania dedykowanego kodu. Protokół MCP definiuje również mechanizmy obsługi błędów i zarządzanie uprawnieniami.
Jest to rozwiązanie nowe, ale wyznaczające standard efektywnej i skalowalnej integracji agentów AI z całym ekosystemem narzędzi.
Refleksja
Refleksja w projektowaniu agentów AI, oznacza proces autorefleksji – chwilowego "zastanowienia się" przez agenta nad własnym stanem, danymi wejściowymi oraz możliwymi ścieżkami działania, zanim podejmie kolejne kroki w realizacji zadania. To jeden z kluczowych elementów logiki nowoczesnych agentów AI, obok planowania i korzystania z narzędzi.
W prostych rozwiązaniach refleksja może być inicjowana w głównym promptcie, ale z reguły występuje, jako osobny prompt przed właściwą akcją. W bardziej zaawansowanych agentach może się nawet składać z kilku osobnych kroków lub mieć formę analizy realizowanej w postaci iteracyjnej pętli.
W trakcie refleksji agent może generować pytania do samego siebie, np.: jakie informacje są istotne, jakich informacji mu brakuje, jakie umiejętności lub narzędzia będą mu potrzebne, czy widzi jakieś problemy. Może też analizować informacje, które posiada, wydobywać z nich słowa kluczowe do wyszukiwania, czy wskazywać obszary pamięci długoterminowej, które należy przeszukać.
O ile zbyt rozbudowana refleksja może obniżać efektywność agenta (w szczególności podnosić koszty i czas odpowiedzi), o tyle dobrze zaprojektowana może pomagać w skutecznym rozwiązywaniu złożonych zadań.
Przykładowy schemat działania agenta AI, z pełną ścieżką dla zadań złożonych (pomarańczowe strzałki) i szybką ścieżką dla zadań prostych (niebieskie strzałki)
Systemy wieloagentowe
Agenci AI mogą współpracować ze sobą w celu osiągnięcia celów wspólnych lub indywidualnych.
W systemach wieloagentowych każdy agent to z reguły autonomiczna, wyspecjalizowana jednostka, zdolna do samodzielnego podejmowania decyzji, która dysponuje własną logiką i pamięcią. W trakcie realizacji zadań, zespół takich agentów komunikuje się ze sobą, delegując zadania, koordynując je, negocjując, przekazując informacje, czy też weryfikując się wzajemnie. Agenci mogą nawet dyskutować między sobą, aby pogłębić analizę.
Przy projektowaniu takich systemów, istotny jest podział odpowiedzialności między agentami. Przykładowo, w ramach obsługi sklepu:
- Agent obsługujący magazyn sprawdza dostępność towaru i inicjuje dostawy
- Agent zajmujący się sprzedażą wspiera klienta w procesie zakupowym
- Agent weryfikacji płatności sprawdza wpłaty
- Agent obsługi wysyłek zamawia kuriera, drukuje etykietę i śledzi przesyłkę
- Agent obsługujący reklamacje przyjmuje je, analizuje i inicjuje zwrot środków
- Agent od komunikacji przygotowuje treść maila dla klienta
Każdy z nich realizuje własne zadania, ale jednocześnie komunikują się ze sobą. Przykładowo: agent sprzedaży pyta agenta od magazynu o dostępność towaru i możliwy czas wysyłki, a agent od reklamacji dopytuje innych agentów o wpłatę i wysyłkę, a po rozpatrzeniu sprawy zleca agentowi od komunikacji przygotowanie maila.
W systemach wieloagentowych zastosowanie mogą mieć różne architektury, od scentralizowanych (gdzie jeden agent zarządza innymi, co jednak rzadko jest stosowane), poprzez hierarchiczne, aż do mniej lub bardziej rozproszonych zespołów agentów. W zależności od architektury, komunikacja może przebiegać liniowo, mieć formę drzewa, gwiazdy z centralnym orkiestratorem lub dowolnego grafu, a sama wymiana wiadomości może odbywać się np. poprzez API, poprzez kolejkę wiadomości (np. na Apache Kafka) lub poprzez tzw. „tablicę ogłoszeń”, gdzie agenci mogą zapisywać i odczytywać komunikaty.
Warty uwagi jest protokół A2A (Agent-to-Agent), opracowany przez Google Cloud z udziałem takich partnerów, jak SAS, ServiceNow, PayPal, czy Atlassian. W podejściu tym mamy podział na „agenta klienta”, który inicjuje zadanie i „agentów zdalnych”, którzy realizują wyspecjalizowane zadania. W uproszczeniu:
- każdy agent zdalny publikuje tzw. „kartę agenta”, opisującą jego umiejętności i usługi oraz sposób komunikacji,
- agent klient „odkrywa” agentów zdalnych, wybiera właściwego agenta i deleguje do niego zadanie,
- agent zdalny realizuje je i zwraca wyniki w postaci tzw. artefaktów.
W trakcie takiej sesji agent klient i agent zdalny, mogą wymieniać ze sobą wiele wiadomości, np. prosić o uzupełnienie informacji lub wyjaśnienie, albo uzgodnić format danych wyjściowych.
Protokół ten opracowany jako standard otwarty, w założeniu ułatwiający komunikację między agentami, niezależnie od ich dostawcy i środowiska.
Czy to bezpieczne?
To zależy… przede wszystkim od funkcji agenta i zakresu jego uprawnień, a także od tego, czy będzie miał kontakt z użytkownikiem zewnętrznym.
Ponieważ agenci nie działają w sposób deterministyczny, musimy się liczyć z ryzykiem błędów oraz celowych nadużyć ze strony użytkowników (tzw. prompt injection lub jailbreaki). Ryzyko to można ograniczyć, jednak nie można jemu zapobiec w 100%. Poniżej kilka wskazówek:
- Agent działa iteracyjnie, wykonując wiele kroków w pętli. Nie pozwól mu zapętlić się na zawsze! Przerwij jego działanie po osiągnięciu limitu. Brak takiego limitu może okazać się kosztowny
- Stosuj przemyślaną obsługę błędów. Narzędzia, których używa agent, mogą nie zadziałać lub zadziałać źle. Ostateczna odpowiedź agenta również może być błędna i spowodować błąd na dalszym etapie. Jeśli to możliwe, poinformuj agenta o błędzie i daj mu szansę poprawy.
- Jeżeli agent pełni swoje funkcje wobec użytkowników zewnętrznych (np. klientów), rozważ ograniczenie bezpośrednich interakcji z człowiekiem. Jeśli agent przetwarza treści pochodzące od użytkowników, zawsze stosuj kontrolę tego, co na wejściu (zapoznaj się z ideą tzw. guardrails w kontekście prompt injection) oraz rozważ kontrolę tego, co na wyjściu.
- Pamiętaj, aby agent działał zawsze na najmniejszych możliwych uprawnieniach. Daj mu dostęp tylko do tych funkcji i danych, które są niezbędne dla jego roli.
- Nie pozwalaj by agent realizował działania nieodwracalne, np. usunięcie zapisu w bazie danych lub samodzielne wysłanie maila do klienta, bez nadzoru człowieka. Akceptacja użytkownika powinna być rozważona dla wszystkich operacji wrażliwych.
- Nie zdawaj się tylko na model językowy! Operacje, które można przeprowadzić programistycznie, przeprowadź programistycznie (np. obliczenia, czy ekstrakcję danych za pomocą wyrażeń regularnych).
- Intensywnie testuj swoje prompty i całego agenta. Wdrażając rozwiązanie w swojej organizacji, przeprowadź także testy bezpieczeństwa (penetracyjne oraz „red teaming”, testujące granice autonomii agenta).
- W zależności od funkcji agenta, pamiętaj o zapewnieniu transparentności i wyjaśnialności jego działania. Powinien być możliwy audyt jego decyzji.
- Używając modeli językowych w chmurze, nie zapominaj nigdy o ochronie prywatności, poufności dokumentów oraz anonimizacji danych.
Podsumowanie
Agenci AI to obiecująca technologia, którą warto śledzić i uczyć się, budując pierwsze rozwiązania. Warto ją także wdrażać, na początek znajdując dla niej bezpieczne obszary użyteczności. Pamiętajmy jednak, by podchodzić do niej ostrożnie, minimalizując ryzyka z nią związane.
Zobacz także
Wdrażanie projektów AI: 12 kroków do sukcesu
01.04.2025 | Anna Kościuczuk
Tech MeetING #12 - Najpopularniejsze narzędzia GenAI – przegląd i zastosowania
05.03.2025 | Ariel Zgórski
Jak poukładać kod w aplikacji mobilnej? - cz. 2
25.11.2024 | Aleksander Kania
Dostępność czy spójność? Czyli jak utrzymać wysoką dostępność oraz silną spójność przy odporności na awarie
14.05.2019 | Robert Czupioł