Rozwiązania zadań z kursu AI_devs 3 Agents, w którym brałem udział w listopadzie 2024 roku.
Back-end pisany w Python. Front-end pisany w Angular, TypeScript. 
Uwaga: Struktura aplikacji może pozostawiać do życzenia, gdyż często kod powtarza się dla poszczególnych lekcji. Jest tak dlatego, gdyż ja kodu tej aplikacji praktycznie w ogóle nie pisałem. Generowałem kod w całości za pomocą modeli OpenAI, niezależnie dla każdego zadania. Przygotowywałem tylko odpowiednie prompty dla każdego zadania i komunikowałem się z modelami, by te zadania rozwiązać i zwizualizować rozwiązania.
s01e01
Zaloguj się do systemu robotów pod podanym adresem. Zdobyliśmy login i hasło do systemu. Problemem jednak jest ich system ‘anty-captcha’, którą musisz spróbować obejść.
s01e02
Ostatnio zdobyłeś zrzut pamięci robota patrolującego teren. Użyj wiedzy pozyskanej z tego zrzutu do przygotowania dla nas algorytmu do przechodzenia weryfikacji tożsamości. To niezbędne, aby ludzie mogli podawać się za roboty. Zadanie nie jest skomplikowane i wymaga jedynie odpowiadania na pytania na podstawie narzuconego kontekstu. Tylko uważaj, bo roboty starają się zmylić każdą istotę!
s01e03
Musisz poprawić plik kalibracyjny dla jednego z robotów przemysłowych. To dość popularny w 2024 roku format JSON. Dane testowe zawierają prawdopodobnie błędne obliczenia oraz luki w pytaniach otwartych. Plik w niektórych danych testowych zawiera pole “test” z polami “q” (question/pytanie) oraz “a” (answer/odpowiedź). To LLM powinien udzielić odpowiedzi. Popraw proszę ten plik i prześlij nam go już po poprawkach. Tylko uważaj na rozmiar kontekstu modeli LLM, z którymi pracujesz — plik się w nie zmieści w tym limicie.
s01e04
Dzięki Twojej pomocy w obejściu licznych systemów bezpieczeństwa udało nam się zdobyć dostęp do jednej z fabryk kontrolowanych przez roboty. Mało tego! Mamy także dostęp do robota przemysłowego, którego da się zaprogramować tak, aby wykonał Twoje instrukcje. Przeprogramuj robota w taki sposób, aby dotarł on do celu, jakim jest komputer z danymi fabryki.

