Agent AI w 10 minut, bez programowania - N8N (film, 19m)
Jakub 'unknow' Mrugalski z UW-TEAM.org poruszył ciekawy temat wykorzystania sztucznej inteligencji w codziennym programowaniu. Przekonywał, że rola AI, jak np. modele językowe, to nie tylko pisanie fragmentów kodu, ale ich integracja w aplikacjach, aby wykonywały część logiki biznesowej w backendzie. Na przykład, przy tworzeniu systemu do moderowania komentarzy na blogach, AI może lepiej radzić sobie z rozpoznawaniem obraźliwych treści niż tradycyjne metody bazujące na słownikach. W skomplikowanych zadaniach AI może zastąpić moderatorów i wspierać ich w podejmowaniu decyzji.
Toggle timeline summary
-
Wprowadzenie do nieporozumień związanych z programowaniem z AI.
-
Omówienie roli LLM w backendzie aplikacji.
-
Przykład systemu moderacji treści dla komentarzy na blogu.
-
Ograniczenia tradycyjnych systemów w identyfikowaniu nieobraźliwego języka.
-
Korzyści z użycia LLM do moderacji.
-
Wprowadzenie pojęcia agenta w programowaniu.
-
Porównanie między stażystą a agentem AI.
-
Przykładowa sytuacja ilustrująca zadania przydzielone stażyście.
-
Dyskusja na temat dostępu do API i możliwości agenta.
-
Początek procesu ustawiania prototypowego środowiska.
-
Wprowadzenie do używania Playground OpenAI do testowania.
-
Dyskusja na temat wysyłania regularnego newslettera związanego z IT.
-
Testowanie konwersji tekstu przy użyciu kodowania Base64.
-
Identyfikacja ograniczeń GPT-4 w obsłudze konkretnych zadań.
-
Planowanie budowy agenta w środowisku N8N.
-
Sprawdzanie, czy kontener Docker dla N8N działa.
-
Demonstracja procesu rejestracji i logowania do N8N.
-
Ustawienie komponentu Agenta AI w N8N.
-
Wyjaśnienie procesu łączenia modelu OpenAI z agentem.
-
Wykorzystanie Wikipedii do pozyskiwania informacji w agencie.
-
Wyjaśnienie obliczania różnicy wieku przy użyciu danych wewnętrznych.
-
Omówienie interakcji między agentem a bazami danych.
-
Promowanie szkoleń dla deweloperów AI w celu nauki rozwiązań opartych na agentach.
Transcription
Często programyści myślą, że programowanie ze sztuczną inteligencją, to znaczy chat GPT napisze mi fragment kodu, no więc nie o to chodzi. Chodzi o to, aby LLM, załóżmy w EKP T4, był fragmentem Twojej aplikacji, czyli wykonywał część logiki biznesowej gdzieś tam w backendzie. I możesz zapytać, ale po co mi to, przecież zawsze pisałem normalny kod i było dobrze. Wyobraź sobie, że piszesz na przykład system do cenzurowania wpisów na blogu. Ktoś komentuje Ci tam i na przykład wypisuje takie teksty w stylu, Ty małpo, Ty pustaku. I teraz małpa i pustak to nie są wulgaryzmy, więc Twój system bazujący na wyrażeniach regularnych albo na słowniku niepoprawnych wyrażeń zupełnie nie działa w tym przypadku. Ale jeżeli tam zastosujesz LLM-a, to tego rodzaju teksty będą bez problemu wyłapane i zablokowane. Więc są takie momenty, gdzie zwykle człowiek był wsadzany jako moderator i on musiał decydować, czy to jest obraźliwe, czy nieobraźliwe, a teraz można to zastąpić albo wspomagać za pomocą sztucznej inteligencji. No dobra, tylko gdzie tu jest agent? Chodzi o to, że jeżeli zlecamy coś sztucznej inteligencji, to najczęściej jest tak, że programista po pierwsze wie jak to zrobić, czyli umie opisać ten proces i ten proces tak naprawdę jest bardzo powtarzalny. Da się go spisać w kilku punktach i gotowe. Kolejna sprawa, ten proces jest prosty, czyli zwykle składa się z jednego kroku, dwóch kroków, no i jakoś da się to oprogramować. A co jeżeli ten proces jest bardziej złożony i na przykład składa się z dziesięciu kroków, ale nie zawsze wszystkie trzeba wykonywać, nie zawsze w tej kolejności, w której Ty podałeś i czasami się zdarza, że któryś krok się no wysypuje i trzeba jakoś na niego zareagować, czyli sprawić, aby naprawić ten błąd. W tym wypadku potrzebny jest agent. Jeżeli chodzi o agentów, wyobraź sobie, że działają oni jak starzyści w firmie. Zatrudniasz starzysta i ten starzysta nie ma pojęcia tak naprawdę, co będzie w tej firmie robił. Tak mniej więcej wie, czym się ta firma zajmuje, ale jakie zadania dosanie, to jest dla niego wielka tajemnica. Podobnie jest z agentem. Starzysta, pisząc CV do swojej firmy, napisał, że umie trochę obsługiwać Excela, umie wysyłać maile, umie pobierać pliki z internetu, no umie Google'a używać i to są jego wszystkie skille. I teraz dostaje zadanie. Ma dowiedzieć się, kto dostał Oscara w ostatnim rozdaniu i do tego wysłać Ci zdjęcia tego osób na maila. Czy on jest w stanie to zrobić? Przecież on nie został stworzony, taki starzysta, do tego, aby wysyłać tego rodzaju informacje, ale jego skille są w zupełności wystarczające, aby tego rodzaju zadanie obsłużyć. Tak samo jest z agentem. Agent jest to taka aplikacja, która ma pod sobą narzędzia, z których umie korzystać. Co to znaczy umie korzystać? Ma dostęp do API, a programista wytłumaczył, jak się z tego API korzysta. Czyli mówiąc prościej, jeżeli dałbyś sztucznej inteligencji dostęp do wyszukiwarki internetowej, do Wikipedii na przykład, do jakiegoś superkalkulatora, do aplikacji do ściągania plików, do załóżmy przeglądarki internetowej, którą da się sterować, czy to za pomocą Puppeteera na przykład, czy Playwrighta, nie ma znaczenia, ale jeżeli wytłumaczysz takiemu LLM-owi, słuchaj, masz takie narzędzia, użyj ich wtedy, kiedy trzeba, ja Ci powiem, jak z nich korzystać, to w tym momencie stworzyłeś agenta. I takiego właśnie agenta spróbujemy sobie teraz wyklikać. Na początku zaczniemy od postawienia środowiska. Jeżeli chodzi o środowisko, będę używał N8N. Jest to naprawdę dobre środowisko do prototypowania. Czy ono jest tanie? Tak, jest bardzo tanie. Czy ono jest dobre do produkcji? Ono jest bardzo tanie, zostańmy przy tym. Jeżeli chodzi o rzucenie tego na produkcję, prawdopodobnie będzie trzeba to przepisać na kod, ale do sprawdzenia, czy to się działa u Ciebie, czy to się sprawdza do Twoich zadań, myślę, że taki N8N na początek będzie wystarczający. No to co? Chodź do kodu. Nawędzie, które widzisz na ekranie, to Playground od OpenAI. Tu można sprawdzać, jak działają prompty. Na początek napiszmy sobie jakiś system prompt, czyli odpowiadaj na pytania użytkownika. I proste pytanie na start, jak nazywa się prezydent Polski? I tu mamy pewne ograniczenie, bo zależnie, gdzie kończy się wiedza danego modelu. Tutaj wiedza modelu akurat zawiera aktualne dane, przynajmniej na rok 2021. Jest to Andrzej Duda. Ale co, jeżeli wybory byłyby w 2024, 2056 i tak dalej? No nie uwzględnilibyśmy tego. Prezydent Polski to dość znana osoba, ale jednak są osoby, które są trochę mniej znane. Zapytajmy na przykład o kogoś takiego jak ja. Czyli, oddaj mi proszę adres URL do newslettera prowadzonego przez Jakuba Mrugalskiego. No i jaka jest odpowiedź? Nie mam pojęcia, co to za newsletter, nie wiem, gdzie go znaleźć, weź sobie sam znajdź. Jeżeli ty też nie masz pojęcia, co to za newsletter, to powiem ci jedną rzecz. Regularnie, od wielu, wielu lat, w każdy piątek wysyłam ciekawe zestawienie materiałów związanych z branżą IT, które pomogą ci się rozwijać, które pomogą ci zdobyć więcej wiedzy. Jeżeli ci się to interesuje, to linka do zapisu masz tam na dole. Spróbujmy teraz coś bardziej programistycznego. Zamienił proszę tekst. Testuję na Base64. No i co? Zadziałało. Super, zamienił, tylko pytanie muszę mieć to dobrze. Do weryfikacji użyję narzędzia CyberChef. Do inputu wklejam to, co otrzymałem. Biorę teraz zadanie from Base64 i mam zdekodowaną wartość. Jak się okazuje, błędnie zdekodowana. Czyli to nie działa. Widzimy, że GPT-4.0 jest całkiem sprytny, ale z wieloma rzeczami sobie nie radzi, co uniemożliwia nam zastosowanie go w takich typowych produkcyjnych rozwiązaniach, które najczęściej są potrzebne programistom. W takim razie posłużymy się N8n i w nim zbudujemy sobie agenta. Ale uwaga, nie klikamy tutaj na pricing, nie używamy żadnej płatnej wersji, tylko użyjemy wersji self-hosted. Użyjemy jego servera VFPS, aby postawić tutaj kontroler dockera. Na razie nic nie jest odpalone, ale na początek załóżmy sobie katalog na dane. mkdir i w katalogu domowym .n8n, tam będzie konfig. Musimy nadać odpowiednie prawa do tego katalogu. I teraz odpalić dockera. docker run, czyli uruchom go, minus d, czyli rzuć w tło, minus minus name, nadajemy mu nazwę n8n, minus rm, czyli usuń, jak nie będzie już potrzebny, tylko zatrzymam. I następnie podaję minus p, które porty chcę wystawić. I tutaj ważna rzecz, odpalam to na mikrusie, więc sprawdzam sobie w etce modd, jakie porty są moje. Mam na przykład taki port jak 20100. OK, wracam do jej komendy i mówię tak, port 20100 ma prowadzić do portu nr 5678. Skąd znam ten numer portu? Do dokumentacji. Następnie podaję minus v, który wolumen chcę podpiąć. Ten katalog, który założyłem, czyli n8n, podpinam do home.node.n8n. I skąd to znam? Znowu z dokumentacji n8n. Po prostu przekleiłem sobie to. A następnie podaję, jaki obraz chcę uruchomić. Więc w repozytorium n8n.io daję slasha, nazwę obrazu i najnowszy, czyli latest. Daję teraz Enter. To się chwilę zacznie ściągać i gdy się ściągnie, uruchomi się na moim VPS. Czekamy. I już za chwilę powinno być gotowe. OK, wygląda na to, że wszystko ruszyło poprawnie. Sprawdzę sobie teraz, czy mój kontener jest uruchomiony. A więc docker.ps wyświetli mi procesy. I widzę, że jest faktycznie mój docker uruchomiony na porcie 20100. Spoko. Sprawdzimy sobie teraz jeszcze logi, czyli polecenie docker.logs, a następnie nazwa naszego kontenera. I tu widzimy, że tak wszystko jest dostępne. Na localhostie, na porcie 5.6, OK. Tylko zwróć uwagę, http, nieszyfrowany ruch. Do potrzeby tego demo nie potrzebujemy szyfrowania, więc nie będę tutaj dorzucał jakichś certyfikatów, niczego takiego. Przechodzimy więc do przeglądarki. Przechodzę teraz pod adres, gdzie mam zdeployowany n8n, czyli server7.micro.us i numer portu 20100. Daj skomentarz. No i się okazuje, że mam jakiś błąd. Jest to błąd związany z bezpieczeństwem, ale jeżeli tutaj dodam tą zmienną n8nsecurecookie na false, to w takim razie obejdę go. Więc wyłączę sobie dokera, którego wcześniej postawiłem. Doker stop n8n. Czekamy jeszcze chwilę. A następnie powtarzam to zapytanie, które było wcześniej, czyli polecenie z run. I dodaję tutaj wcześniej "-e". "-e", to jest environment. I ustawiam zmienną środowiskową na false. Daję teraz Enter. I czekam, aż nowe n8n się odpali. Już prawdopodobnie bez tych zabezpieczeń związanych z security. Sprawdzam logi n8n. No i okazuje się, że tak wszystko słucha poprawnie. Wracam więc do przeglądarki i sprawdzam, czy na pewno to działa. Odświeżam tą stronę z błędem. I co się okazuje, mam panel logowania. Dokładnie mimo zarejestracji. Zakładam sobie konto, wpisuję jakieś fejkowe hasło. Daję Nexta. Nie zapisuję niczego. Pomijam ankietę wstępną. I jesteśmy wecytowe. Pod tym plusem znajdują się triggery oraz akcje, z których możemy korzystać. Nas interesuje to, co związane z AI. W wyszukiwarkę wpisuję więc AI. I widzę tutaj gotowy komponent AI Agent. Wybieram sobie go i wrzucam tutaj na środek. Klikam. Jest jakaś konfiguracja, anuluję. I ustawiam sobie to, żeby jakoś ładnie wyglądało. Widzimy, że nasz obiekt AI Agent ma takie trzy dziwne odnogi. Są to kolejno model, pamięć oraz narzędzia. Na początek zdefiniujmy, jaki model będzie napędzał naszego agenta. Klikam na plusa przy modelu. Widzę, że mam Antropica, Azura, Groka, Mistrala i OpenAI. Klikam na OpenAI. I tutaj nowe połączenia. Teraz niezbędny będzie oczywiście klucz API, który pozyskałem na stronie openai.com. Wklejam go w to miejsce i klikam u góry na Save. Jeżeli wszystko działa poprawnie, będzie zielony napis. Klikam. I jak najbardziej Connection działa. Nie chcę zapisywać tego w oglądarce. I wybieram sobie model jakiś w miarę sprytny. Niech to będzie na przykład GPT-4O, ten najnowszy. I zamykam to okno. Mamy więc model podpięty do agenta. Teraz pamięć. Klikam na pamięć i mamy kilka opcji do wyboru. Możemy wybrać jedną z zewnętrznych baz danych, albo tą najprostszą opcję, czyli Window Buffer Memory. I to znaczy, że cała pamięć będzie w środku prompta. Ja wybiorę tą najprostszą rzecz. Wybieram. I gotowe. Ile wiadomości wstecz ma trzymać pamięci? Mamy pięć. I to powinno nam wystarczyć na razie. Mamy więc model. Mamy tutaj pamięć. I teraz potrzebujemy narzędzi. Ale zobaczmy, jak działa nasz agent do tej pory. Uruchamiam aplikację czatu. Klikam. I wpisuję jakieś proste zapytanie. Niech będzie to, co już testowałem wcześniej, czyli jak nazywa się prezydent Polski. Daję send. Chwilę czeka. I jest problem. Dlaczego? Nasz agent nie ma żadnych narzędzi. Musimy zdefiniować przynajmniej jedno, aby móc kowytać z agenta. W takim razie zdefiniujmy. Skąd można wziąć informację o prezydentach Polski? Na przykład z Wikipedii. Klikam w Wikipedia. Nie ma tu żadnej konfiguracji. I gotowe. Mamy podpiętą Wikipedię. Widzisz, że to jest dość proste? Klikam jeszcze raz na czat. I zadaję to samo pytanie. Jak nazywa się prezydent Polski? I okazuje się, że tutaj zna odpowiedź. Andrzej Duda. I mamy kiedy został wybrany. Skąd on to wie? Na początku pobrał sobie pamięć naszej rozmowy. Potem wysłał to, całą pamięć, którą mieliśmy wcześniej, do modelu OpenAI. Czyli w zasadzie pustą pamięć, bo to jest nasza pierwsza rozmowa. Następnie sprawdził w Wikipedii prezydent Polski. Dowiedział się sporo rzeczy, ale nic z nich nie zrozumiał. Więc przekleił wszystko, co ma na Wikipedii, do wnętrza prompta. I poprosił OpenAI, żeby odpowiedział na to pytanie na podstawie tego prompta. I w ten sposób zdobył informację, kto naprawdę jest prezydentem Polski. Dodajmy teraz kolejne narzędzie. Niech to będzie kalkulator. Klikam na kalkulator. Widzisz, że został dodany. Brak konfiguracji. I zadaję teraz pytanie. Klikam na czat. I zadaję pytanie na przykład. Jaka jest różnica wieku między obecnym prezydentem, a tym z 1997 roku? Klikam na cent. I mam odpowiedź. Przynajmniej za chwilę będę miał. Różnica wynosi 18 lat. Dobra, ale skąd on to wie? Zwróć uwagę, że ani razu nie użył Wikipedii. Dlaczego? Dlatego, że w poprzedniej wiadomości mieliśmy informację na temat obecnego prezydenta Polski, w tym datę urodzenia. A następnie pobieramy archiwalne dane na temat starych prezydentów Polski 1997 roku. I wrzucamy te dane do kalkulatora. Robimy proste odejmowanie. Mamy wynik. I gotowe. Dlaczego nie zapytał o prezydenta z 1997 roku Wikipedii? Dlatego, że to są dane archiwalne i one się już nie zmienią. Z tego powodu nie musimy korzystać z zewnętrznych narzędzi do weryfikacji tych danych, ale możemy posłużyć się wiedzą wbudowaną modelu. Prawdopodobnie jest ona poprawna. Pamiętasz przykład z enkodowaniem do Base64? Spróbujmy to zaimplementować za pomocą agenta. Wracamy więc do edytora. I dodajemy nowe narzędzie. No niestety nie ma tu gotowca do Base64, ale jest możliwość pisania własnego kodu JS-a. Mojemu nowemu narzędziu muszę nadać jakąś nazwę. Najlepiej taką sugestywną. Base64. Niech będzie. Muszę teraz wytłumaczyć agentowi, kiedy ma użyć tej funkcji. Używaj tej funkcji, gdy chcesz zdekodować coś z Base64 do plaintextu. I następnie muszę napisać fragment kodu. W zmiennej query mam to, co otrzymałem od agenta. Wpisuję więc taki kod. Tworzę nowy buffer na podstawie mojego inputu, czyli from query. I następnie wykonuję na nim operację, czyli to string. I daję tutaj, jakim mówić string. Będzie to Base64. Zwróć proszę uwagę, że źle napisałem opis funkcji. Tam jest napisane, że tę funkcję należy używać, kiedy chcę zdekodować stringa, a ja tak naprawdę chcę używać tej funkcji do kodowania stringa. Pomimo tego agent i tak jej użyje. Dlaczego? Dlatego, że żadne inne narzędzie się do tego nie nadaje. Więc w takim razie wybierze to narzędzie, które jest najbardziej dostosowane pod względem nazwy do tego, co chce osiągnąć. Czyli jeżeli mówimy o Base64, to ta funkcja i tak zostanie wywołana. Sprawdzę teraz, jak to działa w praktyce. Wpisuję więc zapytanie. Zamień mi proszę tekst. Testuję na Base64. Enter. I mamy odpowiedź. Tylko pytanie, czy dobra. Skopiuję to i zweryfikuję w Cybershafie. Wklejam do inputa. Wybieram sobie tutaj from Base64. I okazuje się, że jak najbardziej działa poprawnie. Agent na jedno zapytanie nie musi używać jednego narzędzia, bo pytanie może być złożone. Na przykład zwróć mi nazwisko prezydenta, który obejmował tę funkcję przed Kwaśniewskim. Odpowiedź chciałbym otrzymać w formacie Base64. I Enter. Chwilę czekamy. I mamy odpowiedź. Skąd on to wziął? Na początku szukał rozwiązania w swojej pamięci podręcznej. Przypadkiem ta informacja nie padła wcześniej. Nie znalazł jej, więc poszedł na Wikipedię. Tam wpisał sobie hasło lista prezydentów Polski. Pobrał całą listę, wysłał ją do OpenAI i następnie za pomocą Custom Toola wrzucił Wałęsę do Base64. Tą odpowiedź zwrócił do modelu i wrzucił do pamięci podręcznej na wypadek, gdyby w przyszłości była nam do czegokolwiek potrzebna. Sprawdzę tylko w Cybershafie, czy ta odpowiedź naprawdę ma sens. Znowu From Base64 i mamy tak. Wałęsa. Czyli wszystko zostało zencodowane poprawnie. Kto jednak powiedział, że musimy z naszym agentem rozmawiać za pomocą czatu. Czat to fajna opcja oczywiście, ale jesteśmy programistami, więc użyjmy sobie webhooka. Wpisuję tutaj webhook i dodaję webhooka tutaj na początku. Klikam sobie w to coś. Drag and drop. I tutaj przeciągam połączenie, tak aby było wejściem do mojego agenta. Jeśli wejście otrzymujemy za pomocą webhooka, no to wyjście też powinniśmy otrzymać tą samą drogą, więc wpisuję webhook, ale teraz jest to webhook response. Zwróć uwagę, że domyślnie odpowiadamy tym, co otrzymaliśmy z poprzedniego bloczka, więc zostawiam to bez zmian. Teraz muszę nauczyć webhooka, w jakim formacie on dostaje dane. Wchodzę więc do konfiguracji i tutaj u góry mam dwa adresy URL. Dla produkcji i do testów. Klikam w Urla, co powoduje jego skopiowanie i wchodzę do terminala. Użyję narzędzia CURL, czyli klienta HTTP, do wysłania requesta. Tylko tutaj widzisz, nie da się tego wysłać w ten sposób, dlatego że numer portu się nie zgadza. Wypaliłem to na porcie 20100. Localhost zostaje, bo używam tego z tego samego serwera. I tu widzę, że coś poszło nie tak, bo muszę kliknąć na test workflow. Wracam więc tutaj i używam opcji listen to the event. Klikam w nią, a następnie wysyłam to samo zapytanie raz jeszcze. Dostaję komunikat. Workflow nie może zostać uruchomiony. Gdzieś tak dlatego wyużywam opcji odpowiedzi na webhooka. Muszę więc w sekcji respond wybrać tutaj, że chcę użyć takiego noda, jak respond to the webhook. Teraz mogę spróbować wysłać zapytanie raz jeszcze. No i jak widać wisi. Wisi bez końca, więc przerwijmy to jako ctrl c i wyślijmy tam jakieś dane na wejście, dlatego że agent nie ma pojęcia nad czym ma się tutaj głowić. Daję ctrl c i daję tutaj opcję minus d, czyli wyślij data i nazwijmy ten parametr na przykład query. Query równa się tutaj zapytanie. Na przykład kim jest Elon Musk? I znak zapytania. Oczywiście teraz uruchamiam nasłuchiwanie naszych zapytań, a więc listen to the event. I wysyłam zapytanie raz jeszcze. Enter. I mamy kolejny błąd, to znaczy nasz webhook nie umie odpowiedzieć na zapytania wysyłane postem. Dlaczego tak się dzieje? Dlatego, że jest skonfigurowany na getty. Wystarczy więc zmienić tylko metodę z get na post i jeszcze raz nasłuchiwać naszego zapytania. Wysyłam jeszcze raz to samo zapytanie. Dane zostały przyjęte, ale agent nie wie co z nimi zrobić, bo w końcu dostał sporo tych danych. Nas interesuje tutaj to query. W takim razie wracamy do edycji naszego agenta i domyślnie agent pobiera wszystko z poprzedniego noda, więc zmieniamy to na definicję naszą ręczną i w to pole z danymi wejściowymi wrzucam zawartość parametrów query i to powinno być już działające. Mogę więc kliknąć opcję test workflow i przejść do terminala i ponownie wysłać te same dane. Mamy tu niestety problem, dlatego, że korzystając z czata każda wiadomość ma swoje unikalne ID. Korzystając z webhooka tego nie ma, więc część magii nie dzieje się za nas. Musimy więc tutaj session ID nie pobrać z poprzedniego klocka, tylko zdefiniować. My mamy jednego użytkownika, więc key będzie jako na stałe zdefiniowany jako whatever i to powinno działać. Teraz mogę ponownie wysłać to samo zapytanie do backendu. Mogę też podglądać w aplikacji 1.8.n co dokładnie się dzieje. Na początku pytamy OpenAI czy wie coś na temat Elona. Czekamy chwilę. Widzę, że backend już coś otrzymał i mamy tu informacje, mnóstwo informacji na temat Elona, czyli jakie firmy założył. OK, zmieńmy teraz zapytanie. Na przykład coś ciekawszego. Dodamy naszym agentowi nową możliwość. Konkretnie mówiąc, damy mu dostęp do internetu. A więc tutaj do tych naszych tooli dodamy sobie coś nowego. Klikam więc na plusa i z dostępnych narzędzi wybieram to, które ma dostęp do internetu. Będzie to SERP API. Używa Google Searcha po prostu. Muszę dodać nowe connection i mam też oczywiście klucze API do tego serwisu. Oczywiście darmowe, konto za free powinno nam wystarczyć. Wklejam sobie je tutaj i w ten oto sposób nasz agent może teraz wyszukiwać informacje, których potrzebuje bezpośrednio w Google. W takim razie wracamy do zapytania i zapytamy o coś, z czym nie radził sobie zwykły model. Czyli podaj sam adres URL bez żadnej komentawy do newslettera technologicznego wysyłanego w każdy piątek przez Jakuba Brzegalskiego o pseudonimie unknow. No i okazuje się, że mamy adres URL. Jest to unknownews. Myślę, że warto go subskrybować. Jak widzisz, tworzenie agentów z użyciem N8n jest dziś innie proste. I teraz pytanie, dlaczego nazwałem to środowiskiem dobrym do prototypowania, a niekoniecznie dobrym na produkcję. Po pierwsze chodzi o skalowalność, kolejkowanie tych wszystkich zapytań, jak to wygląda. Druga rzecz to jest kontrola nad tym, co się dzieje pod spodem. Bo kiedy twój agent używa którego nawędzia? No to się dzieje magicznie. Kolejna sprawa to jest, jak twój agent zawiąza pamięcią. Tutaj mamy do czynienia z Content Window, więc to jest dość proste do zawiązania, ale gdyby pod spodem była baza danych, no to byłoby trudniej. A gdybyś chciał na przykład użyć LLM-a, który jest lokalnie postawiony na twojej mapie, no to z N8n się nie da za bardzo. Trzeba by długo kombinować. I gdybyś chciał użyć na przykład bazy danych, czyli na przykład Postgresa, no to też będzie problem. Chcesz użyć na przykład fragmentu kodu, ale niekoniecznie piszesz w Javascriptie, bo ty wolisz Pythona, albo na przykład .NET-a, albo cokolwiek innego, to tego też się zrobić nie da. Jest mnóstwo rzeczy, które cię ogranicza, ogranicza, ogranicza i jeżeli się coś wysypie, to dla ciebie to często będzie taka czarna magia na zasadzie a co on w zasadzie zrobił pod spodem? Jak to się stało, że taki prompt został wygenerowany? Czy da się te prompty w locie na przykład jakoś korygować? Odpowiedzi na te wszystkie pytania najczęściej brzmią no nie da się. Więc do zastosowań produkcyjnych najczęściej tego rodzaju prototyp wypada przepisać na kod. I to jest problem. I na czym ten problem polega? No na tym polega, że trzeba wiedzieć jak te prompty ręcznie zrobić, jak to połączyć na przykład z bazą danych. Czasami bazą danych klasyczną, taką relacyjną, a czasami bazą danych wektorową, ale trzeba wiedzieć co to jest baza wektorowa. Tego rodzaju rzeczy uczymy na szkoleniu AI Devs. Wraz z Adamem Gospodarczykiem i Mateuszem Chrobokiem uczymy w ciągu pięciu tygodni jak wdrożyć się właśnie w tworzenie tego rodzaju rozwiązań agentowych. Jeśli chcesz wejść w świat integracji systemów IT z rozwiązaniami AI tak na poważnie to wejdź na stronę www.aidevs.pl i zobacz co mamy do zaoferowania. Do zobaczenia na stronie. Produkcja Polskie Towarzystwo Astronomiczne Transkrypcja Magdalena Świerczek-Gryboś