Uwaga! Trwają prace nad nową wersją serwisu. Mogą występować przejściowe problemy z jego funkcjonowaniem. Przepraszam za niedogodności!

🔥 Zgarnij PŁATNY STAŻ w 3 edycji kursu programowania front end (zapisy do 22.01) 🔥

Jak zostać AI developerem

Praca z dużymi modelami językowymi (LLM)

Grigorij Dudnik, AI Developer i Prompt Engineer, mówi o pracy AI developera oraz o drodze prowadzącej do tego zawodu. Rozmawiamy m.in. o tym, czym właściwie zajmuje się AI developer, od czego zacząć naukę programowania na polu sztucznej inteligencji i z jakich technologii korzystać. Poruszamy również temat rynku pracy dla programistów AI i przyszłości tego zawodu.

Poruszane tematy

Gość: Grigorij Dudnik – kim jest i czym się zajmuje 00:31
Czy możesz się przedstawić i powiedzieć, co łączy Cię z branżą IT?

Czym zajmuje się AI developer i jakie są jego zadania
Czy to developer, który tworzy i trenuje np. duże modele językowe, czy taki, który tylko z nich korzysta i np. wdraża u klientów?

Zmiany w zawodzie AI developera po boomie na ChatGPT
Czy od momentu boomu na ChatGPT coś się w tym zawodzie zmieniło?

Najpopularniejsze języki i narzędzia w AI developmencie
Jakie języki i narzędzia cieszą się teraz największą popularnością w AI developmencie? Czy widzisz jakiś zmieniający się trend?

Jak rozpocząć karierę jako AI developer
Co trzeba umieć i jakie doświadczenia mieć na koncie, by startować do zawodu AI developera? Czy junior ma szansę na zatrudnienie?

Znaczenie matematyki i dziedzin powiązanych z AI developmem
Czy wiedza z matematyki i dziedzin powiązanych z psychologią czy biologią (działaniem mózgu) jest niezbędna, a może potrafi być inspirująca?

Wyzwania w pracy AI developera
Z jakimi wyzwaniami mierzy się AI developer? Może jest to np. odpowiednie przygotowanie danych treningowych albo zabezpieczenie modelu przed hakowaniem?

Sprzęt do pracy z AI
Czy zwykły sprzęt, na jakim codziennie programujemy, wystarczy do pracy z AI?

Zaczynając przygodę z AI
Jak zacząć przygodę z AI? Siadamy do komputera i… Co możemy uruchomić, by jak jak najszybciej zobaczyć efekty naszej pracy?

Materiały edukacyjne dla AI developera

Z jakich materiałów korzystać podczas nauki? Czy polecasz jakieś kursy, a może jedynie czytanie dokumentacji?

Projekty do portfolio AI developera
Jakie projekty powinny trafić do naszego portfolio? Czy możesz podać jakieś ciekawe przykłady?

Najczęstsze błędy na etapie nauki AI developmentu
Jakie błędy na etapie nauki i przygotowań do poszukiwania pracy najczęściej popełniają osoby, które ubiegają się o stanowisko AI developera?

Rynek pracy dla AI developerów
Jak wygląda rynek pracy programistów AI? Czy zauważasz wzrost zapotrzebowania w tej działce?

Przyszłość zawodu AI developera
Czy według Ciebie ten zawód to przyszłość, czy wkrótce zapotrzebowanie na niego „zgaszą” ograniczenia związane np. z regulacjami praw autorskich czy trudnościami z pozyskaniem danych do trenowania?

Książka dla aspirującego AI developera 01:06:55
Jaką książkę polecisz osobie, która chce zostać AI developerem?

Grigorij Dudnik – kontakt
Gdzie możemy Cię znaleźć w sieci?

Polecana książka

Kontakt do gościa

➡ LinkedIn: www.linkedin.com/in/grigorij-ai-developer/

➡ YouTube: www.youtube.com/@gregstech6542

Transkrypcja

Moim gościem jest dziś Grigorij Dudnik. Grigorij opowie nam o tym, jak zostać AI developerem. Grigorij, dziękuję, że przyjąłeś moje zaproszenie na rozmowę.

Mateusz, dziękuję za zaproszenie na rozmowę. Cała przyjemność po mojej stronie.

 

To w takim razie zacznijmy od przedstawienia Twojej osoby. Powiedz nam, proszę, co łączy Cię z branżą IT.

Aktualnie zajmuję się w coraz większym stopniu pracą nad aplikacjami opartymi o duże modele językowe, tzw. LLM-y. A jeśli chodzi o moją historię w branży IT – jest to historia ciągłych zmian, szukania nowych technologii, frameworków, wprowadzania nowych języków. Ta ciągła nauka jest moim zdaniem niezwykle istotna, o czym nie raz jeszcze dziś powiemy. 

Swoją przygodę z programowaniem zacząłem jakieś 4-5 lat temu, kiedy to pracowałem głównie z elektroniką i programowałem takie malutkie, 32-bitowe scalaki. Następnie naturalnym kamieniem milowym w karierze elektronika było przejście na Raspberry Pi, a kiedy zacząłem bawić się z Raspberry Pi, musiałem nauczyć się Pythona, by móc pisać skrypty na ten mikrokomputerek. Gdy nauczyłem się tego języka, okazało się, że w Pythonie można tworzyć dużo więcej innych ciekawych rzeczy, nie tylko skrypty na Raspberry Pi. Ten język niezwykle mi się spodobał. 

Następnie zacząłem bawić się sztuczną inteligencją. Pracowałem jako freelancer przy różnych projektach związanych z wizją komputerową, czyli komputerowym przetwarzaniem obrazu, które polega na tym, że na przykład na zdjęciu wyszukujemy jakieś obiekty, wzorce, patterny albo przekształcamy to zdjęcie na jakiś inny kształt. W tym czasie trenowałem sieci neuronowe, bardziej hobbystycznie, bo wtedy ciężko było znaleźć pracę w tej branży, przynajmniej w Polsce, a niezwykle mnie to ciekawiło.

A kiedy rok temu zapoczątkowała swoje istnienie branża generatywnego AI wraz z pojawieniem się ChatGPT, niezwykle zainteresowałem się tym tematem i stwierdziłem, że jest to coś dla mnie. Działałem również w paru start-upach, w których pełniłem obowiązki CTO. Tutaj ciekawym doświadczeniem była praca dla start-upu Primer AI. Polegała ona na tworzeniu aplikacji, która na podstawie zdjęcia naszej twarzy rozpoznaje nasz dokładny odcień skóry i dobiera pasujące nam kosmetyki. Mimo że z tego start-upu niewiele wyszło, to uważam, że praca w nim była niesamowitą przygodą, tak jak zresztą praca w innych start-upach, w których człowiek uczy się dużo więcej, niż w tym czasie nauczyłby się w zwykłej pracy.

Gdy zaczynałem pracę w Primer AI, miałem za zadanie stworzyć część związaną z wizją komputerową i sztuczną inteligencją, która dobiera kolory. Musiałem zrobić back end aplikacji, wtedy był to akurat Django, cały front end i, o zgrozo, najgorsze – postawić tę całą aplikację na serwerach. Z tych czterech rzeczy „jako tako” umiałem pracować ze sztuczną inteligencją i rozpoznawaniem obrazu. Reszty nie umiałem i nie wiedziałem, jak te wszystkie rzeczy zrobię, ale wiedziałem, że mi się uda. Trzy miesiące później aplikacja stała już na serwerach i szczęśliwe użytkowniczki z niej korzystały. Da się więc zrobić coś fajnego, nie mając 8 lat doświadczenia i doktoratów w branży, o czym będziemy jeszcze mówić. Zmierzam do tego, że ta ciągła nauka jest rzeczą niezwykle kluczową, zwłaszcza w tak nowoczesnych dziedzinach jak AI.

To może tylko dopytam: ile jest w takim razie odcieni skóry?

Nie liczyłem, ale jest ich naprawdę dużo. Aby to sprawdzić, można wejść na stronę Hebe czy Rossmanna i zobaczyć rozpisane kolory skóry pod dany kosmetyk. Jest ich chyba kilkadziesiąt.

Trochę ich jest.

 

Teraz chciałbym zapytać Cię o to, czym w ogóle zajmuje się AI developer. Czy to developer, który tworzy i trenuje duże modele językowe, czy taki, który tylko z nich korzysta, na przykład wdraża u klientów?

Chodzi tutaj raczej o korzystanie z modeli językowych, bo trenowanie ich jest domeną sztucznej inteligencji klasycznej. A w naszym przypadku mówimy bardziej o generatywnej sztucznej inteligencji i AI developer to osoba, która korzysta z tych modeli. 

Ewentualnie, w niektórych przypadkach, może je dotrenować i jest to tzw. fine tuning, o którym jeszcze sobie powiemy. Chodzi tu głównie o wyposażanie tych modeli w różne dodatkowe narzędzia oraz ewentualnie dzielenie aplikacji na system wielu modeli – agentów, specjalizujących się w różnych rzeczach w tej samej aplikacji. 

A jeśli mówimy o narzędziach, w które możemy wyposażyć nasz model, to mamy tutaj dosyć duży wybór. Mamy pamięć w postaci baz danych: bazy klasycznej i wektorowej. W przypadku tej wektorowej określenie „baza danych” nie jest do końca odpowiednie. Chodzi tu bardziej o wektorowe silniki wyszukiwania, czyli narzędzie, w którym zapisujemy nasze znaczenie słów albo całych zdań, paragrafów tekstu w postaci wektorów, czyli kilkuset albo tysięcy równych liczb, które na przestrzeni znaczeń odzwierciedlają znaczenia tego tekstu. Czyli w przypadku modelu OpenAI, który wektoryzuje nam tekst, będzie 1536 równych liczb, które reprezentują nasz tekst.