Mój prompt dla Chat GPT-4o-mini:
Stwórz STEPS_TABLE robota na mapie, która jest siatką:
1) Każde pole mapy to liczba od 1 do 24. Każdy krok może być jedną z trzech operacji: +1 lub -1 lub +4
2) Dodatkowa zasada: Jeśli (obecny wynik % 4 === 0), nie możesz użyć +1.
3) WAŻNE: Zakazane liczby, których nie możesz krokowo zdobywać to: 5, 6, 8, 14, 15.
4) Cel: Zaczynając od liczby 1 osiągnij krokowo liczbę 21 nie przekraczając jej wartości.
5) Zamień STEPS_TABLE na STEP_SERIE usuwając nawiasy [] i podmień kroki liczbowe na wyrazy bez cudzysłowia oddzielone przecinkami: +1 na UP, +1 na DOWN, +4 na RIGHT
6) Zwróć sam JSON bez znaków markdown:
{ steps”: „STEP_SERIE” }
s01e05
Musisz przygotować system do cenzury danych agentów. Pobierz dane z pliku TXT umieszczonego na serwerze Centrali. Następnie ocenzuruj imię i nazwisko, wiek, miasto i ulicę z numerem domu tak, aby zastąpić je słowem CENZURA. Odpowiedź wyślij z powrotem do Centrali w formacie, który znasz już z poligonu. Uwaga! Dane w pliku TXT zmieniają się co 60 sekund i mogą być różne dla każdego z agentów w tej samej chwili.
s02e01
Pobierz archiwum ZIP i rozpakuj je. W środku znajdziesz pliki MP3 z nagraniami kilku przesłuchań. Za pomocą dowolnego modelu zamieniającego audio na tekst, wygeneruj transkrypcję każdego z nagrań. Z otrzymanych transkryptów zbuduj wspólny kontekst dla swojego prompta. Znajdź odpowiedź na pytanie, na jakiej ulicy znajduje się uczelnia, na której wykłada Andrzej Maj. Pamiętaj, że zeznania świadków mogą być sprzeczne, niektórzy z nich mogą się mylić, a inni odpowiadać w dość dziwaczny sposób. Nazwa ulicy nie pada w treści transkrypcji. Musisz użyć wiedzy wewnętrznej modelu, aby uzyskać odpowiedź. Uzyskaną odpowiedź wyślij z powrotem do Centrali w formacie, który znasz już z poligonu.
s02e02
Na podstawie dostarczonej mapy, określ z jakiego miasta one pochodzą. Pamiętaj, że jeden z fragmentów mapy może być błędny i może pochodzić z innego miasta. Użyj do tego celu modelu zdolnego do rozpoznawania obrazu. Wyślij nam do centrali nazwę tej miejscowości jako flagę.
s02e03
Zebraliśmy zeznania od naszych wysłanników, którzy obserwowali fabrykę. Opisali oni, jak wyglądały roboty, które się tam kręciły. Na podstawie opisu jednego z nich, przygotuj proszę grafikę, która będzie pewnego rodzaju wizualizacją potencjalnego wyglądu tych robotów, a następnie prześlij URL do tej grafiki z powrotem do Centrali w formacie, który znasz już z poligonu. Użyj w tym celu modelu Dall-E w wersji 3. Grafika, której oczekujemy powinna być w formacie PNG o wymiarach 1024x1024px.
s02e04
Zdobyliśmy dostęp do danych z fabryki, którą nam wskazałeś. Są to raporty dzienne kilku działających tam oddziałów. Część z nich to zwykłe raporty techniczne, a część to raporty związane z bezpieczeństwem. Pozyskane dane są w różnych formatach i nie wszystkie zawierają użyteczne dane. Wydobądź dla nas proszę tylko notatki zawierające informacje o schwytanych ludziach lub o śladach ich obecności oraz o naprawionych usterkach hardwarowych (pomiń te związane z softem oraz pomiń katalog z faktami). Raport wyślij do Centrali w formacie, który znasz już z poligonu.
s02e05
Z przechwyconych materiałów interesuje nas tylko jedna z publikacji profesora Maja. Nasza centrala chce pozyskać odpowiedzi na dostarczone przez nią pytania dotyczące tej notatki. Zwróć proszę uwagę, że podlinkowana notatka zawiera treści tekstowe, graficzne i dźwiękowe. Dźwięki i obrazy występują w konkretnym kontekście, który może zmieniać ich odbiór. Istnieje ogromne prawdopodobieństwo, że konieczne będzie wzięcie pod uwagę informacji podanych w każdym formacie. Raport z odpowiedziami na pytania wyślij do Centrali w formacie, który znasz już z poligonu.
s03e01
Twoim zadaniem jest przygotowanie metadanych do 10 raportów dostarczonych w formacie TXT. Dotyczą one wydarzeń związanych z bezpieczeństwem, które zdarzyły się w różnych sektorach wokół fabryki. Metadane powinny ułatwić centrali wyszukiwanie tych raportów za pomocą własnych technologii. Sugerujemy, aby metadane zawierały słowa kluczowe w języku polskim, opisujące dany raport. Bardzo ważne jest przy generowaniu słów kluczowych uwzględnienie całej posiadanej przez nas wiedzy (np. folder z faktami, czy odwołania w innych raportach). Przygotowane dane wyślij do Centrali w formacie, który znasz już z poligonu.
s03e02
Centrala złamała hasło do pliku ZIP, który wysłaliśmy wczoraj. W archiwum znajdziesz raporty z testów nowoczesnej broni. Zaindeksuj je z użyciem dowolnego modelu do embeddingów w swojej bazie wektorowej. Utwórz embedding z pytania: „Którego dnia skradziono prototyp broni?” i odpytaj nim swoją bazę danych, ustawiając limit zwracanych rekordów na 1. Jeśli baza nie będzie zwracać odpowiednich rezultatów, wzbogać raporty o odpowiednie metadane. Odpowiedź wyślij do Centrali w formacie, który znasz już z poligonu.
s03e03
Uzyskaliśmy dostęp do bazy danych firmy BanAN. Centrala wystawiła dla Ciebie specjalne API, które umożliwi Ci wykonanie niemal dowolnych zapytań wyciągających dane ze wspomnianej bazy. Wiemy, że znajdują się tam tabele o nazwach users, datacenters oraz connections. Przekaż ich strukturę do LLM-a i poproś o przygotowanie zapytania SQL, które spełnia nasze wymagania. Twoim zadaniem jest zwrócenie nam numerów ID czynnych datacenter, które zarządzane są przez menadżerów, którzy aktualnie przebywają na urlopie (są nieaktywni). To pozwoli nam lepiej wytypować centra danych bardziej podatne na atak. Odpowiedź (w formie tablicy) wyślij do Centrali w formacie, który znasz już z poligonu.
s03e04
Musisz pomóc nam namierzyć Barbarę Zawadzką! Zdobyliśmy dostęp do dwóch systemów, które mogą nam w tym pomóc. Pierwszy z nich to wyszukiwarka członków ruchu oporu. Możemy wyszukiwać ich z użyciem imienia podanego w formie mianownika, a w odpowiedzi otrzymamy listę miejsc, w których ich widziano. Drugi system to wyszukiwarka miejsc odwiedzonych przez konkretne osoby. Podajesz nazwę miasta do sprawdzenia i w odpowiedzi dowiadujesz się, których z członków ruchu oporu tam widziano. Interfejs dla obu systemów wygląda tak samo. Przyjmuje on zapytanie w formacie JSON. Niestety, przy obu systemach ktoś majstrował i dane zwracane przez nie mogą być niekompletne. Musisz jednak poradzić sobie z tym, co masz. Zdobyliśmy także część notatki na temat Barbary, pochodząca z systemu zbierającego informacje o osobach poszukiwanych. Połącz wszystkie dane w jedną całość, uzupełnij brakujące informacje i znajdź miasto, w którym znajduje się Barbara. Odpowiedź wyślij do Centrali w formacie, który znasz już z poligonu.
s03e05
Korzystając z tabel „users” i „connections”, znajdujących się w bazie danych MySQL, do której zdobyliśmy dostęp w s03e03. Tabela „connections” zawiera listę połączeń między osobami. Wyznacz najkrótszą drogę od Rafała do Barbary. Wykorzystaj do tego zadania bazę grafową. Drogę zwróć jako imiona kolejnych osób na drodze, począwszy od imienia Rafał, a kończąc na Barbara. Zastosuj przecinek jako separator imion. Odpowiedź wyślij do Centrali w formacie, który znasz już z poligonu.
s04e01
Centrala posiada uszkodzone zdjęcia odzyskane z aparatu cyfrowego. Istnieje szansa, że na niektórych z nich jest Barbara. Nie wiemy, jak wygląda Barbara. Możesz na żywo porozmawiać z automatem działającym w centrali. Automat nie jest zbyt sprytny, ale może dla Ciebie poprawić posiadane zdjęcia. Obsługuje on kilka narzędzi: naprawa zdjęcia zawierającego szumy/glitche, rozjaśnienie fotografii, przyciemnienie fotografii. Twoim zadaniem jest przygotowanie rysopisu Barbary. Odpowiedź wyślij do Centrali w formacie, który znasz już z poligonu.
s04e02
Pobierz próbkę wyników badań, które otrzymaliśmy i na podstawie danych referencyjnych (poprawnych i niepoprawnych) zdecyduj, którym wynikom możemy zaufać. Zbierz tylko identyfikatory poprawnych badań. Pomiń te, które wykryjesz jako sfałszowane. Wierzymy, że w 2024 roku w wykryciu takich anomalii może pomóc Ci technika zwana fine-tuningiem modeli językowych. Możesz jednak to zadanie wykonać w dowolny sposób, który doprowadzi Cię do rozwiązania. Odpowiedź wyślij do Centrali w formacie, który znasz już z poligonu.
s04e03
Wiemy już, że oprogramowanie do fabryk i magazynów robotów realizuje firma SoftoAI. Firm tego typu jest znacznie więcej. Centrala prosi Cię o przygotowanie uniwersalnego mechanizmu do poszukiwania informacji na takich stronach. Pobierz listę pytań z Centrali. Pytania są trzy i mają one swoje numery: 01, 02, 03. Z takimi samymi numerami musimy otrzymać odpowiedzi. Napisz automat, który wejdzie na stronę i znajdzie odopowiedzi na pytania. Niektóre z pytań wymagają wejścia w głąb na 2-3 strony. Odpowiedzi wyślij do Centrali w formacie, który znasz już z poligonu.
s04e04
Musisz przygotować API działające po protokole HTTPS, a następnie wysłać do centrali URL do tego API. Pracownik centrali będzie wysyłał na Twoje API metodą POST dane w formacie JSON z instrukcjami lotu. Opis lotu drona może być w dowolnej formie i jest to tekst w języku naturalnym. Twoim zadaniem jest odpowiedzenie w maksymalnie dwóch słowach, co tam się znajduje. Centrala wyśle do Twojego API kilka takich opisów lotów, jeden po drugim, każdy w oddzielnym zapytaniu. Przekazanie pilotowi nieprawdziwych informacji nawigacyjnych kończy się rozbiciem drona. Zadanie uznawane jest za zaliczone, gdy wszystkie loty skończą się sukcesem.
Mój prompt dla modelu gpt-4o:
### Wczuj się w rolę kartografa nawigatora. Przeanalizuj drogę pilota na mapie, która jest siatką z pól 4 x 4. Każde pole mapy to liczba od 1 do 16. Zacznij od liczby 1: START.
### Przeanalizuj krokowo komendy z INFO pilota. Każde zdanie to jedna komenda.
I. Każda komenda z INFO pilota może wykonywać następujące operacje, ale tylko wg RULES:
– w dół oznacza operację D: +1 do wyniku
– w górę oznacza operację G: -1 do wyniku
– w prawo oznacza operację R: +4 do wyniku
– w lewo oznacza operację L: -4 do wyniku
II. Na koniec: odczytaj KEYWORDS (słowa po dwukropku) dla końcowej wartości wg poniższej tabeli:
1: START; 2: trawa; 3: trawa; 4: skały; 5: trawa; 6: młyn; 7: trawa; 8: skały; 9: trawa drzewo; 10: trawa; 11: skały; 12: samochód; 13: dom; 14: trawa; 15: trawa drzewa; 16: jaskinia;
III. W odpowiedzi podaj wszystkie kroki i wynik końcowy. W tagach 'result’ podaj KEYWORDS (bez markdown) dla wyniku końcowego. Np.: trawa drzewo
### RULES:
– jeśli (WYNIK % 4 === 0) i kolejną operacją jest D +1, nie możesz jej użyć, więc przejdź wtedy do kolejnej komendy INFO pilota.
– jeśli (WYNIK % 4 === 1) i kolejną operacją jest G -1, nie możesz jej użyć, więc przejdź wtedy do kolejnej komendy INFO pilota.
– jeśli (WYNIK > 16), cofnij ostatnią operację, i przejdź do kolejnej komendy INFO pilota.
– jeśli pilot użyje zwrotu: „Zaczynamy od nowa”, zresetuj obecny wynik do wartości 1 i przejdź do kolejnej komendy INFO pilota.
– jeśli pilot użyje zwrotu: „nie! nie! czekaaaaj”, cofnij wszystkie operacje ostatniej komendy, i przejdź do kolejnej komendy INFO pilota.
– jeśli pilot każe iść do końca lub maksymalnie w jakąś stronę, lub „na sam dół”, wykonuj dany typ operacji w pętli dopóki to będzie możliwe.
– jesli pilot każe iść w jakąś stronę o daną liczbę pól, wykonuj operację tyle razy o ile pól trzeba iść.
### INFO pilota:
s04e05
Znaleźliśmy notes z zapiskami Rafała. Jest tam sporo niejasności, a sposób formułowania myśli przez autora jest dość osobliwy. Przygotuj proszę system, który przeprowadzi dla nas analizę tego notatnika i odpowiedz na pytania z Centrali. Pobierz notatnik Rafała w formacie PDF. Przystosuj notatnik w taki sposób, aby był zrozumiały dla LLM-a (użycie OCR-a, zamiana stron na obrazki, wydobywanie tekstu wprost z pliku binarnego — co lubisz i co umiesz). Zapamiętaj w dowolny sposób zdobyte informacje. Odpowiedzi na pytania wyślij do Centrali w formacie, który znasz już z poligonu.
s05e01
Zdobyliśmy transkrypcję nagrań z kilku rozmów, które mogą być dla nas interesujące. Wszystkie pośrednio lub bezpośrednio dotyczą Rafała. Wiemy także z logów, jakim zdaniem rozpoczyna i kończy się każda rozmowa. Dodatkowo dowiedzieliśmy się, że podczas rozmowy padają pewne sprzeczne ze sobą informacje. Trzeba zweryfikować, który z rozmówców jest kłamcą i wykluczyć jego wersję podawanych nam danych. W każdej rozmowie uczestniczą tylko dwie osoby, które wypowiadają się naprzemiennie. Imiona rozmówców są unikalne, więc jeśli np. Stefan pojawia się w pierwszej i piątej rozmowie, to jest to ten sam Stefan. Nie wszystkie informacje podane są w tekście. Niektóre należy uzyskać z “faktów” z poprzednich zadań. Mając zgromadzoną wszelką potrzebną wiedzę, udziel odpowiedzi na pytania. Odpowiedzi wyślij do Centrali w formacie, który znasz już z poligonu.
s05e02
Dotarliśmy do logów pochodzących z agenta, który niegdyś wykorzystywany był przez Centralę. Rozwiązanie to było przejęte od sił robotów, jednak teraz straciliśmy do niego dostęp, a jest nam ono nadal potrzebne. Na podstawie analizy logów, trzeba wywnioskować, jak ten agent do tej pory działał i do czego służył. Twoim zadaniem jest odtworzenie od zera tego agenta we własnym środowisku. Oczywiście nie musi on zwracać tych samych komunikatów na ekran, co oryginał, ale byłoby super, gdyby zwracał te same wyniki co soft, którego niegdyś używaliśmy. Zapoznaj się z pytaniem Centrali, zaklasyfikuj, jakiego rodzaju informacje trzeba pobrać i skąd (masz do dyspozycji dwa API). Odwołaj się do odpowiednich API, połącz wymagane dane, przeprowadź niezbędną analizę. Odpowiedź wyślij do Centrali w formacie, który znasz już z poligonu.