
Wprowadzenie
Agent sztucznej inteligencji (AI) to system lub program, zdolny do autonomicznego wykonywania zadań w imieniu użytkownika lub innego systemu poprzez zaprojektowany workflow i wykorzystując dostępne narzędzia.
— tak zadania i metody pracy agentów AI definiuje na stronach IBM Anna Gutowska. W artykule w “MIT Technology Review”, poświęconym etyce ich projektowania, jest mowa o dwóch rodzajach agentów:
- narzędziowe (tool based), które tworzymy za pomocą poleceń w języku naturalnym i działają one, łącząc ze sobą różnorodne metody, narzędzia i dane,
- symulacyjne, których zadaniem jest jak najwierniejsze symulowanie ludzkiej pracy w określonej dziedzinie czy nawet symulowanie całej ludzkiej postaci w różnych przestrzeniach komunikacyjnych.
Spróbujmy zbudować sobie agenta AI pierwszego typu.
Cele lekcji
Celem lekcji jest zbudowanie i przetestowanie działania agenta AI, którego zadaniem będzie automatyczne opisywanie materiałów wizualnych ze zbiorów instytucji kultury i dziedzictwa. Nie bardzo interesuje nas symulowanie ludzi przez rozwiązania maszynowe, bardziej racjonalne jest stworzenie narzędzia (systemu), który działałby autonomicznie i pomagał nam w codziennych, niespecjalnie atrakcyjnych zadaniach. Tworzenie metadanych z pewnością należy do takiej kategorii zadań, więc przygotujmy generujacego metadane agenta AI, który bazował będzie na ChatGPT.
Efekty
Efektem lekcji będzie agent AI, działający w systemie ChatGPT i automatycznie opisujący udostępniane mu pliki z obrazami.
Wymagania
Do stworzenia agenta musimy posiadać płatną subskrypcję ChatGPT. Nie będziemy programować.
Część merytoryczna
Naszym celem jest stworzenie agenta AI, wspierającego opisywanie obrazów. Spróbujmy najpierw zaplanować jego działanie i następnie wdrożyć go w systemie ChatGPT.
Podstawowa struktura agenta AI
Pracując z ChatGPT, mamy dostęp nie tylko do dużych modeli językowych (z rodziny GPT)[https://en.wikipedia.org/wiki/Generative_pre-trained_transformer], ale też do wielu innych modeli, pozwalających na pracę z grafiką czy multimediami. Możemy użyć je do zbudowania naszego agenta, który:
- zrozumie polecenia wyrażone w języku naturalnym (nie musimy programować!),
- zanalizuje obraz - rozpozna jego cechy oraz opisze treść, korzystając z modeli rozpoznawania obiektów na obrazie i z modelu językowego do wygenerowania tekstu opisu,
- udostępni dane na temat obrazu w oczekiwanym przez nas formacie.
Wiele z tych możliwości bazuje na tym, że ChatGPT korzysta z Pythona przy pracy z danymi.
Rozpoznawanie obiektów na obrazach to jedno z głównych zadań, do których wykorzystuje się modele sztucznej inteligencji.
Workflow
Nasz agent będzie działał w oparciu o instrukcję, wyrażoną w języku naturalnym. Powinna ona opisywać następujące kroki:
- Użyj udostępniony plik i opisz jego treść,
- Przetwórz ten opis na zestaw metadanych, zawierający określone informacje,
- Rozpoznaj obiekty przedstawione na obrazie i dodaj informacje o nich do metadanych,
- Udostępnij plik, na którym rozpoznane obiekty będą wyróżnione.
Oczywiście to tylko schemat pracy - instrukcja w finalnej postaci powinna być bardziej szczegółowa. Zastanówmy się, jakie informacje powinniśmy w niej umieścić, żeby efekt automatycznej pracy był jak najbardziej satysfakcjonujący:
- podać oczekiwany schemat metadanych oraz format (np. JSON, CSV),
- wskazać styl opisu (neutralny, naukowy, artystyczny itp.),
- opcjonalnie podać słowniki kontrolowane dla wybranych pól metadanych.
Nie są to na pewno wszystkie możliwe warunki, ale nasz agent AI ma być prostym rozwiązaniem. Nie prowadzimy badania naukowego, nie wdrażamy go do produkcji, po prostu uczymy się pracować z nowym narzędziem.
Projekty ChatGPT
Projekty to dostępna w płatnej subskrypcji opcja tworzenia osobnych przestrzeni w ChatGPT, odizolowanych od innych konwersacji i danych:
Projekty oferują nowy sposób grupowania plików i konwersacji do użytku osobistego, ułatwiając zarządzanie pracą, która obejmuje wiele konwersacji. Projekty pozwalają przechowywać konwersacje, pliki i niestandardowe instrukcje w jednym miejscu. Możesz ich używać do bieżącej pracy lub żeby utrzymać porządek.
Kluczowe w wykorzystaniu projektu do budowy agenta AI jest to, że możemy tu podać instrukcję wykonywaną na starcie wszystkich nowych rozmów oraz udostępnić zestaw danych lub treści kontekstowych.
W efekcie - jak się spodziewamy - po udostępnieniu pliku z obrazem w rozmowie z ChatGPT, od razu zostanie wykonana nasza instrukcja. Oczekujemy, że zbudujemy narzędzie ułatwiające nam pracę.
Aby zacząć, wybieramy z menu Projekty (w lewej części okna ChatGPT) znaczek +. Musimy nadać nazwę naszemu projektowi:
W projekcie pracujemy w ramach konwersacji w języku naturalnym, możemy udostępnić pliki kontekstowe oraz dodać instrukcję, która będzie wykonywana automatycznie przy starcie rozmowy:
W zakładce projektu będziemy mieli też dostęp do historii czatów.
Instrukcja dla agenta
Nasz agent wykonywać będzie nasze polecenia tuż po tym, jak tylko udostępnimy mu plik do analizy. Zwróćmy uwagę, że polecenia wyrażamy w języku naturalnym, podajemy też istotne szczegóły, które mają zapewnić odpowiednią jakość pracy:
1. Nie halucynuj – bazuj tylko na dostępnych danych,
2. Użyj podanej grafiki i opisz ją w języku polskim w stylu neutralnego opisu muzealnego / archiwalnego bez interpretacji,
3. Opis przetwórz na metadane w postaci JSON, zawierające takie klucze jak:
- tytuł
- opis w języku polskim w stylu neutralnego opisu muzealnego / archiwalnego bez interpretacji,
- typ (np. fotografia, portret, kolaż) - może być wiele wartości
- styl artystyczny,
- epoka w historii sztuki
- format oryginalnego pliku (mime type)
- rozmiar oryginalnego pliku (szerokość i wysokość w pikselach)
- tablicę z 5 dominujących kolorów w postaci HEX oraz w komentarzu nazwę tych kolorów
- informację, czy na obrazku są osoby (TRUE/FALSE)
- tablicę z nazwami obiektów rozpoznanych w obrazie, wraz z ich koordynatami wyliczonymi dla rozmiarów oryginalnego pliku. Wszystkie koordynaty i wymiary podawaj dla oryginalnego rozmiaru uploadowanego pliku!
4. przetwórz oryginalny plik tak, aby zaznaczyć na nim wyróżnione obiekty,
5. pokaż plik z oznaczonymi obiektami
6. udostępnij plik z oznaczonymi obiektami do pobrania.
W naszej instrukcji wskazujemy na oczekiwany styl opisu, podajemy też, w jakiej postaci mają być wartości określonych metadanych. Nasz agent łączyć będzie możliwości dużego modelu językowego z modelami pozwalającymi na rozpoznawanie obiektów na obrazach. Udostępnienie opisu jako danych w postaci JSON pozwoli nam je dalej przetwarzać - np. przeformatować do CSV i dołączyć do pliku Excela z ręcznie przygotowanymi metadanymi obiektu.
Przygotowując instrukcję nie oczekujmy, że jej pierwsza wersja da już oczekiwane efekty. Pracujemy w języku naturalnym, który może być różnie interpretowany przez model językowy, więc w razie potrzeby trzeba będzie dopracować zestaw poleceń. Gdybyśmy budowali agenta z wykorzystaniem interfejsu maszynowego (API) i języków programowania, mógłby on działać na podstawie bardziej jednoznacznych poleceń.
Wybieramy opcję Dodaj instrukcję i w nowootwartym oknie umieszczamy nasze polecenia:
Nasz agent jest gotowy do pracy!
Test I: fotografia z NAC
Do pierwszego testu użyjmy fotografi ze zbiorów Narodowego Archiwum Cyfrowego. Fotografia przedstawia Orkiestrę Polskiego Radia podczas koncertu w studio (między 1929 a 1939 r.):
Ściągnijmy na dysk plik PIC_1-K-1361.jpg i umieśćmy go w ChatGPT:
Instrukcję przygotowaliśmy już wcześniej, wystarczy więc teraz tylko uruchomić czat:
Oto opis wygenerowany przez ChatGPT:
Na fotografii przedstawiono orkiestrę w eleganckim pomieszczeniu, złożoną z muzyków ubranych w garnitury. Widoczne są różnorodne instrumenty, takie jak saksofony, trąbki, skrzypce, kontrabas, akordeon, perkusja i tuba. Dyrygent znajduje się po prawej stronie, prowadząc zespół. W tle znajduje się kominek oraz zegar ścienny.
Udało się nam także uzyskać zestaw metadanych w postaci JSON:
{
"tytuł": "Orkiestra w eleganckim wnętrzu",
"opis": "Fotografia przedstawia grupę muzyków w eleganckich garniturach, grających w orkiestrze. Widoczne są różnorodne instrumenty muzyczne, takie jak saksofony, trąbki, skrzypce, kontrabas, akordeon, perkusja oraz tuba. Dyrygent prowadzi zespół, stojąc po prawej stronie. W tle znajduje się kominek, zegar ścienny oraz detale wnętrza, takie jak dekoracyjne elementy architektoniczne.",
"typ": ["fotografia", "czarno-biała"],
"styl_artystyczny": "realizm",
"epoka_w_historii_sztuki": "XX wiek",
"format_oryginalnego_pliku": "image/jpeg",
"rozmiar_oryginalnego_pliku": {
"szerokość": 2048,
"wysokość": 1218
},
"dominujące_kolory": [
"#494949", "#c3c3c3", "#6f6f6f", "#a2a2a2", "#2b2b2b"
],
"czy_na_obrazku_są_osoby": true,
"rozpoznane_obiekty": [
{
"nazwa": "dyrygent",
"koordynaty": {"x": 1500, "y": 600, "szerokość": 100, "wysokość": 200}
},
{
"nazwa": "saksofon",
"koordynaty": {"x": 400, "y": 900, "szerokość": 100, "wysokość": 150}
},
{
"nazwa": "trąbka",
"koordynaty": {"x": 700, "y": 300, "szerokość": 100, "wysokość": 100}
},
{
"nazwa": "fortepian",
"koordynaty": {"x": 1000, "y": 800, "szerokość": 300, "wysokość": 200}
}
]
}
Niestety, widzimy, że nasz agent ma problem z rozpoznawaniem obiektów. Poprawnie je identyfikuje, jednak nie wszystkie - w opisie zidentyfikował np. zegar i kominek, jednak nie wyznaczył tych obiektów w kluczu rozpoznane_obiekty. Do tego oznacza je błędnie, być może wciąż podając koordynaty dla rozmiarów przetwarzanego wewnętrznie, a nie oryginalnego obrazu:
Test II: obraz z MNWR
Przejdźmy na stronę zbiorów cyfrowych Muzeum Narodowego we Wrocławiu i wybierzmy obraz Pokłon Trzech króli (ok. 1640):
Udostępnijmy ten obraz do nowej konwersacji w ChatGPT:
Tym razem agent nie wygenerował danych w postaci JSON i dopiero kiedy tego zarządaliśmy, udostępnił je, ale w nieco innym schemacie:
{
"tytul": "Pokłon Trzech Króli",
"opis": "Obraz przedstawia scenę Pokłonu Trzech Króli, gdzie Maryja z Dzieciątkiem Jezus znajduje się na pierwszym planie, otoczona przez Mędrców, którzy ofiarowują swoje dary. W górnej części kompozycji widoczne są unoszące się anioły, a w tle dostrzec można dodatkowe postacie oraz krajobraz. Dzieło charakteryzuje się bogatą kolorystyką i szczegółowością, a złocista kolorystyka tła nadaje scenie podniosłego charakteru.",
"typ": ["obraz", "malarstwo religijne"],
"styl_artystyczny": "Barok",
"epoka": "XVII wiek",
"format_oryginalnego_pliku": "image/jpeg",
"rozmiar_oryginalnego_pliku": {
"szerokosc": 963,
"wysokosc": 768
},
"dominujace_kolory": [
"#a67f58",
"#5f3820",
"#da4b4b",
"#3c5a79",
"#f8e5c2"
],
"kolory_opis": [
"jasny brąz",
"ciemny brąz",
"czerwień",
"niebieski",
"jasny krem"
],
"czy_sa_osoby": true,
"rozpoznane_obiekty": [
{
"nazwa": "Maryja",
"koordynaty": {
"x": 200,
"y": 300,
"szerokosc": 150,
"wysokosc": 250
}
},
{
"nazwa": "Dzieciątko Jezus",
"koordynaty": {
"x": 260,
"y": 320,
"szerokosc": 50,
"wysokosc": 80
}
},
{
"nazwa": "Mędrcy z darami",
"koordynaty": {
"x": 350,
"y": 250,
"szerokosc": 300,
"wysokosc": 300
}
},
{
"nazwa": "Anioły",
"koordynaty": {
"x": 300,
"y": 50,
"szerokosc": 400,
"wysokosc": 100
}
},
{
"nazwa": "Tło",
"koordynaty": {
"x": 0,
"y": 0,
"szerokosc": 963,
"wysokosc": 768
}
}
]
}
Niestety, automatyzacja, która nie trzyma się zakładanego standardu, nic nam nie da. Być może naszym błędem było niepodanie w instrukcji wzoru danych (nazwy kluczy i typów wartości). Znów okazało się, że agent błędnie rozpoznaje rozdzielczość pliku (963px/768px zamiast 1595px/2000px), co może być przyczyną późniejszego błędu w oznaczaniu obiektów na obrazie:
Podsumowanie
Dwa przeprowadzone przez nas testy wykazały słabości agenta, którego przygotowaliśmy. Być może części z błędów udałoby się uniknąć dzięki dopracowaniu instrukcji lub ograniczeniu zakresu analizy - agent dobrze poradził sobie z przygotowaniem opisu obrazu oraz wyznaczeniem dominujących kolorów. W naszym systemie połączyliśmy też dwa różne rozwiązania - duży model językowy i model czy biblioteki pozwalające na rozpoznawanie obiektów na materiałach wizualnych (warto wiedzieć, że wydawca OpenAI współpracuje na tym polu z Microsoftem, korzystając m.in. z możliwości wyszukiwarki Bing).
Największą wartością testowanego rozwiązania wydaje się automatyzacja poleceń i dynamiczny workflow - zamiast za każdym razem podawać instrukcję, możemy uruchamiać ją z rozpoczęciem każdej konwersacji z ChatGPT. Przy odpowiednim zaplanowaniu i przygotowaniu instrukcji moglibyśmy wypracować skuteczne rozwiązanie, wspierające naszą codzienną pracę.
Wykorzystanie metod
Wady naszego testowego agenta AI nie powinny sprawiać, że w ogóle odrzucimy tę taktykę pracy ze sztuczną inteligencją. Ciekawym przykładem narzędzia tego typu jest serwis A.I. Art AGENT, który automatycznie aktualizuje witrynę internetową o kolejne informacje na temat wydarzeń kulturalnych w wybranych miastach. Możemy też z powodzeniem myśleć o botach działających w mediach społecznościowych jako agentach AI - mogą wspierać one obsługę zwiedzających, którzy kontaktują się z naszą instytucją za pomocą komunikatorów czy w komentarzach, ale też publikować wybrane informacje na temat naszej działalności.
Niedawno opublikowany artykuł Cultural Evolution of Cooperation among LLM Agents proponuje też bardzo ciekawą perspektywę ewolucji agentów AI. Jako reprezentanci osób i środowisk mogłyby one wchodzić ze sobą w interakcje, usprawniając bieżącą komunikację, wymianę wiedzy czy negocjacje.
Czytając o agentach AI nie zapominajmy, że używane w ich opisach pojęcia takie jak inteligencja czy rozumienie są jedynie marketingową wydmuszką. Zamiast wyobrażać sobie w pełni autonomiczne, realizujące wszelkie zadania systemy, pomyślmy raczej o zebranych w jeden workflow narzędziach i modelach, które są w stanie usprawniać przetwarzanie danych lub obsługę klienta i jako takie są po prostu jedną z taktyk wykorzystania sztucznej inteligencji.
Pomysł na warsztat
Lekcja jest gotowym pomysłem na warsztat z podstaw pracy z ChatGPT (wymaga jednak płatnej subskrypcji). Oczywiście bez dostępu do tego systemu można też przygotować ćwiczenia, koncentrując się raczej na przygotowaniu planu workflow i instrukcji oraz rozpoznaniu, jakie elementy codziennej pracy czy realizowanego zadania można w ten sposób usprawnić.