Chciałbym Cię jeszcze dopytać o jedną rzecz: czy bazę danych tworzymy po to, żeby nie generować za każdym razem nowych odpowiedzi i jeżeli odpowiedź jest dobra, zwracać ją ponownie coś takiego jak cashowanie? Czy jest to coś zupełnie innego?

Nie, cashowanie to też jest zabieg, którego można używać w tej branży, aby zmniejszyć koszty w przypadku często powtarzających się odpowiedzi. Tutaj jednak chodzi o posiadanie własnej bazy wiedzy na temat klienta, na temat np. naszej firmy. Jest to potrzebne przy budowaniu np. chatbota – warto, aby nasz chatbot wiedział, jakie godziny otwarcia ma nasza firma, jakie produkty oferuje, aby nie proponować rzeczy wymyślonych z kosmosu, a tylko te, które faktycznie mamy w ofercie.

Czyli można powiedzieć, że wektory są to słowa klucze, do których przyporządkowujemy zapytania?

Nie do końca. W pewnym sensie tak, ale nie chciałbym, żeby myliło się to ze zwykłym, tradycyjnym wyszukiwaniem właśnie po słowach kluczach. Chodzi tu bardziej o to, że mamy np. słowo pies i słowo kot. Są to dosyć podobne znaczeniowo słowa, ponieważ oba odnoszą się do zwierząt domowych, więc w przestrzeni wektorowej będą blisko siebie. Z kolei np. dinozaur będzie jednak trochę dalej, bo nie mieszka w domu ani nawet w tej epoce. Natomiast np. statek kosmiczny będzie w ogóle gdzieś w kosmosie. Także chodzi tutaj o to, że im bliżej znaczeniowo mamy dane słowa, tym bliżej są one w przestrzeni wektorowej.

OK.

Mam nadzieję, że jakoś to wytłumaczyłem. 

Wracając do narzędzi – naszym sieciom i modelom językowym możemy dawać dostęp do Internetu. I niekoniecznie mówimy tutaj o dostępie do całego Internetu, a np. tylko do konkretnych stron internetowych ze sprawdzoną wiedzą. Możemy również dawać narzędzia do obliczeń matematycznych, bo akurat modele nie są kalkulatorami i w ogóle nie są przeznaczone do tego, żeby przeprowadzać jakiekolwiek obliczenia matematyczne. Jeśli chcemy, żeby model dokonał jakichś obliczeń, warto wyposażyć go w prosty kalkulator, albo nawet w bardziej zaawansowane narzędzie jak WolframAlpha. 

Nasze modele możemy też wyposażyć w inne typy sztucznej inteligencji, na przykład generatory obrazu, mowy albo narzędzie do analizy tychże obrazów czy mowy. Innymi słowy, możemy dawać im tak zwaną multimodalność. 

Jeśli chodzi o typy aplikacji, które można stworzyć w programowaniu AI, to mamy kilka możliwych opcji: np. aplikację do rozmowy z dokumentem, która pozwala ładować do bazy wiedzy nasz dokument, z którym możemy później porozmawiać. Załóżmy, że w 20-stronicowym raporcie giełdowym spółki ciężko odnaleźć jakąś jedną drobną informację, która nas interesuje, a jeśli mówimy o jakiejś państwowej ustawie, to jest jeszcze gorzej. I taka aplikacja, która potrafi przeszukać dokument, znaleźć odpowiedni kawałek i na tej podstawie wygenerować odpowiedź, jest czymś, co naprawdę potrafi zaoszczędzić czas.

Myślę, że super pomysłem, na którym można zarobić grube pieniądze, byłoby stworzenia aplikacji, która zebrałaby wszystkie polskie ustawy, które są w Sejmie i nadzorowała zmiany, analizując, czy wpływają one na twoją działalność. To by było idealne rozwiązanie, bo jest tego tyle, że nikt nie jest w stanie tego obecnie śledzić.

Myślę, że są start-upy, które albo już na tym pracują, albo za chwilę będą. Jak najbardziej – sztuczna inteligencja jest akurat potrzebna do tego, żeby zrozumieć to, czego ludzie nie zrozumieją. 

Chyba że będzie to największa porażka sztucznej inteligencji. Okaże się, że jednak nie da rady.

Cóż, nie zdziwiłbym się, ale bądźmy dobrej myśli. 

Tak że wracając do tematu, tutaj często mówimy o takich systemach jak  RAG (Retrieval-Augmented Generation), które mają swoją bazę wiedzy, czy to z dokumentu, czy z innych źródeł, i w tej bazie wiedzy potrafią wyszukać odpowiednie informacje i na ich podstawie wygenerować poprawną odpowiedź. 

Następnie możemy także budować takie aplikacje jak chatboty dla naszej firmy, które opowiadają np. o wcześniej wspomnianych godzinach pracy czy innych informacjach o naszej firmie. 

Są również aplikacje, które potrafią przetwarzać dane nieustrukturyzowane. Zresztą LLM-y bardzo dobrze potrafią przetworzyć czysty tekst, którego nie zrozumie zwykły program komputerowy, na format, który ten zwykły program komputerowy zrozumie dużo lepiej, na przykład na JSON-a. 

Oczywiście mówimy tu też o tworzeniu treści, co nie jest żadnym zaskoczeniem dla naszych słuchaczy. LLM-y potrafią tworzyć nie tylko książki albo artykuły, ale również aplikacje, które zrobią dla nas np. idealne CV. 

Następnie mamy spersonalizowanych asystentów, mających wiedzę na nasz temat albo na temat naszej firmy, umiejących pomagać nam w pracy, w generowaniu treści, artykułów, w taki sposób, jakby te treści były napisane przez nas, odnosząc się do naszych wspomnień i doświadczeń. Personalizacja LLM-ów daje duże możliwości rozwoju i dlatego OpenAI dodaje ostatnio narzędzia do rozmawiania z dokumentami i dodawania swojej bazy wiedzy LLM-ów, ale o tym za chwilę. 

Mamy też np. systemy automatycznego podejmowania decyzji, kiedy to aplikacja może podejmować te decyzje nawet w robocie i kierować tym robotem, aczkolwiek jest to wizja bardziej przyszłościowa. Na razie LLM-y są jednak dosyć ułomne i nie potrafią podejmować odpowiedzialnych decyzji bez sprawdzenia przez człowieka.

 

Widać, że sporo rzeczy możemy zrobić, a czy od momentu boomu na ChatGPT coś się w tym zawodzie zmieniło? Jak to wygląda z Twojej perspektywy?

Na początek może rozgraniczymy, czym jest właściwie AI generatywna, a czym jest AI klasyczna. Klasyczna AI jest to cała sztuczna inteligencja, którą ludzkość zajmowała się jeszcze rok temu albo wcześniej, czyli: computer vision, o którym już wspomnieliśmy, zadania w stylu trenowania sieci neuronowych, czyli deep learning, albo chociażby zadanie typu regresja, gdzie mając określone wejście i określone wyjście, musimy znaleźć funkcję pomiędzy tymi punktami. 

Generatywna sztuczna inteligencja pojawiła się wraz z powstaniem ChatGPT. Właściwie istniała ona dużo wcześniej, ale wtedy stała się dużo bardziej popularna. Polega ona przede wszystkim na wykorzystywaniu modeli językowych w naszej aplikacji. Moim zdaniem generatywna sztuczna inteligencja jest w stanie stworzyć dużo więcej fantastycznych rzeczy, kosztem dużo mniejszego nakładu pracy i czasu. 

Pojęcia klasycznej sztucznej inteligencji i generatywnej AI są ze sobą często mylone – często ta generatywna jest traktowana jako kontynuacja tej klasycznej AI. W praktyce te dwa pojęcia mają ze sobą tyle wspólnego, co Java i JavaScript – mają coś wspólnego w nazwie i owszem, znajomość jednego pewnie przełożyłaby się na podstawy znajomości tego drugiego, ale na tym podobieństwo się kończy. 

Warto też wspomnieć, że generatywna AI jest dziedziną niezwykle świeżą, istniejącą dopiero od roku. Ciągle coś się tutaj zmienia, dziedzina ta rozwija się bardzo dynamicznie. Często rzeczy, które powstały dwa, trzy miesiące temu, dzisiaj mogą być zupełnie nieaktualne. Dlatego w tej branży istotna jest przede wszystkim ciągła nauka, ciągłe doskonalenie się, szukanie nowych technologii i otwartość na zmianę. Najfajniejsze w tym jest to, że jesteśmy prekursorami w tej dziedzinie. Często robimy coś, czego nikt przed nami jeszcze nie robił. 

 

Mam nadzieję, że jak puścimy ten odcinek to wszystko, o czym mówimy, będzie jeszcze aktualne, bo chciałbym zapytać o to, jakie języki i narzędzia cieszą się teraz największą popularnością w programowaniu AI? Czy widzisz jakiś zmieniający się trend?

Faktycznie te rzeczy się zmieniają. Myślę, że to wszystko będzie jeszcze aktualne, bo narzędzia te są dosyć ogólne i podstawowe, a z biegiem czasu tylko się ulepszają. 

Jeśli chodzi o popularne teraz narzędzia, to możemy zacząć od biblioteki LangChain. Myślę, że jest to najbardziej popularna i powszechna biblioteka do programowania aplikacji opartych o generatywną sztuczną inteligencję. Biblioteka ta dostępna jest w Pythonie i w JavaScripcie i wprowadza nam ona pewną dodatkową warstwę abstrakcji, która często pomaga, choć czasami może też przeszkadzać.

Warstwa abstrakcji pomaga nam ustrukturyzować pracę z generatywną AI, a funkcje łączeniowe są pewnego rodzaju wraperami dookoła innych narzędzi. Jako przykład możemy podać requesty do OpenAI, które normalnie zajęłyby nam 10 linijek, a w LangChainie możemy to zrobić za pomocą 3 linii.

W strukturyzacji, tak samo, widzimy wręcz pewną filozofię – LangChain ma na przykład swój format dokumentów. Ma też do tego swoją klasę, która ma własne właściwości i funkcje. Wszystkie dokumenty, niezależnie od tego, skąd je załadujemy – czy to będzie plik tekstowy czy obiekt JSON, czy małe strony internetowe – wszystkie trafią ostatecznie do tej klasy dokumentu i będą tak rozpatrywane. Możemy więc mieć kilka różnych źródeł, które i tak będą później traktowane w ten sam sposób. Z jednej strony jest to pomocne – zmniejsza ilość kodu i wprowadza strukturyzację.

Jednak są też wady LangChaina takie jak: warstwa abstrakcji, której, po pierwsze LangChain musi się nauczyć, a po drugie utrudnia nam ona zobaczenie tego, co dzieje się pod spodem. Utrudnia również w ogóle zrozumienie i debugowanie aplikacji opartych o LLM-y. Dlatego nie polecam LangChaina dla osób zupełnie początkujących. Uważam, że warto najpierw zrozumieć, jak w ogóle działają LLM-y, a dopiero później próbować nakładać na to dodatkowe warstwy abstrakcji.

Zresztą LangChain nie jest nam właściwie konieczny do tworzenia aplikacji opartych o LLM-y, bo tak naprawdę sami możemy stworzyć prostą aplikację za pomocą zwykłych requestów do OpenAI, a te narzędzia podłączyć w sposób typowo Pythonowy. Możemy napisać je na piechotę, co aktualnie często się praktykuje, bo wiele integracji LangChainowych jest albo niedopracowanych, albo mają tak ograniczoną funkcjonalność, że prościej zrobić coś samodzielnie. 

Oczywiście powstały rozwiązania, które pomagają nam z tą nieprzejrzystością LangChaina, i tutaj mówimy o takich rozwiązaniach jak LangSmith albo Weights & Biases. Są to strony internetowe, na które nasza aplikacja może wysyłać dane i na tych stronach już wyraźnie możemy zobaczyć, co nasz LLM dostaje na wejściu, sprawdzić wartości zmiennych czy zobaczyć cały prompt. Często przy budowaniu aplikacji opartych o LLM-y ten prompt jest budowany dynamicznie. To znaczy, że nie mamy jednego promptu, który jak w przypadku ChatGPT po prostu piszemy, tylko jest jakaś instrukcja i pod nią / nad nią czy dookoła tej instrukcji wszędzie są zmienne, które program zastępuje innymi kawałkami tekstu, wstawia jakiś kontekst i ostatecznie to, co widzi LLM, to nie jest to, co my widzimy w kodzie aplikacji.

Dla mnie, jako AI developera, bardzo istotne jest jednak zobaczyć to, co LLM widzi ostatecznie, aby zrozumieć, jak on w ogóle myśli, aby trochę się w niego wczuć i zrozumieć, dlaczego popełnia te czy inne błędy. Dlatego warto używać takiej aplikacji jak LangSmith, która dokładnie pokazuje nam na stronie wszystko to, co wchodzi do LLM-ów.

Porównując te dwie aplikacje: LangSmith jest trochę lepszy niż Weights & Biases. Po pierwsze, na razie jest on czytelniejszy, po drugie, Weights & Biases delikatnie opóźnia start i zakończenie naszej aplikacji, gdyż musi wysłać pewne dane. Po trzecie, Weights & Biases wymaga napisania dwóch linijek kodu w naszym kodzie, a LangSmith tego nie wymaga. Te różnice nie są tak duże.

LangSmith ma jeden mankament polegający na długiej liście oczekujących. W tej liście czekałem około miesiąca i nie wiem, ile miesięcy bym jeszcze czekał, gdybym nie otrzymał dostępu po znajomości. Jeśli więc jesteś początkującym w tej działce, to polecałbym zapisać się na listę oczekujących już teraz, a za jakieś 2-3 miesiące, kiedy faktycznie będziesz potrzebował dostępu, być może się uda. W międzyczasie możesz też korzystać z Weights & Biases. 

Kolejnym istotnym narzędziem jest LlamaIndex. Jest to również biblioteka do pisania aplikacji opartych o LLM-y, tyle że – w odróżnieniu od LangChaina, który bardziej jest narzędziem ogólnego przeznaczenia – LlamaIndex specjalizuje się w tworzeniu RAG-ów i posiada szereg narzędzi do aktywnego tworzenia czy ewaluacji. Akurat ewaluacja w przypadku modeli językowych jest rzeczą niezwykle skomplikowaną i niejednoznaczną. W przypadku porównania dwóch odpowiedzi modelu trudno jest zrozumieć, która odpowiedź jest lepsza – nie jest to jednoznaczne w przeciwieństwie do programowania zwykłego czy nawet klasycznego machine learningu, gdzie mamy możliwość porównać liczby i stwierdzić, czy funkcja straty jest większa czy mniejsza. W wielu przypadkach warto więc wyposażyć się w te zaawansowane narzędzia. Jeśli chodzi o LlamaIndex, to jeszcze tego nie testowałem, więc nie chcę za dużo o tym mówić. 

Odpowiadając na twoje pytanie o trend, który tutaj widzimy: myślę, że LangChain będzie się stawał coraz bardziej dojrzałym frameworkiem. Mam nadzieję, że zwalczy niedługo choroby wieku dziecięcego i jego narzędzia będą dobrze pełniły swoje funkcje. Prawdopodobnie za jakiś czas będzie to narzędzie konieczne w AI developmencie, bo będzie on na tyle zaawansowany, że gdy dostanie się warstwę abstrakcji, to po prostu nie będzie się dało wszystkiego poskładać w jakikolwiek sensowny sposób.

Chociaż widzimy też pewien kontrtrend do tego, mianowicie po ostatnich wystąpieniach OpenAI, po Dev Day’u 6 listopada, kiedy to OpenAI wprowadza własne narzędzia, takie jak właśnie bazy wektorowe, wyszukiwanie dokumentów czy zaawansowane tworzenie funkcji. Wydaje mi się, że OpenAI próbuje sprawić, by AI development był dostępny dla tłumów, tak aby każdy potrafił go obsłużyć i korzystać z ich rozwiązań. Jest to z jednej strony rozwiązanie na plus, bo faktycznie mamy teraz mniejszy próg wejścia i łatwiej też zrobić prototypy, jakieś proste aplikacje na własny użytek. Z minusów widzę uzależnienie od jednego dostawcy, bo co innego, gdy mamy aplikację opartą o kilka różnych narzędzi: LLM, baza wiedzy, funkcje, a co innego, gdy połowa naszej aplikacji czy jej całość jest po stronie OpenAI. Ciężko jest wtedy wymienić ten jeden kawałek w postaci LLM-u na inny, bo będziemy musieli wymienić pół aplikacji. Poza tym nie jesteśmy w stanie jakkolwiek kontrolować narzędzi OpenAI, przynajmniej na razie. Nie są one doskonałe i nie da się, przynajmniej w obecnej chwili, stworzyć idealnego RAG-a, czyli systemu wyszukiwania do wszystkiego. Mówimy tutaj raczej o dostrojeniu RAG-ów pod każdy konkretny przypadek o osobnym podziale dokumentów, więc ciężko tutaj o uniwersalność.

 

Wspomniałeś trochę o tych mniej doświadczonych osobach – co trzeba umieć i jakie doświadczenie mieć na koncie, by startować do zawodu AI developera? Czy junior ma szansę na zatrudnienie?

Jak już wcześniej powiedziałem, ta dziedzina jest niezwykle świeża. Istnieje dopiero od roku i właściwie ciężko tutaj o jakichkolwiek seniorów czy juniorów. Wszyscy są raczej mniej więcej równi i owszem, te osoby, które weszły do tej branży wcześniej, pół roku temu czy rok, będą miały na pewno większe wymagania niż osoby, które dopiero zaczynają. Ta różnica wciąż nie jest aż tak duża, jak w programowaniu klasycznym, gdzie są osoby, które siedzą w tej branży od kilku czy kilkunastu lat.

Można też próbować wyróżnić się na tle osób, które pracują już w AI. Ta działka jest już na tyle szeroka, że możliwe jest to, że za chwilę wszyscy będą się bardziej specjalizować. Jedni będą siedzieć bardziej w RAG-ach, inni w pisaniu promptów, jeszcze inni skupią się na multimodalności, czy generacji obrazów. Jednak uważam, że na razie nie można szukać drogi na skróty i trzeba uczyć się jak najwięcej. Nauka, nauka, jeszcze raz nauka i tyle. I to nas zaprowadzi do szczęśliwej przyszłości. 

Uważam też, że aby wejść do tej działki, nie trzeba mieć doświadczenia z klasycznego machine learningu. Jak już powiedzieliśmy, to nie są branże mocno ze sobą powiązane. Owszem, wiedza, jakieś doświadczenia przydadzą nam się i przełoży się to na zrozumienie podstaw działania modeli. Są pewne rzeczy, które trzeba zrozumieć, chodzi np. o działanie modelu i sieci neuronowych pod spodem. Nie są to jednak rzeczy, na które potrzebujemy 5 lat doświadczenia. To są rzeczy, które da się zrozumieć w dwa wieczory, czytając 3 artykuły z internetu i to wszystko. 

Aczkolwiek dodam tutaj dużą „gwiazdkę” – jest to moje zdanie i opowiadam tutaj z perspektywy AI developera. Tłumaczę, jak zacząć pisać aplikacje i jak docelowo pisać je jak najlepiej. Jednak rekruterzy, zwłaszcza ci nietechniczni, mają na ten temat zazwyczaj swoje zdanie. Zdanie to polega na tym, że przede wszystkim liczą się lata doświadczenia, nie jakieś umiejętności. Co zresztą da się zrozumieć, bo jeśli ktoś jest osobą nietechniczną, to ciężko mu ocenić, czy osoba techniczna zna się na rzeczy, czy nie. Jedynym wskaźnikiem, który zostaje rekruterowi nietechnicznemu, są lata doświadczenie, ale czy są to lata coś znaczące? Na rozmowie o pracę pamiętajcie więc, że warto mieć 5 lat doświadczenia w branży, która istnieje od roku albo chociażby 5 lat doświadczenia w zwykłym AI, które może nie jest jakoś związane z tym AI generatywnym, ale AI w nazwie się zgadza, więc wszystko porządku. 

Jeśli ktoś wcześniej pracował jako Data Scientist, to też będzie przydatne, zwłaszcza umiejętności w kontekście budowania aplikacji z własną bazą wiedzy. Przyda się to w przypadku RAG-ów, gdzie mamy dużo pracy z dzieleniem danych na kawałki, z dobieraniem kontekstów, tagowaniem danych, wybieraniem, w jaki sposób te dane będą wyszukiwane – czy bardziej wektorowo, w sposób klasyczny czy hybrydowy. W przypadku, gdy mamy wyszukiwanie klasyczne po słowach kluczowych i wektorowe naraz, te dane często trzeba odpowiednio podzielić, opisać, i jest z tym dużo pracy. 

Kolejną przydatną umiejętnością będzie podejmowanie wszelakich decyzji związanych z ChatGPT. 

A rzeczą konieczną do wystartowania w branży jest umiejętność programowania. Głównie w Pythonie, bo wszystkie narzędzia, o których tutaj mówimy, są dostępne w tym języku, niekiedy też w innych językach. Znam wiele osób, które korzystają z JavaScriptu i całkiem dobrze w tym temacie się odnajdują. Są to więc dwa główne języki, które warto znać i umieć w nich kodować, np. wysyłać requesty HTTP, umieć stawiać swoją bazę danych i z tej bazy danych korzystać. Są rzeczy, które naprawdę są potrzebne, nawet niezbędne, żeby wystartować.

I znów powtórzę, to o czym mówiłem już wcześniej i zawsze to powtarzam: trzeba umieć się uczyć, być otwartym na nowe zmiany, nowe technologie i być gotowym na to, że to, czego się nauczyliśmy, wkrótce nie będzie już aż tak potrzebne i trzeba będzie nauczyć się czegoś nowego.

 

To może dopytam, bo już wspomniałeś parę razy o ChatGPT, a od paru miesięcy jest zalew kursów związanych właśnie z tzw. promptingiem. Czy uważasz, że umiejętność zadawania kluczowych pytań jest istotna dla takiego AI developera, czy nie jest to tak bardzo ważne? I może dodatkowo, czy to nie jest tak, że obecnie istotne jest to, żeby dobrze zadać pytanie, czy może za jakiś czas po prostu ChatGPT czy inne tego typu narzędzie będzie lepsze i sposób zadawania pytań nie będzie już miał tak wielkiego znaczenia?

To jest ciekawe pytanie. Aktualnie faktycznie niezwykle istotne jest to, w jaki sposób zadamy pytanie, ale widzimy też taki trend, że modele te są rzeczywiście coraz mądrzejsze i coraz bardziej odporne na błędne zadawanie pytań: pracując z GPT-4 możemy sobie pozwolić na więcej – pytania nie muszą być doskonałe, aby działać, co nie miało miejsca np. w GPT-3.5, gdzie faktycznie te instrukcje musieliśmy dużo bardziej doprecyzowywać. Być może dzięki inteligentniejszym modelom rzeczywiście to już nie będzie aż tak bardzo potrzebne w przyszłości.

Ciekawym przykładem jest nowy generator obrazu od AI – DALLE-3 – w którym sprawa z wybieraniem odpowiednich słów jest jeszcze bardziej karykaturalna. I tutaj taka dygresja odnośnie do generatora obrazów – często mówimy o wypisywaniu słów kluczowych, takich jak: ma być ładne zdjęcie, jak z okładki magazynu modowego, załóżmy o takich i takich kolorach, zrobione taką soczewką aparatu itp. W przypadku DALLE-3 mamy do czynienia z czymś takim, że prompt, który tam wpisujemy, jest najpierw przerobiony przez model językowy, który ten prompt przerabia na lepszy prompt, dodaje wszystkie potrzebne opisy, a dopiero wtedy ten przerobiony piękny, długi prompt z dokładnie opisanym zdjęciem trafia do generatora obrazu i na tej podstawie obraz się generuje. I jest to kolejny przykład odporności na brak umiejętności osoby promptującej.

Aczkolwiek pamiętajmy też o kilku innych kwestiach. Po pierwsze, do momentu, gdy przestanie się liczyć to, jak wpisujemy prompt, miną jeszcze miesiące. Po drugie, gdy napiszemy lepszy prompt, to wciąż ten model będzie działać, tylko po prostu lepiej, a być może będzie też tańszy. A trzecia rzecz, o której trzeba pamiętać: to, że modele będą zawsze coraz mądrzejsze, wcale nie oznacza, że zawsze na tych coraz mądrzejszych modelach będziemy pracować. Wyobraźmy sobie taką sytuację, kiedy mamy własny serwer, który ma ograniczone zasoby i musimy na nim postawić swój model open source. Albo co gorsza, mamy jakiegoś mobilnego robota czy statek latający, a nawet drona i każdy kilogram jest na wagę złota. Sprzęt i karty graficzne, które on udźwignie, są na pewno dużo mniejsze, więc trzeba będzie dla niego postawić dużo słabszy model. Rzeczywiście, w przypadku pracy z dużo słabszym modelem, prompting jest bardzo istotny i moim zdaniem promptingu trzeba się uczyć.

 

Czy wiedza z matematyki i dziedzin powiązanych z psychologią czy biologią, np. działaniem mózgu, jest niezbędna? A może potrafi być inspirująca?

Bardzo trafnie wymieniłeś tu psychologię. Często sam zauważam podobieństwa między działaniem modelu językowego a działaniem ludzkiego mózgu. Jakiś czas temu nagrywałem nawet filmik na temat tego, że modele językowe były podatne na ludzkie techniki negocjacyjne, techniki wzorowane na ludzkiej psychologii. Zresztą nie dziwota, bo te modele były trenowane na danych wyprodukowanych przez ludzi, więc siłą rzeczy jakiś tam ślad po tych ludziach w sobie niosą.

Tutaj jako przykład można przeprowadzić taką słynną technikę chain-of-thought, w której to mówimy modelowi, żeby zastanowił się i przemyślał dokładnie, co chce powiedzieć i dopiero wtedy nam odpowiadał. Zwiększa to skuteczność tego, że model faktycznie krok po kroku wszystko przemyśli, zamiast mówić cokolwiek, na szybko. Model przeanalizuje najpierw to, co chce powiedzieć, i dopiero później połączy swoje rozumowanie kawałek po kawałku i dojdzie do poprawnego rozwiązania.

Kolejną ciekawą teorią, o której słyszałem, jest tak zwane Latent Space Activation. W przypadku tej teorii mamy do czynienia z aktywacją pewnych obszarów mózgu, czyli pamięci naszego LLM – czyli na przykład, jeśli mówimy w jakiś określony sposób, np. bardziej oficjalny, to jest wielka szansa na to, że model odnajdzie bardziej wiarygodne dokumenty w swojej pamięci, np. jakieś oficjalne dokumenty, opracowania, aniżeli posty z Reddita. Na podstawie tych dokumentów będzie też przeprowadzał lepsze rozumowanie. Tutaj dość często używa się takich słów jak:Weź głęboki wdech i dokładnie przemyśl, jak byś ten problem rozwiązał. Możemy zastanawiać się nad tym, w jaki sposób model miałby wziąć głęboki wdech, jednak okazuje się, że w jakiś sposób przekłada się to na jego lepsze rozumowanie. Warto zaznaczyć, że Latent Space Activation to jednak tylko teoria, która nie jest potwierdzona badaniami, a raczej jest teorią wynikającą z praktyki. 

Często narzekamy na ułomność modeli i na to, że zapominają pewne rzeczy, tracą uwagę czy pomijają pewne nasze instrukcje. Popatrzmy jednak na ludzi. Czy z nami przypadkiem nie jest tak, że też zapominamy? Na przykład, gdy napiszemy do kolegi wiadomość, zadając mu kilka pytań jedno pod drugim, czy aby na pewno on również odpowie nam kilkoma odpowiedziami jedna po drugiej, na każde z tych pytań? Czy to nie jest tak, że to pytanie zleje mu się w głowie i odpowie nam jedynie na ostatnie pytanie? Tak że moim zdaniem pod wieloma względami te modele są wręcz lepsze od ludzi, zwłaszcza od tych ludzi współczesnych, przytłoczonych nadmiarem informacji i niemających na nic czasu. 

Odpowiadając na twoje pytanie: uważam, że wiedza z zakresu psychologii jak najbardziej może być tutaj inspiracją, a w przyszłości być może posłuży jako coś więcej i będzie mieć bardziej praktyczne zastosowanie w tej dziedzinie.

Co do wymogów matematycznych to myślę, że matematyka jest tak samo istotna, jak w programowaniu zwykłym. Tutaj tak samo – trzeba ogarniać matmę, ale nie w jakimś dużym stopniu. 

Jeśli chodzi o znajomość anatomii mózgu, to jest ona bardziej przydatna w klasycznym ML-u, gdzie faktycznie budujemy sieci neuronowe. W naszym przypadku nie jest to istotne.

 

OK, idźmy dalej: powiedz nam proszę, z jakimi wyzwaniami mierzy się AI developer? Może jest to na przykład odpowiednie przygotowanie danych treningowych, a może zabezpieczenie modelu przed hakowaniem?

Za największe wyzwanie uważam tutaj niedeterministyczność modeli językowych – w odróżnieniu od programowania klasycznego, gdzie zawsze podając na wejście A, na wyjściu dostaniemy B. W przypadku modeli językowych zawsze mówimy o pewnym prawdopodobieństwie. Jest pewna szansa, że model odpowie nam dobrze, jest pewna szansa, że odpowie „jako tako” i jest szansa, że odpowie nam totalnie źle. Często niestety nie możemy tej szansy zredukować do zera. Czasem po prostu poruszamy się w obszarze prawdopodobieństwa i chcemy raczej zwiększyć szansę na dostanie odpowiedzi poprawnej i ewentualnie w jakiś sposób wyłapywać odpowiedzi totalnie złe.

Na szczęście są do tego różne techniki i mówimy tutaj nie tylko o pisaniu lepszych promptów, chociaż to też jest pewne rozwiązanie, ale też np. o dodawaniu dodatkowych narzędzi sprawdzających. Mowa tu chociażby o innych LLM-ach, które sprawdzają wyjście z naszego głównego LLM-u, albo nawet o prostszych narzędziach programistycznych, które np. parsują JSON-a wydanego przez LLM i sprawdzają, czy aby na pewno jest to JSON.

Nigdy nie ma pewności, że aplikacja będzie działać w stu procentach poprawnie. Myślę, że to jest największy mankament. Zresztą piękno AI developmentu polega na tym, że łączymy sztuczną inteligencję ze zwykłym programowaniem i te dwie rzeczy wzajemnie się uzupełniają. Jedną z podstawowych zasad jest to, że jeśli coś da się zrobić w sposób zwykły, programistyczny, to zróbmy to w sposób programistyczny, żeby zwiększyć tę deterministyczność.

Kolejnym wyzwaniem jest zabezpieczenie przed hakowaniem modelu, czyli przed tzw. prompt injection, kiedy do promptu wstawia się pewne teksty do kontekstu naszego modelu, które mogą odwrócić zachowanie modelu, spowodować, że zacznie on robić coś innego niż miał robić. Jest to niezwykle ciekawy temat, ponieważ niekoniecznie mówimy tutaj o celowym hackowaniu tego modelu. Często są sytuacje, kiedy model może zhakować się sam.

Wyobraźmy sobie taką sytuację: mamy dziewczynę, dajmy na to, ma na imię Ala, która ma chłopaka Czecha o imieniu Jiři. Ala poprosiła nas o napisanie aplikacji, która będzie tłumaczyła na język czeski jej listy miłosne do Jiřiego, żeby on mógł je lepiej zrozumieć. Załóżmy, że zrobiliśmy taką aplikację pobierającą jako kontekst jej listy, mającą pewne instrukcje i tłumaczącą te listy na język czeski. Wszystko działa świetnie do pewnego momentu. Do momentu, kiedy Ala pokłóci się z Jiřim i w wyniku tejże kłótni w ostatnim liście napisze do niego: nie rób mi tak więcej, zapomnij o wszystkim, co między nami było, musisz mnie za to przeprosić! Dostając taki tekst w kontekście, model może nagle – zamiast przetłumaczyć go na czeski – przestać to robić, zapomnieć o wszystkim i przeprosić. Przed takimi sytuacjami również trzeba się umieć zabezpieczyć.

Kolejnym wyzwaniem w przypadku korzystania z modeli OpenAI jest oczywiście uniknięcie bana od OpenAI. Nasi użytkownicy mogą wpisywać różne treści i niestety ten ban jest całkiem realnym zagrożeniem, a jeśli go dostaniemy, to nasza aplikacja zostanie wycięta i nie będziemy mogli z niej korzystać, o ile jakoś jej nie zabezpieczymy, posiadając np. kilka zapasowych kont. 

Następnym istotnym zagadnieniem są także halucynacje modelu, czyli zdolność modelu do wymieszania różnych faktów, które niekoniecznie są prawdziwe. 

Innym wyzwaniem może być generacja danych do fine tuningu, czyli dostrojenia modelu, dotrenowania go na własnych danych pod swoje własne cele. To jednak wbrew pozorom nie jest takim częstym zabiegiem, bo często osoby, które przychodzą ze zwykłego machine learningu, gdzie trenowało się modele, myślą, że w każdej aplikacji również będziemy dotrenowywać model. W praktyce okazuje się, że wcale tak nie jest i nie trzeba tego tak często robić, bo jest to jednak proces dosyć długi i kosztowny, a nie zawsze konieczny. Generacja danych może być pewnym wyzwaniem w przypadku, gdy musimy jednak dotrenować model. Do generowania danych treningowych do słabszego modelu można użyć modelu lepszego, np. GPT-4 i to często świetnie się sprawdza.

Twoja lista dość mocno się rozbudowała. Nie wiem, czy część słuchających nie zniechęciła się wyzwaniami, ale tak jak wspomniałeś, osoby, które bardzo lubią uczyć się nowych rzeczy, pracować, rozwijać się, na pewno mają co robić.

Wyzwania idą w parze z możliwościami. 

Tak jest.

 

To może zapytam teraz o sprzęt. Czy zwykły sprzęt jest w ogóle w stanie uruchomić takie codzienne programy? Jak sam wspomniałeś, koszty kosztami, serwery itp. – czy taki normalny sprzęt, który mamy w domu, wystarczy, żeby coś podziałać w AI?

W 90% mojej pracy korzystam z modelu GPT-4 czy ostatnio GPT-4 Turbo, który wyszedł od OpenAI, i może faktycznie nie jest to dobre, bo jest to pewne uzależnienie się od jednego dostawcy. Jednak właśnie OpenAI jest na razie liderem rynku nie tylko dlatego, że jego model językowy jest na razie najmądrzejszy, ale też dlatego, że korzystanie z tego modelu jest wyjątkowo łatwe. Po prostu wysyłamy jednego requesta i za chwilę dostajemy odpowiedź, to wszystko. Aby z tego korzystać, nie potrzebujemy żadnego poważnego sprzętu, po prostu wysyłamy requesty.

Tak samo można tutaj wspomnieć o firmie Anthropic (która nie jest jeszcze dostępna w Europie, ale za chwilę podobno ma być dostępna) i ich modelu Claude 2, który jest trochę mniej mądry niż GPT-4, ale jest też o wiele tańszy. Korzystanie z niego powinno być tak samo łatwe.

Alternatywą dla modeli dostępnych przez API są modele open source i jest to niezwykle ciekawa gałąź, bardzo dynamicznie się rozwijająca. Są to modele do ściągnięcia na naszą lokalną maszynę. Ta gałąź non stop się rozwija, niemal codziennie powstają jakieś nowe, coraz to lepsze modele i coraz to bardziej inteligentne. Często też są coraz to bardziej efektywne. Możemy zauważyć, że model, który wyszedł dzisiaj, jest o wiele mądrzejszy od modelu o tej samej wielkości, który wyszedł na przykład 3 miesiące temu. Jako przykład możemy podać Zephyr, który ostatnio testowałem. To malutki model posiadający 7 miliardów parametrów, działający na moim Raspberry Pi. Był on o wiele mądrzejszy niż LlamaCPP (również 7B), który stosowałem parę miesięcy temu.

Modele open source mają wiele swoich zalet, takich jak działanie offline, brak kontroli ze strony OpenAI, brak możliwości dostania bana i pełna kontrola nad danymi oraz prywatność. Niestety problemy pojawią się po ściągnięciu tego modelu, bo żeby uruchomić te większe modele na własnym sprzęcie, potrzebujemy potężnych kart graficznych o kilkudziesięciu gigabajtach RAM-u. Aby kupić takie karty graficzne, potrzebujemy kilkudziesięciu tysięcy złotych, a nie każdego na to stać.

Ewentualnie niektórzy używają sprzętu od Apple’a, który działa w taki sposób, że ich Apple’owy RAM jest współdzielony z RAM-em graficznym. Za kilka czy kilkanaście tysięcy możemy kupić laptopa, który posiada 64 czy nawet 96 gigabajtów RAM-u, który będzie też przy okazji RAM-em graficznym. W tym przypadku okazuje się, że Apple będzie najtańszym rozwiązaniem, z tym że nie wiem, jak ten RAM w małym komputerku ma się do takiego normalnego potężnego RAM-u z trzema wiatrakami. Nie jestem ekspertem w tej dziedzinie. 

Tak więc możemy próbować uruchomić te modele u siebie albo ewentualnie wynająć karty graficzne na godziny, gdzieś w chmurze, w takich serwisach jak na przykład together.ai czy banana.dev. Tyle tylko, że znowu, te godziny kosztują, zazwyczaj jest to kilka dolarów za godzinę. Niezależnie od tego, czy ten model jest aktywnie wykorzystywany, czy po prostu stoi, płacimy za każdą godzinę. Jeśli chcemy postawić ten model na kilka dni albo tygodni, to trochę za to zapłacimy. Coś za coś.

Oczywiście są też mniejsze modele o wymiarach 7 czy 13 miliardów parametrów, które da się puścić na swoim laptopie, albo nawet – w przypadku tych mniejszych – na Raspberry Pi. Tutaj polecam program LM Studio, z którego te modele możemy pobrać i odpalić, albo ewentualnie program Ollama. Ten ostatni, przynajmniej na razie, dostępny jest tylko na Maca i na Linuxa. Chociaż nie widzę, przynajmniej w tej chwili, naprawdę konkretnego, praktycznego zastosowania dla tych najmniejszych modeli jak np. 7B. Ich odpowiedzi są wciąż dosyć losowe, mimo że są coraz lepsze. Trzymam jednak kciuki i myślę, że niedługo te modele faktycznie będą umieć dużo więcej. 

Są też strony, które pozwalają nam porozmawiać z modelami open source w postaci czatu. Tutaj nie możemy się już podpiąć do nich programistycznie, ale możemy przynajmniej zobaczyć, na czym te modele polegają i co potrafią nam zwrócić. Możemy się też nimi trochę pobawić. Tutaj mogę polecić takie strony jak np. huggingface.co/chat albo gpt.h2o.ai. Znajdują się tam te najmocniejsze modele open source jak chociażby Llama 70 miliardów parametrów. 

Podsumowując, na początek wystarczy nam tylko OpenAI API. Polecam wejść na Playground OpenAI. Pewnie niedługo dostępny będzie Anthropic, a w przypadku wystawienia własnych LLM-ów: banana.dev i together.ai. W przypadku korzystania z własnego sprzętu możemy korzystać z LM Studio albo Ollama. I w przypadku chęci testowania tych lepszych modeli open source: huggingface.co/chat.

Czyli w zasadzie byłeś w stanie uruchomić ten najmniejszy model na Raspberry Pi? 

Tak, jak najbardziej. Model 7B, Zephyr, uruchomiłem na Raspberry Pi. I faktycznie może generuje on jeszcze dosyć losowe odpowiedzi, ale na pewno widzę ogromną poprawę w porównaniu do LlamaCPP 7B, którą uruchamiałam parę miesięcy temu, również na Raspberry Pi, która generowała akurat dosyć losowy szum na wyjściu. Zephyr faktycznie generuje konkretne odpowiedzi. Oba modele jak najbardziej da się uruchomić na Raspberry Pi.

 

Widzimy ogromne możliwości, więc myślę, że sporo jest osób zainteresowanych tematem. Jak zacząć przygodę z AI? Siadamy do komputera i co możemy uruchomić, by jak najszybciej zobaczyć efekty naszej pracy?

Zacząłbym od Open AI Playground. Jest to taki ChatGPT dla programistów, bezpośrednia nakładka na OpenAI API. Model odpowiada nam tak samo, jak gdybyśmy wysłali te dane przez API. Odróżnia go to od ChatGPT, gdzie mamy dodatkowe filtry i odpowiedź jest dość mocno moderowana. W Playgroundzie możemy porozmawiać sobie z takimi modalemi jak: GPT-4, GPT-3.5, GPT-4 Turbo.

Po ostatnich aktualizacjach możemy spróbować też stworzyć swoją własną bazę wiedzy, własne funkcje, które nasz model będzie wywoływał. Na przykład możemy stworzyć funkcję sprawdzenia pogody. Kiedy model dostaje zapytanie sprawdź pogodę, musi on wywnioskować, że powinien uruchomić funkcję sprawdzania pogody i ta funkcja docelowo np. wchodzi na stronę z pogodą i zwraca nam wynik, podając ile jest dzisiaj stopni.

To może dopytam,: czy są teraz jeszcze jakieś zaproszenia na te lepsze wersje? Kiedyś było tak, że aby korzystać z GPT-4, trzeba było oczekiwać na zaproszenie. Czy teraz wszystko dostępne jest od razu, czy na te lepsze wersje potrzebujemy zaproszenia?

Nie, teraz dostanie się do czwórki jest dziecinnie proste, kosztuje około jednego dolara. Pamiętam jednak, że kiedyś sam czekałem w kolejce. Zapisałem się w pierwszy możliwy dzień lub jeden z pierwszych dni i czekałem może nawet miesiąc. 

Wracając do tematu Open AI Playground – możemy załadować tam nawet do 20 dokumentów w różnych formatach, w tym w PDF-ach. Nie znaczy to jednak, że jeśli załadujemy 20 dokumentów, ten system nadal będzie skuteczny. 

Następnie, jak już pobawimy się z Playgroundem, zobaczymy co potrafią te modele, warto spróbować napisać jakąś własną prostą aplikację. I tutaj możemy napisać ją na requestach do OpenAI i na piechotę w Pythonie czy w JavaScripcie, łącząc zewnętrzne narzędzia, jeśli dobrze umiemy te języki. Na razie, na sam start nie polecam LangChaina. 

Ewentualnie możemy skorzystać z platform no-code, jak chociażby Make.com, i stworzyć tutaj prosty projekt, chociażby coś takiego, jak ostatnio stworzyłem: aplikację, która w sposób głosowy dodaje moje zadanie do listy zadań. Polega to na tym, że dyktuję komunikatorowi w telefonie zadanie, które ma zostać dodane. Ta aplikacja została stworzona w Make’u i składa się z kilku prostych bloków. Blok komunikatora, czyli w tym przypadku Slacka, pobiera plik dźwiękowy wysłany na niego. Za pomocą modelu Whisper przetwarza dźwięk na tekst. Następnie poprzez GPT-4 przetwarza tekst nieustrukturyzowany na dane ustrukturyzowane w postaci JSON-a z takimi polami jak: nazwa zadania, jego opis, jego docelowy czas wykonania. JSON trafia już na integrację z Todoistem, który dodaje nasze zadanie. Do tego można też dodać na przykład potwierdzanie głosowe, czyli przerabianie tekstu z powrotem na dźwięk za pomocą chociażby integracji z ElevenLabs, która powie nam, że zadanie o takiej i takiej nazwie zostało dodane. Później wysyłam dźwięk z powrotem na komunikator.

Make.com to jest ciekawy kierunek. Znam wielu ludzi, którzy aktywnie go używają. Wiele osób chwali go, że oszczędza czas. Nawet umiejąc programować, możemy na poważnie używać go w życiu codziennym do pisania swoich aplikacji. Ja też z niego korzystam. Może nie jestem aż tak bardzo optymistycznie nastawiony jak wiele innych osób, bo jednak to prawda, że narzędzie oszczędza czas, ale uważam, że nie oszczędza go aż tak bardzo, jak bym chciał. Często trzeba siedzieć nad jakimiś głupotami i zastanawiać się, czemu jakaś integracja, która miała działać na jedno kliknięcie, nie działa i siedzisz nad tym 3 godziny.

Pamiętajmy też, że kiedy piszemy kod, to co prawda poświęcimy nie 3 godziny, tylko 5 godzin, ale te 5 godzin poświęcimy faktycznie na naukę programowania. Nauczymy się czegoś, co w przyszłości przełoży się na nasze doświadczenie, a w przypadku tych 3 godzin poświęconych na Make, nie wiemy, czy będzie to nam jakkolwiek potrzebne. Jeśli faktycznie chcemy korzystać z Make’a na poważnie, to tak, ale nie wydaje mi się, żeby to była aż tak istotna oszczędność jak w przypadku pisania kodu. Chociaż tutaj na obronę Make’a można powiedzieć, że jego największą zaletą jest to, że domyślnie stoi on w chmurze, więc nie musimy stawiać własnych serwerów, co może być problemem w przypadku własnych programów.

Pewnie, tak jak powiedziałeś, dużo łatwiej zacząć, jeżeli uczymy się programowania, wtedy całkiem inaczej trzeba liczyć te godziny.

 

Chciałbym zapytać teraz o materiały do nauki, które polecasz. Zainteresowaliśmy się tematem, znamy podstawowe narzędzia – skąd czerpać wiedzę? Czy polecisz jakieś kursy, a może jedynie czytanie dokumentacji?

Jest kilka fajnych źródeł. Na pewno wszystkich tutaj nie wymienię, ale jest tego całkiem sporo. Na pewno mogę polecić kurs AI Devs. Jest to niesamowite źródło inspiracji, wiedzy i to nie takiej stricte teoretycznej, ale też typowo praktycznej, wynikającej z doświadczenia autorów. Dzięki temu możemy przejść naszą ścieżkę wręcz od zera. Mogę go polecić osobom zarówno początkującym, jak i tym bardziej zaawansowanym. Najfajniejszą rzeczą w tym wszystkim jest to, że poznajemy ciekawych ludzi z branży, czego nie możemy doświadczyć, siedząc przed komputerem i ucząc się samemu, co i tak jest sporą częścią naszego życia. Nie wiadomo jeszcze, czy odbędzie się kolejna edycja tego kursu, sami autorzy na razie jeszcze tego nie wiedzą. Jeśli tak, to bardzo polecam. 

Ciekawymi stronami do nauki są też: learnprompting.org albo promptingguide.ai. Są to strony, na których można złapać solidne fundamenty dotyczące promptowania LLM-ów, ale nie tylko. Korzystając z tych stron, uczymy się nie tylko promptowania, co jest bardzo istotne, ale również sposobów korzystania z tychże narzędzi. 

Następnie polecam materiały edukacyjne Pinecone’a, czyli wektorowego silnika wyszukiwania. Samo korzystanie z niego jest dosyć kosztowne, ale również go polecam, choć można znaleźć tańsze alternatywy. Natomiast bardzo polecam ich Learning Center, bloga, świetny newsletter z fantastycznymi artykułami. Wielu rzeczy się od nich nauczyłem. 

Jest też kanał na YouTube Jamesa Briggsa – to też jest gość od Pinecone’a, który pokazuje różne narzędzia, integracje, przedstawia, jak dodawać różne narzędzia np. do LLM-ów. 

Zapraszam też na swojego LinkedIna i YouTube’a. Na LinkedInie często opisuję moje własne przemyślenia, porady wynikające z doświadczenia. W internecie łatwiej o teorię, a ciężko znaleźć rzeczy praktyczne.

 

To w takim razie za nami dawka wiedzy, przerobiliśmy sobie rzeczy, które zaproponowałeś. To co dalej? Jakie projekty powinny trafić do naszego portfolio? Wspomniałeś o liście „To do”, ale myślę, że jest to projekt bardziej na rozgrzewkę, a coś konkretniejszego? Czy możesz podać jakieś ciekawe przykłady?

Tak, jak najbardziej. Oczywiście tutaj uważam, że trzeba się uczyć poprzez praktykę i robić rzeczy, które nas faktycznie interesują. Uważam, że jak już znamy te postawy i wiemy, co LLM-y potrafią zrobić, warto zastanowić się, co właściwie chcielibyśmy zrobić, w jaki sposób aplikacja mogłaby nas wspomóc w życiu. 

Wiele osób tworzy tzw. personalnych asystentów, czyli aplikacje posiadające wiedzę na nasz temat i pomagające nam w podejmowaniu różnych decyzji, czyli np. tworzymy takiego personalnego asystenta, który będzie np. dodawał zadanie głosowe do kalendarza, będzie przypominał, pomagał nam pisać treści, będzie miał wiedzę na nasz temat czy na temat naszej firmy, może np. filtrować rzeczy, które dostajemy. Na przykład załóżmy, że jesteśmy zapisani na kilka newsletterów, na kilka kanałów na YouTubie i asystent ten może nam je wszystkie zgarniać, analizować na bieżąco i filtrować wartościowe dla nas treści i odrzucać te mniej wartościowe. 

Jeśli o mnie pytasz, to ja akurat nie miałem żadnych problemów z wymyśleniem tego, co będę robił jako swój pierwszy projekt. Otóż od wielu lat miałem marzenie, o którym myślałem, że jest nie do zrealizowania, jednak kiedy zapoznałem się z możliwościami LLM-ów i narzędzi dookoła tych LLM-ów, stwierdziłem, że to jest coś, co jestem jednak w stanie zrobić. I teraz jest to projekt, nad którym pracuję już pół roku i wchodzi on właśnie w fazę open source. Widzę, że może on pomóc innym ludziom, którzy będą mogli z tego również korzystać.

Mianowicie chodzi o to, że kilka lat temu, kiedy byłem młody i głupi, korzystałem z różnych aplikacji randkowych. I pamiętam, że było to niezwykle ciężkie, niewdzięczne, czasochłonne i szkodliwe dla psychiki przez dosyć toksyczne środowisko, w którym trzeba się obracać. Nie są to tylko moje spostrzeżenia, a są to rzeczy potwierdzone badaniami naukowymi. Zawsze marzyłem o takim właśnie asystencie, który wchodziłby za mnie na te wszystkie tindery i pisałby tam za mnie tak, abym w ogóle nie musiał tam wchodzić, a gdybym chciał, to przychodziłbym tylko na spotkania – piękna wizja.

W taki sposób powstał projekt Tinder GPT, który pisze wiadomości, analizuje profil sparowanej dziewczyny, na podstawie jej opisu wysyła dopasowaną pierwszą wiadomość. Następnie z nią konwersuje, buduje więź, używając zasad z własnej bazy wiedzy, które tłumaczą, w jaki sposób ma tę więź budować, w jaki sposób ma się atrakcyjnie prezentować i budować ciekawe historie dopasowane do kontekstu rozmowy. Po zbudowaniu takiej więzi próbuje się umówić, bierze kontakt i jeśli mu się to uda, wysyła powiadomienia na telefon z kontaktem.

I w tym momencie wszystkie kobiety nas znienawidziły. A panowie od razu szukają źródeł na GitHubie, pobierają i uruchamiają.

Dokładnie.

I w ten sposób branża AI developmentu się rozwinęła.

Otóż to. W każdym razie w wyniku takiego projektu wszyscy oszczędzą czas na tinderach, albo Tinder przestanie istnieć. W obu tych przypadkach będę szczęśliwy.

To od razu może zapytam: czy jesteś w stanie podać nam statystyki? Ile razy udało Ci się umówić na spotkanie?

Kilka razy, zresztą nagrałem nawet filmik na temat działania tej aplikacji. Aplikacja wzięła chyba ok. 5 kontaktów. Inną kwestią jest to, czy się z nimi umówiłem, czy nie, ale aplikacja spełniła swoją funkcję. 

To jeszcze dodam tylko tyle, że jeżeli w tym momencie statystyki tego filmu spadną, to oznacza, że wszyscy poszli pobierać twoją aplikację.

Prawdopodobnie tak. To może być ciekawy projekt na początek – jest już na etapie open source i zachęcam bardzo do modyfikowania go. Aby to zrobić, pewnie trzeba mieć już trochę wiedzy, mieć za sobą 2-3 miesiące nauki. W tej aplikacji jest naprawdę wiele ciekawych rzeczy do usprawnienia, dużo promptów do napisania, tak aby aplikacja porozumiewała się w sposób jeszcze bardziej podobny do człowieka. Jest tu też wiele bajerów do dodania. Chociażby pierwsza rzecz, która przychodzi mi do głowy – można dodać do niej GPT-4 Vision, który będzie analizował zdjęcie, i tekst powitalny nie będzie budowany tylko na podstawie opisu, ale również zdjęcia, będzie komentował to zdjęcie.

Tutaj dopytam o jedną rzecz: czy moglibyśmy stworzyć bazy danych na takiej zasadzie, że my jako użytkownicy musimy najpierw wykonać 100 połączeń, żeby program wiedział, kto nam się podoba, i żeby na tej podstawie wybierał kolejne osoby (żeby nie powiedzieć „ofiary”), które będą się z nami umawiać?

Nie no, bez przesady. W tym przypadku wszyscy są raczej zadowoleni, dziewczyny też, bo dostają takie fantastyczne teksty, których w życiu bym nie napisał. Zadaniem tego programu nie jest wybieranie osób, z którymi miałby on później pisać, dlatego nie implementowałem w nim funkcji klikania, mimo że to byłaby najprostsza rzecz do zrobienia. Tę część zostawiam dla siebie.

Zadaniem programu jest pisanie z osobami wybranymi przeze mnie i docelowo umówienie się z nimi. Zresztą jest to bardzo ciekawe i pozwolę sobie na dygresję – uwodzenie i sprzedaż są do siebie niezwykle podobne pod względem technik, narzędzi, takich pojęć jak np. lejki marketingowe i inne. Jeśli w przyszłości będziemy chcieli zbudować bota, który ma być sprzedawcą w naszej firmie, myślę, że praca na programie podobnym do Tinder GPT jest jak najbardziej cennym doświadczeniem, które może się przydać do budowania robota sprzedawcy, niemalże jeden do jednego.

Ciekawy projekt i ciekawe, co z tego wyjdzie i ile osób będzie z niego korzystać.

 

A ja chciałbym zapytać o trochę inną rzecz – bo mówimy o rozwoju, o nauce, o projekcie, więc czas na pytanie: jakie błędy na etapie nauki i przygotowań do poszukiwania pracy najczęściej popełniają osoby, które ubiegają się właśnie o stanowisko AI developera?

Czy można tu popełnić jakieś błędy na etapie nauki? Szczerze mówiąc, ciężko mi sobie wyobrazić jakieś błędy. Uważam, że trzeba jak najwięcej się uczyć, poświęcić na to jak najwięcej godzin, a każda poświęcona godzina będzie jedną z tych dziesięciu tysięcy godzin niezbędnych do tego, by zostać mistrzem w dziedzinie. Po prostu: nauka, nauka i jeszcze raz nauka. 

Jeśli chodzi o moją drogę, to uważam, że faktycznie popełniłem jeden błąd na etapie nauki. Nie wiem, czy to akurat grozi naszym słuchaczom, czy nie, ale opowiem. Otóż kiedy stworzyłem wstępną wersję Tinder GPT, oczywiście chciałem pochwalić się tym, tak aby potencjalni pracodawcy widzieli moje realne postępy. Stwierdziłem, że trzeba nagrać o tym film. No i wszystko pięknie, tylko że nikt się nie spodziewał, że nagrywanie i edycja tego filmiku w sposób perfekcyjny, do tego po angielsku, zajmie mi 3 miesiące. Poświęciłem więc mnóstwo czasu na robienie filmu, a można było ten czas poświęcić na uczenie się modeli językowych. Nagrywanie filmu trwało dłużej niż tworzenie aplikacji pod ten filmik.

Może podsumujmy to tak, że lepiej, aby coś było zrobione, niż było perfekcyjnie zrobione. 

Ogólnie zgadzam się, choć nie wiem, czy w przypadku filmików na YouTubie to tak działa, to jest inna kwestia, ale to, co powiedziałeś, to prawda na początku programowania. Warto robić jak najwięcej, żeby to jakoś działało, ale może niekoniecznie perfekcyjnie. 

Kolejna rzecz, którą mogę tutaj podpowiedzieć, jest dbanie o swoje media społecznościowe: o LinkedIna, Twittera, aczkolwiek osobiście nie działałem jeszcze nigdy na Twitterze. Odkryciem roku jest dla mnie to, że warto raz na jakiś czas dodać post na LinkedInie, bo wtedy zaczyna się do nas odzywać dużo więcej osób z ofertami pracy czy nawet ofert współpracy, próśb o konsultacje, czy jakichś innych zapytań od bardziej technicznych rekruterów, którzy lepiej rozumieją branżę. 

I może powiedzmy też, żeby nie bać się, że dopiero zaczynamy i ktoś może nas wyśmiać, albo że nic z tego nie będzie. Trzeba próbować i pokazać, że po prostu się uczymy. Każdy wie, że jak człowiek się uczy, to nie znaczy, że od razu wszystko wie.

Zgadzam się – możemy tworzyć te rzeczy nawet dla siebie, nawet jeśli nikt nie zaoferuje nam pracy na samym początku, to stworzymy coś, co przyda nam się w przyszłości. Najważniejsze jest to, aby wybrać coś, co faktycznie nam się przyda. A jeśli mamy jeszcze możliwość opowiedzieć o tym, co zrobiliśmy, to super, jak najbardziej na plus.

 

To w takim razie nauczyliśmy się, coś podziałaliśmy z projektami, czas na szukanie pracy. Czy jesteś w stanie nam coś więcej powiedzieć, jak wygląda rynek pracy programistów AI? Czy zauważasz wzrost zapotrzebowania w tej dziedzinie? 

Szczerze mówiąc, nie jestem ekspertem od rynku pracy i ciężko mi na to pytanie sensownie odpowiedzieć. Osobiście zauważam, że ostatnio dużo częściej odzywają się do mnie ludzie z propozycjami pracy, współpracy, konsultacji itp. Aczkolwiek myślę, że wynika to głównie z tego, że zacząłem prowadzić profil na LinkedInie i jestem pewnie wyżej pozycjonowany. Aczkolwiek rozmawiając z osobami z branży, wydaje się, że rynek pracy w AI nie jest jeszcze nasycony. Branża jest coraz lepiej rozumiana, oferty są coraz trafniejsze, a rekruterzy coraz lepiej rozumieją, o co tu chodzi. Branża nie jest jeszcze nasycona, ale powoli jest też coraz więcej specjalistów.

 

A czy według Ciebie ten zawód ma przyszłość? A może wkrótce zapotrzebowanie na niego zgaśnie, ponieważ będą jakieś ograniczenia związane z regulacją praw autorskich albo trudnościami z pozyskaniem danych do trenowania?

Gdyby ten zawód nie miał przed sobą wielkiej i wspaniałej przyszłości, to nie zajmowałbym się nim w ogóle. Tak jak powiedziałem: jedną z najfajniejszych rzeczy jest to, że jesteśmy pionierami w tej dziedzinie nauki i tworzymy coś nowego. 

Czy zagrażają nam jakieś regulacje prawne? Regulacje potrafią coś ograniczyć, ale nie wydaje mi się, by całkowicie zmiotły z planszy ten zawód. 

Jeśli chodzi o trudności z pozyskaniem danych do trenowania, to owszem, niektórzy uważają, że jest takie zagrożenie i niebawem cała treść w internecie będzie generowana przez AI, i to AI już nie będzie miało się na czym uczyć, bo bez sensu uczyć się na swoich własnych danych. Nie jest to do końca prawda, bo obecnie trenowanie AI nie pójdzie w stronę pobierania wszystkich danych z internetu, tak jak kiedyś, ale raczej pójdziemy w kierunku dobierania danych jakościowych, ponieważ wtedy model, przy tym samym rozmiarze, jest dużo lepszy i wydajniejszy. Pójdziemy raczej w lepsze tworzenie do setów, lepsze generowanie za pomocą mądrych modeli albo w inny sposób. Dlatego o to też nie ma się co bać. 

Jedynym, w miarę realnym zagrożeniem jest polityka OpenAI polegająca na byciu bliżej ludzi. Widać, że ta firma chce stworzyć narzędzia pozwalające każdemu Kowalskiemu być AI developerem, tworzyć AI na własne potrzeby i można tutaj teoretycznie się bać, że Open AI zaraz stworzy coś, co sprawi, że przestaniemy być w ogóle potrzebni, bo wszyscy będą umieli już to zrobić. Na razie nam to nie grozi i mogę tutaj podać przykład RAG-ów. Bardzo łatwo jest stworzyć takiego najprostszego RAG-a, postawić bazę wektorową, dodać swoje dokumenty, zindeksować je i wyszukiwać, ale jest niezwykle trudno zrobić to w sposób dobry, tak aby wyszukiwało nam zawsze to, co chcemy i nie generowało niepotrzebnych informacji ani nie dodawało szumu do naszej odpowiedzi, nie robiło halucynacji. Jest z tym naprawdę dużo pracy i OpenAI, przynajmniej na razie, nie będzie w stanie zrobić takiego RAG-a dla wszystkiego.

Co nie zmienia faktu, że kto wie, być może za rok, dwa, trzy, faktycznie coś takiego się uda. Ta branża tak szybko się zmienia, że ciężko to przewidzieć. Nawet gdyby tak było, to i tak sądzę, że zawsze będzie coś do roboty. Jak nie te rzeczy, to coś jeszcze bardziej skomplikowanego i zaawansowanego. Tak czy siak, warto się uczyć i jeśli nawet nie będziemy robić tego, czego się teraz uczymy, to i tak będziemy mieli pewne zrozumienie, pewną bazę, na podstawie której będziemy dalej budować. 

 

OK, no to w takim razie tak już na koniec: jaką książkę polecisz osobie, która chce zostać AI developerem? Co na początek polecasz?

Z racji tego, że branża jest niezwykle świeża, nie powstało tutaj dużo książek w tej tematyce. Ja przynajmniej ich nie znam. Właściwie słyszałem tylko o jednej książce w tej branży: Codzienność z GPT-4 Adama Gospodarczyka i Jakuba Mrugalskiego. Wiele osób uważa, że jest świetna, ale sam osobiście jej nie czytałem, więc ciężko mi jakkolwiek się do niej odnieść.

OK, no dobrze, to będziemy musieli przetestować na własnej skórze.

 

Kończąc, powiedz, gdzie możemy Cię znaleźć w sieci. Jeżeli ktoś chciałby Cię o coś zapytać, gdzie ma Cię szukać?

Tak, jak najbardziej jestem na LinkedInie i zapraszam na mój profil: Grigorij Dudnik. Dodaję tam posty wynikające z mojego praktycznego doświadczenia. Mam też kanał na YouTubie: Greg’s Tech. Tam postuję trochę rzadziej, ale mam parę filmów o AI. Tak że zapraszam.

To zapraszam wszystkich do kontaktu, a ja bardzo Ci dziękuję, Grigorij, za tę rozmowę i podzielenie się z nami swoimi doświadczeniami.

Dziękuję jeszcze raz za zaproszenie na tę rozmowę i życzę naszym słuchaczom fantastycznej ścieżki kariery w AI developmencie.

Dołączam się do tych życzeń. Na razie, dzięki, cześć.

Dzięki.

Polecana książka

Słuchaj także na:

Udostępnij ten artykuł:

Polecana książka

Mentoring to efektywna nauka pod okiem doświadczonej osoby, która:

  • przekazuje Ci swoją wiedzę i nadzoruje Twoje postępy w zdobywaniu umiejętności,
  • uczy Cię dobrych praktyk i wyłapuje złe nawyki,
  • wspiera Twój rozwój i zwiększa zaangażowanie w naukę.

Mam coś dla Ciebie!

W każdy piątek rozsyłam motywujący do nauki programowania newsletter!

Dodatkowo od razu otrzymasz ode mnie e-book o wartości 39 zł. To ponad 40 stron konkretów o nauce programowania i pracy w IT.

PS Zazwyczaj wysyłam 1-2 wiadomości na tydzień. Nikomu nie będę udostępniał Twojego adresu e-mail.