Uruchom Bielik v3.0 na Google Colab bez żadnych kosztów
Wczoraj na kanale StorageFreak zaprezentowano nowe modele Bielika w wersji trzeciej, w dwóch rozmiarach – 1,5 miliarda i 4,5 miliarda parametrów. Te niewielkie modele mają małe wymagania sprzętowe, co sprawia, że są znakomitym wyborem dla wielu użytkowników. Autor filmu pokazał krok po kroku, jak uruchomić model 4,5 miliarda parametrów na Google Colab, co uczyniło jego dostępność jeszcze łatwiejszą. Dziennikarz podkreśla, że wszystkie potrzebne linki i instrukcje znajdą się w opisie filmu, co ułatwi widzom śledzenie postów.
Toggle timeline summary
-
Wprowadzenie modeli Bielik V3 z 1,5 miliarda i 4,5 miliarda parametrów.
-
Dyskusja na temat małego rozmiaru modeli, co pozwala na niskie wymagania sprzętowe.
-
Opublikowanie Bielik V3 na Hugging Face.
-
Przewodnik po uruchamianiu modelu za darmo na Google Colab.
-
Przejście do kroków praktycznych.
-
Notatniki dostępne w opisie wideo.
-
Wprowadzenie do dostępu i korzystania z notatnika GitHub.
-
Wymóg zalogowania się do Google Colab.
-
Wybór GPU runtime i niezbędnych ustawień.
-
Połączenie z maszyną wirtualną w celu wykonania kodu.
-
Importowanie wymaganych bibliotek do Colab.
-
Weryfikacja dostępu do GPU w celu uruchomienia modelu.
-
Wprowadzenie do modelu z 4,5 miliarda parametrów Bielik.
-
Konieczność posiadania konta Hugging Face do korzystania z modelu.
-
Instrukcje dotyczące generowania i zapisywania tokena dostępu.
-
Jak wykorzystać wygenerowany token w Colab.
-
Nawigacja do sekcji Warunki Użytkowania modelu.
-
Pobieranie modelu po ukończeniu wymagań konfiguracyjnych.
-
Pobieranie plików modelu.
-
Potwierdzenie pobranego modelu w środowisku wirtualnym.
-
Wysyłanie zapytania do modelu i otrzymywanie odpowiedzi.
-
Przykład modelu generującego prosty przepis.
-
Zachęta do eksperymentowania z modelem.
-
Szczegóły dotyczące dodatkowych funkcji do interakcji z użytkownikiem.
-
Udoskonalenia w użyteczności i strukturze kodu.
-
Tworzenie prostej struktury czatu do interakcji z modelem.
-
Kontynuacja rozwoju interaktywnego chatbota.
-
Zajmowanie się potencjalnymi błędami i ich obsługą.
-
Podsumowanie i plany na przyszłość w celu udoskonalenia modelu.
Transcription
Wczoraj pojawił się Bielik w wersji trzeciej, a w dwóch wielkościach 1,5 miliarda parametrów i 4,5 miliarda parametrów. Są to modele bardzo, bardzo małe, przez co można je uruchomić na dosyć niewielkich wymaganiach sprzętowych. Na Hugging Face, na profilu SpeakLash Bielik V3 także już jest opublikowany. I w tym wideo chciałbym Ci pokazać, jak możesz uruchomić ten model za darmo na Google Collab, czyli nie na swoim faceturze, tylko przez Collaba w ciągu kilku minut. No OK, przejdźmy do rzeczy. Wszystkie linki wrzucę w opis tego filmu. Przygotowałem notebook collabowy na swoim reprezentatorium. Znowu link będzie w opisie. Notebook ten jest na GitHubie, dostaniesz się tutaj bez żadnego zalogowania się. Z takim dosyć fajnym linkiem, opening collab, jak to klikniemy, to przeniesie nas do Collaba. Oczywiście musisz być zalogowany do Collaba. To jest konto Google'owe, może być np. Gmail'owe konto, zupełnie darmowe, ale jednak konto musi być. I pierwsza rzecz, na którą musimy zwrócić uwagę, to musimy wybrać sobie runtime ze spadkiem GPU. On powinien być tutaj domyślnie już wybrany, ale w razie W w zakładce Runtime, góry gdzieś jest Change Runtime Type i upewnij się, że masz C4 GPU. To też jest darmowe, oczywiście z jakimś tam limitem czasowym per 26 godziny, ale na jakiś czas, żeby się troszkę pobawić z tym modelem, spokojnie, spokojnie wystarczy. No OK, tutaj też dodałem instrukcję co i jak i przejdźmy do instalacji bibliotek. Za pierwszym razem, jak uruchamiamy pierwszą komendę, to po pierwsze on się łączy, tu widać po prawej góry oraz na dole do tej maszyny wirtualnej, na której ten nasz cały kod będzie wykonywany. No i następuje instalacja, ona sekundkę potrwa, więc troszkę ten moment przyspieszył. OK, biblioteki mamy zainstalowane, zajęło to około minuty, możemy pójść dalej. Importujemy je, to powinno już zająć nam chwilkę. W porządku, zainportowane. No i następny blok sprawdza, czy mamy dostępność GPU, czyli się upewniamy, czy faktycznie tutaj ta czas czwórka jest dostępna. Urządzenie używa CUDA, więc jest CUDA, przepraszam, więc jest OK. Jeżeli by wyszło CPU, no to upewnijcie się proszę, czy macie wybrany odpowiedni collab. Przepraszam, pewnie runtime. No i teraz wymagane działania, aby poprowadzić model. Na dzisiaj chciałbym wam przedstawić Bialik 4.5 Billions, czyli 4.5 miliarda parametrów w wersji trzeciej Instruct. I do tego potrzebujemy kilka rzeczy. Potrzebujesz mieć konto na Hacking Face, ponieważ będzie trzeba zaakceptować jakby Regulamin i TensorFlow dla tego modelu, więc ja tu już jestem zalogowany. Konto założysz oczywiście za darmo. Potrzebujesz wygenerować token i tutaj dałem takiego bezpośredniego linka, ja go może otworzę u siebie. Tutaj możesz stworzyć, oczywiście będąc już zalogowanym, prawda, możesz stworzyć nowy token. Wystarczy read token, temu nazwę i token ci się wytworzy. Ja taki token już mam, tak jak widzisz, stworzyłem go 12 godzin temu. I teraz ten token możesz albo sobie gdzieś tam zapisać i użyć go później bezpośrednio, ale fajną opcją w collabie jest dodanie tutaj sekretu. Ja sobie dodałem taki sekret, on się nazywa HF token i tutaj jest wartość tego tokenu, prawda. I potem jeżeli chcemy ten token wykorzystać, w sensie ten sekret wykorzystać, to wystarczy go włączać i on będzie dostępny dla tego collaba, w sensie dla tego notebooka konkretnego. Co dalej? Dalej potrzebujemy, tutaj piszą o tym tokenie w sekretach, co jest opcją, ale nie jest koniecznością. My musimy oddać się na stronę modelu i zaakceptować ten co wirus. Oczywiście warto je przeczytać. Więc jak ja tutaj sobie wejdę w tę zakładkę, to ja już ten co wirus dla tego modelu zaakceptowałem, więc tego nie widać. Ale wejdźmy na jakiś inny model, którego nie zaakceptowałem, żebyście zobaczyli jak to wygląda. Czyli przykładowo, może to już sobie zamknął, to jest górna strona spichlerza. Tu mamy biedlik V3, cały FAMILY i wejdźmy sobie na przykład na ten V3. I to wygląda mniej więcej tak. Tutaj ta informacja podaje. Agree to szerzy o kontach informacji do akcyzyst modelu, czyli tutaj musisz kliknąć Agree. No i oczywiście to jest ten co wirus, który przerzuca na stronę biedlika, z którym warto też się zaznajomić. OK. I teraz jak już te akcje są spełnione, czyli mamy konto, mamy token, zaakceptowaliśmy ten model. No to jesteśmy w stanie taki model sobie pobrać. Czyli najpierw zgłaszamy się do Hacking Face'a. I zwróćcie uwagę, że tu w tym miejscu wykorzystuje ten UserDataGetHFtoken, to wykorzystuje właśnie ten kurs, co tutaj pobrałem. Jeżeli nie chcesz wykorzystywać tego sekretu, to możesz ten token bezpośrednio sobie wkładać tutaj, prawda? Jak Ci wygodniej. No i następny krok to pobranie modelu i tokenizatora. Może jeszcze uda mi się to przed publikacją poprawić. No i to też chwilkę zajmie, prawda? To zajmie nawet kilka minut, bo tam parę giga danych jest ściąganych. Zacznijmy to wykonywać. Jeżeli tutaj pojawi Ci się kod płąt 403 czy 403, tak? Albo 401, jakiś anantraz, to coś poszło nie tak z tym tokenem, prawda? Upewnij się, że masz odpowiedni model. Upewnij się, że zaakceptowałeś jego ramień i że użyłeś odpowiedni token. I tu jest jeszcze jeden mały haczek. Jak to się wykonuje, pozwólcie, że przeskoczę z powrotem tutaj na jakby stronie informacyjnej. Jak sobie zjedziemy troszkę, troszkę niżej. Tutaj model name jest podany z małym błędem na ten moment, bo on się nie nazywa V3, on się nazywa V3.0, prawda? Czyli zwróćcie uwagę, że on tutaj jest 4,5B, myślnik V3. A on tak naprawdę się w tym momencie nazywa 4,5B, myślnik V3.0. Także jakby kopiując sobie ten model tutaj z tego README, no będzie błąd. Więc myślę, że to jest kwestia poprawy tego w ciągu pewnie jednego dnia. Ale jeżeli byście trafili na ten moment, upewnijcie się, że używacie dobrej nazwy modelu. No okej, tutaj dane się popijają. Znowu przyspieszę troszkę wideo. W porządku, to trwało troszkę dłużej, około czterech minut. Ale model mamy pobrany. On oczywiście pobrany jest na tą maszynę virtualną, prawda? Na ten kompiut kolabowy, nie na nasz komputer. Mam nadzieję, że to jest jakby zrozumiałe. No i możemy wysłać pierwsze zapytanie do Bielika. Tu dodałem taki parametr jakby string, żeby można było w tym miejscu ładnie sobie go edytować. Ale szczerze mówiąc to jest po prostu edycja tej zmiennej prompt, czyli na przykład przepis na lecznicę w dwóch zdaniach. No i spróbujmy sobie to wykonać. Zobaczymy jak nam to ładnie zadziała. I mamy odpowiedź, prawda? I mamy tą odpowiedź już, że przepis na lecznicę w dwóch zdaniach. I dostajemy odpowiedź. Na patelnię zgrzej masło, dodaj posiekaną cebulę i smaż, aż zmięknie. Wijerka, dobra, w solą, pieprzem i mieszaj, aż się zetną. Świetnie. Teraz tu jednej rzeczy przyznam szczerze, troszkę mi brakuje. Jakby na tym etapie już oczywiście możesz sobie dalej eksperymentować po swojemu, prawda? Użyć ten kod, czy już dalej sobie pisać kod, w jaki sposób komunikować się z modelem. Ale chciałem pokazać Ci jeszcze jedną rzecz, bo zgodnie z tutaj dokumentacją, która jest zawarta, a przepraszam to jest zły model, bo dzisiaj pracujemy z Instractem, prawda? Zgodnie z tą dokumentacją, ta odpowiedź sfumatowana apply by chat template, ona jest w tym celu trzymając bardzo, bardzo podobna, ale brakuje mi tej linijki konkretnie. Czyli mamy iemstat, no system nie, no bo nie wysłaliśmy żadnego system instruction, ale mamy user, się kończy, potem brakujemy tej linijki, mamy odpowiedź i się kończy jakby odpowiedź asystenta, prawda? Czyli zwróćcie uwagę, mamy iemuser, iemstart dla usera, potem iemend dla usera, potem brakuje mi iemstart dla asystenta, ale jest iemend dla asystenta. Więc pomyślałem sobie napisać taką funkcję pomocniczą do wyciągania gotowej odpowiedzi. Ona tu, no tak dosyć szeroko opisałem z komentarzami, wysyłasz takie sfumatowane prompt zgodnie z jakby tym założeniem. Czyli jeżeli podajemy system instruction, no to on wygląda tak, jeżeli nie ma system instruction, tylko jest instruction, to on wygląda tak, no i potem jest tokenizacja, output i tak dalej. I teraz to jest funkcja, prawda? Ona tam się nazywa, no to właśnie zapytaj. Czyli możemy tutaj zdefiniować sobie system instruction, ale nie musimy i mamy prompt. Czyli jak ją sobie wykonałem, czyli ta funkcja już istnieje, to teraz mogę ją odpytywać. Czyli na przykład prompt przepis na tych dwóch zdaniach, czyli ten sam prompt, no i będziemy zapytać tego promptu. No i gdy zapytamy, to powinniśmy otrzymać bezpośrednio już odpowiedź. No i mamy tą odpowiedź. Ona tu jest sfumatowana, tak jak widzicie, z znakami nowych linii i tak dalej. Więc pewnie fajnie było jeszcze to dodać do jakiejś zmiennej i ładnie przedstawić. Zresztą możemy to zrobić, nie? Bo to tak naprawdę, on zwraca tą wartość. Czyli możemy sobie zrobić to jako odpowiedź, to jest zapytaj od prompt i wtedy sobie zrobić print odpowiedź. I to powinno już zdecydowanie ładniej wyglądać. Zresztą zaraz sobie zobaczymy, bo teraz ją po prostu ładnie już sfumatowaną powinniśmy dostać na ekranie. No i jest lepiej, nie? Jaśnica ze znakowej linii, mamy dwa korki, prawda? Tutaj jakby te podwójne asteriksy to też jest sfumatowanie z kolei magdałnowe. To pewnie można było jeszcze tam odpowiednio to napisać, żeby ten magdałn też został zaakceptowany, żeby ta jaśnica była pogubiona. No dobrze, ale to już są takie szczegóły jakieś Pythonowe, nie? Ważne, że działa, dalej się można bawić. No i tu sobie pomyślałem, że fajnie byłoby jeszcze napisać taki prosty czat. I on jest taki naprawdę prosty, nie? Na początku zbijamy instrukcję systemową, o ile jakaś jest. Jeżeli nie ma, to dodajemy jakąś domyślną instrukcję systemową, czyli tam wpada krótko i precyzyjnie w wysoko polskim. Tutaj będę przykrywał wszystkie wiadomości, żeby ten nasz chatbot miał, jakby pamiętał kontekst i pamiętał historię rozmowy. No i teraz dodajemy sobie te wiadomości, nie? Czyli dajmy role system, jeżeli jest wiadomość systemowa. A w sumie jest na pewno, no bo jest albo ta, którą podaliśmy, albo jest ta domyśla. No chyba, że prześlemy pustą odpowiedź, no ale tak czy siak ona jest. No i potem mam pętlę while true, czyli taka długa na rodzaj pętli, która nigdy się nie kończy. I pobijamy wiadomość od użytkownika, prawda? Jeżeli w wiadomości użytkownika pojawia się słowo exit, no to faktycznie uciekamy z tej nieskończonej pętli. Tą wiadomość użytkownika dodajemy do naszych messages, jako na końcu, prawda? Role user i to jest content. Ten kontekst, już teraz nie pamiętam, po co mi był ten kontekst. Aha, ten kontekst to jest właściwie ten jakby string, prawda? To, co wyślemy. Przejdźmy do rzeczy. Wszystkie linki wrzucę w opis tego filmu. Przygotowałem notebook collabowy na swoim repozytorium. Znowu link będzie w opisie. Notebook ten jest na GitHubie. Dostaniesz się tutaj bez żadnego zalogowania się. Z takim dosyć fajnym linkiem, opening collab, jak to klikniemy, to przeniesie nas do collaba. Oczywiście musisz być zalogowany do collaba. To jest konto google'owe, może być np. gmail'owe konto. To jest zupełnie darmowe, ale jednak konto musi być. I pierwsza rzecz, na którą musimy zwrócić uwagę, to musimy wybrać sobie runtime ze spadkiem GPU. On powinien być tutaj domyślnie już wybrany, ale w razie W w zakładce runtime gdzieś jest change runtime type i upewnij się, że masz C4 GPU. To też jest darmowe. Oczywiście z jakimś tam limitem czasowym przez 24 godziny, ale na jakiś czas, żeby się troszkę pobawić z tym modelem, spokojnie wystarczy. Tutaj też dodałem instrukcję co i jak i przejdźmy do instalacji bibliotek. Za pierwszym razem jak uruchamiamy pierwszą komendę, to po pierwsze on się łączy, tu widać po prawej u góry oraz na dole do tej maszyny wirtualnej, na której ten nasz cały kod będzie wykonywany. No i następuje instalacja. Ona sekundkę potrwa, więc troszkę ten moment przyspieszmy. OK. Biblioteki mamy zainstalowane. Zajął to około minuty. Możemy pójść dalej. Importujemy je. To powinno już zająć nam chwilkę. W porządku. Zainportowane. No i następny blok sprawdza, czy mamy dostępność GPU, czyli się upewniamy, czy faktycznie tutaj ta C4 jest dostępna. Urządzenie używa CUDA, więc jest CUDA. Przepraszam, więc jest OK. Jeżeli by wyszło CPU, no to upewnijcie się proszę, czy macie wybrany odpowiedni runtime. No i teraz wymagane działania, aby poprowadzić model. Na dzisiaj chciałbym Wam przedstawić Bielicz 4.5 Billions, czyli 4.5 miliarda parametrów w wersji 3.0 Instruct i do tego potrzebujemy kilka rzeczy. Potrzebujesz mieć konto na Hugging Face, ponieważ będzie trzeba zaakceptować jakby Grumming i Terms of Use dla tego modelu, więc ja tu już jestem zalogowany. Konto założysz rzeczywiście za demo. Potrzebujesz wygenerować token i tutaj dałem takiego bezpośredniego linka, ja go może otworzę u siebie. Tutaj możesz stworzyć, oczywiście będąc już zalogowanym, możesz stworzyć nowy token. Wystarczy read token, demo nazwę i token Ci się wytworzy. Ja taki token już mam. Tak jak widzisz, stworzyłem go 12 godzin temu i teraz ten token możesz albo sobie gdzieś tam zapisać i użyć go później bezpośrednio, ale fajną opcją w collabie jest dodanie tutaj sekretu. Ja sobie dodałem taki sekret, on się nazywa HF token i tutaj jest wartość tego tokenu, prawda? I potem jeżeli chcemy ten token wykorzystać, w sensie ten sekret wykorzystać, to wystarczy go włączyć i on będzie dostępny dla tego collaba, dla tego notebooka konkretnego. OK, co dalej? Dalej potrzebujemy, tutaj piszą o tym tokenie w sekretach, co jest opcją, ale nie jest koniecznością. My musimy oddać się na stronę modelu i zaakceptować Terms of Use. Oczywiście warto je przeczytać. Więc jak ja tutaj sobie wejdę w tę zakładkę, to ja już ten Terms of Use dla tego modelu zaakceptowałem, więc tego nie widać. Ale wejdźmy na jakiś inny model, którego nie zaakceptowałem, żebyśmy zobaczyli jak to wygląda. Czyli przykładowo, może to już sobie zamknął, to jest główna strona z Pichlerza, tu mamy Bielik V3 całe family i wejdźmy sobie na przykład na ten V3. I to wygląda mniej więcej tak, tutaj ta informacja, prawda? Unique to, Agree to jest kontakt informacyjny, to jest model, czyli tutaj musisz kliknąć Agree. No i oczywiście to jest Terms of Use, który przerzuca na stronę Bielika, z którym warto też się zaznajomić, prawda? OK. I teraz jak już te akcje są spełnione, czyli mamy konto, mamy token, zaakceptowaliśmy ten model, no to jesteśmy w stanie taki model sobie pobrać. Czyli najpierw logujemy się do Hacking Face'a i zwróćcie uwagę, że tu w tym miejscu wykorzystuje ten userdata.get.hf token, to wykorzystuje właśnie ten kurs, co tutaj pobrałem. Jeżeli nie chcesz wykorzystywać tego sekretu, to możesz ten token bezpośrednio sobie wkleić tutaj, prawda? Jak Ci wygodniej. No i następny krok to pobranie modelu, przepraszam, pobranie modelu i tokenizatora. Może jeszcze uda mi się to przed publikacją poprawić. No i to też chwilkę zajmie, prawda? To zajmie nawet kilka minut, bo tam parę giga danych jest ściąganych, więc zacznijmy to wykonywać. Jeżeli tutaj pojawi Ci się kod błąd 403, albo 401, jakiś anantraz, to coś poszło nie tak z tym tokenem, prawda? Upewnij się, że masz odpowiedni model, upewnij się, że zaakceptowałeś gulamin i że użyłeś odpowiedni token. I tu jest jeszcze jeden mały haczek. Jak to się wykonuje, pozwólcie, że przeskoczę z powrotem tutaj, na jakby stronie informacyjnej. Jak sobie zjedziemy troszkę, troszkę niżej, tutaj model name jest podany z małym błędem na ten moment, bo on się nie nazywa v3, on się nazywa v3.0, prawda? Czyli zwróćcie uwagę, że on tutaj jest 4,5b, myślnik v3. A on tak naprawdę się w tym momencie nazywa 4,5b, myślnik v3.0. Także jakby kopiując sobie ten model tutaj z tego readme, no będzie błąd. Więc myślę, że to jest kwestia tam poprawy tego w ciągu pewnie jednego dnia. Ale jeżeli byście dawali na ten błąd, upewnijcie się, że używacie dobrej nazwy modelu. No okej, tutaj dane się popijają. Znowu przyspieszę troszkę wideo. W porządku, to trwało troszkę dłużej, około czterech minut, ale model mamy pobrany. On oczywiście pobrany jest na tę maszynę wirtualną, prawda? Na ten kompiut collabowy, nie na nasz komputer. Mam nadzieję, że to jest jakby zrozumiałe. No i możemy wysłać pierwsze zapytanie do Bilika. Tu dodałem taki parametr jakby string, żeby można było w tym miejscu ładnie sobie go edytować. Ale szczerze mówiąc, to jest po prostu edycja tej zmiennej prompt, czyli na przykład przepis na jajecznicę w dwóch zdaniach. No i spróbujmy sobie to wykonać. Zobaczymy, jak nam to ładnie zadziała. I mamy odpowiedź, prawda? I mamy tą odpowiedź już, że przepis na jajecznicę w dwóch zdaniach. I dostajemy odpowiedź. Na patelnię zużyj masło. Dodaj pociekaną cebulę i smaż, aż zmięknie. Wbijaj kadobę solą, pieprzem i mieszaj, aż się zetną. Świetnie. Teraz tu jednej rzeczy przyznam szczerze, że troszkę mi brakuje. Jakby na tym etapie już oczywiście możesz sobie dalej eksperymentować po swojemu, prawda? Użyć ten kod, czy już dalej sobie pisać kod, w jaki sposób komunikować się z modelem. Ale chciałem pokazać Ci jeszcze jedną rzecz, bo zgodnie z tutaj dokumentacją, która jest zawarta, a przepraszam, to jest zły model, bo dzisiaj pracujemy z Instractem, prawda? Zgodnie z tą dokumentacją, ta odpowiedź sfumatowana Apply by Chat Template, ona jest w tym celu trzymając bardzo, bardzo podobna, ale w okresie tej linijki konkretnie. Czyli mamy imstat, no system nie, no bo nie wysłaliśmy żadnego system instruction, ale mamy user, się kończy, potem brakuje. Następnym tutaj w tej pętli, w tym forze tak naprawdę budujemy ten kontakt. Czyli dla wszystkich wiadomości, które już są, czyli na przykład z tą całą historią, no to dodajemy sobie odpowiednią rolę, content i po prostu sobie dajemy dnia, czyli system, user, asystent, w zależności od tego jaka jest rola. No i jak ten kontakt jest zbudowany, na końcu dodajemy właśnie ten imstat, asystent. To jest koniec kontekstu. No i wysyłamy takie zapytanie do użytkownika, o Boże, nie do użytkownika, tylko do modelu językowego. No i potem tak naprawdę tutaj jeszcze dodałem sobie takie wyrażenie ogólne, żeby odciąć jakby tą odpowiedź, odpowiedź z chatbota i jakby z odpowiedzi chatbota wyciąć tylko bezpośrednio jego odpowiedź na ostatnie zapytanie. No i to jest wszystko. No i troszkę niby kodu jest, ale jak się w niego wczytać, to nie jest proste. Pewnie przekombinowane, pewnie dałoby radę to zrobić szybciej, czy łatwiej, no ale tak jak taki chatbielik napisałem, jak go sobie wykonamy, to tutaj jest jakby tylko do asystenta, prawda? Czyli zwróćcie uwagę, mamy im user, im start dla usera, potem im end dla usera, potem dookoła im start dla asystenta, a oraz im end dla asystenta. Więc pomyślałem sobie napisać taką funkcję pomocniczą do wyciągania gotowej odpowiedzi. Ona tu, no tak dosyć szeroko opisałem z komentarzami. Wysyłasz takie sformatowane prompt zgodnie z jakby tym założeniem. Czyli jeżeli podajemy system instruction, no to on wygląda tak. Jeżeli nie ma system instruction, tylko jest instruction, to on wygląda tak. No i potem jest organizacja, output i tak dalej. I teraz to jest funkcja, prawda? Nazywa się zapytaj. Czyli możemy tutaj zdefiniować system instruction, ale nie musimy i mamy prompt. Czyli jak ja sobie wykonałem, czyli ta funkcja już istnieje, to teraz mogę ją odpytywać, nie? Czyli na przykład prompt, przepisywany w tych dwóch zdaniach, czyli ten sam prompt, no i robimy zapytanie tego promptu. No i gdy zapytamy, to powinniśmy otrzymać bezpośrednio już odpowiedź. No i mamy tą odpowiedź. Ona tu jest sformatowana, tak jak widzicie, z znakami nowych linii i tak dalej, więc pewnie fajnie było jeszcze to dodać do jakiejś zmiennej i ładnie przedstawić. Zresztą możemy to zrobić, nie? Bo to tak naprawdę, on zwraca tą wartość. Czyli możemy sobie zrobić to jako odpowiedź, to jest zapytaj od prompt i wtedy sobie zrobić print odpowiedź. I to powinno już zdecydowanie ładniej wyglądać. Zresztą zaraz sobie zobaczymy, bo teraz ją po prostu ładnie już sformatowaną powinniśmy dostać na ekranie. No i jest lepiej, nie? Jaśnica ze znakowej linii, mamy dwa kalki, prawda? Tutaj jakby te podwójne asteriksy, to też jest sformatowanie z kolei magdałnowe, to pewnie można było jeszcze tam odpowiednio to napisać, żeby ten magdałn też został zaakceptowany, żeby ta jaśnica była pogubiona. No dobrze. No ale to już są takie, jak to powiedzieć, szczegóły jakieś pythonowe, nie? Ważne, że działa, dalej się można bawić. No i tu sobie pomyślałem, że fajnie byłoby jeszcze napisać taki prosty czat. I on jest taki, no naprawdę prosty, nie? Na początku zbijamy instrukcję systemową, o ile jakaś jest. Jeżeli nie ma, to dodajemy jakąś domyślną instrukcję systemową, czyli tam odpowiada krótko o procedenie wysokopolskim. Tutaj będę przykrywał wszystkie wiadomości, tak? Żeby ten nasz czatbot miał, jakby pamiętał kontekst i pamiętał historię rozmowy. No i teraz dodajemy sobie te wiadomości, nie? Czyli dajmy role system, jeżeli jest wiadomość systemowa. A w sumie jest na pewno, no bo jest albo ta, którą podaliśmy, albo jest ta domyśla. No chyba, że prześlemy pustą odpowiedź, no ale tak czy siak ona jest. No i potem mamy pętlę while true, czyli taka w ulubionym rodzaj pętli, która nigdy się nie kończy. I pobijamy wiadomość od użytkownika, prawda? Jeżeli w wiadomości użytkownika pojawia się słowo exit, no to faktycznie uciekamy z tej nieskończonej pętli. Tą wiadomość użytkownika dodajemy do naszych messages, jako na końcu, prawda? Role user i to jest content. Ten kontekst, już teraz nie pamiętam, po co mi był ten kontekst? Aha, ten kontekst to jest właściwie ten jakby string, prawda? To co wyślemy potem do czatbota bezpośrednio. No i następnym tutaj w tej pętli, w tym forze tak naprawdę budujemy ten kontekst. Czyli dla wszystkich wiadomości, które już są, czyli na przykład z tą całą historią, no to dodajemy. Collab nie jest najlepszy do takich czatbotów, więc trochę tak wygląda, trochę topo, nie? Ale generalnie działa, nie? Czyli mamy czat z modelem Bielik 4.5b, wpisz exit, aby zakończyć, no i podaję instrukcję systemową. No i na przykład jak nadrusimy enter, no to ta domyślna instrukcja systemowa zostanie wybrana. No i pierwsze pytanie. Możemy napisać, że cześć. Coś mi tu pomieszkało. Cześć, jestem Tomek. No i dostajemy odpowiedź od Bielika. Cześć Tomek, jak mogę Ci pomóc? I tu możemy się spytać, nie wiem, ile dni ma luty? Trochę literówka, ale mam nadzieję, że model sobie z tym poradzi. No i dostajemy fajną odpowiedź, która ma 20 dni, zależnie od tego, czy rok jest przystępny. No i sprawdźmy faktycznie, czy jest ta pamięć, jakby kontekst. Jak mam na imię? Co ciekawego powiesz o tym imieniu? Krótko. No i to może zająć sekundkę dłużej, bo prawdopodobnie ta odpowiedź będzie troszkę dłuższa. Ona musi się wygenerować. Tutaj nie ma streamingu, tylko czekamy na pewną odpowiedź, dostaniemy ją na ekranie. No i fajno, trochę przeskoczyło, ale odpowiedź tutaj się zaczyna, czyli Twoje imię to Tomek i tu fajne wytłumaczenie. Życzymy Jego Dnia Tomek. No i teraz tu mogę wpisać exit, żeby zakończyć czat. No i działa to fajnie. Myślę, że to jest fajna baza, żebyście samemu zaczęli się bawić. Warto sobie w collabie zrobić file i save a copy in drive, ponieważ teraz na tym pliku, który pracuje, to jest ten plik z GitHuba, więc te zmiany, czyli na przykład jak sobie dodamy nowe komórki itd., one nie będą zapisane. Więc jeżeli sami do tego siądzicie, to warto zacząć od copy własnej w trafie i wtedy możecie te komórki sobie bezpośrednio tu tworzyć. Możemy dodawać skorzoną ilość i sobie tam dalej programować. Jedna mała uwaga. To jest bardzo mały model. 4.5 beta, 4.5 miliarda parametrów to jest naprawdę małe, więc w dodatku on ma dobrze sobie radzić z językiem polskim, dobrze sobie radzić z językiem angielskim, kto wie, czy z jakimiś innymi językami także i ma mieć ogromną ilość wiedzy, więc on bez podłączenia do żadnej zewnętrznej bazy wiedzy, bez żadnego raga, on będzie popełniał błędy. Jeżeli zaczniemy go pytać o jakieś fakty itd., z lutym czy z jesienią to on spoko, da o sobie radę, ale jakbyśmy zaczęli go pytać o jakieś tam inne szczegóły, on będzie popełniał pewne wtopy i to musi działać przy tak małym modelu niestety. To jest coś za coś. Nawet zauważyłem, on ma tutaj niestety taką słabą przypadłość w ta wersja modelu, że jak go się spytamy kim jesteś, to on nawet nam tu się przedstawia trochę błędnie, co może zrobić złe pierwsze wrażenia. Zobaczmy, jaką dosłownie ma odpowiedź, ale poprzednio mi się przedstawiał troszkę brzydko, w sensie przedstawiał mi się jako... A nie, teraz zostałem bardzo fajny. Jestem za własną modelą z ok. nazwy Bielik. Ale przyznam szczerze, no właśnie, stworzony przez Antropik, tu pojawiają się jakieś takie czasem babole małe. Ja wcześniej dostałem jakąś odpowiedź, co jest związaną z OpenAI itd. To wcale nie znaczy, że ten model jest zły i w ogóle dyskwalifikujemy. To po prostu jest konsekwencja wielkości tego modelu i na czym zespół Bielika się skupiał, żeby w czym sobie radził lepiej, np. instruction calling itd. Także byłbym bardzo daleki od tego, żeby ocenić ten model po jakimś jednym prompcie i jedną złą odpowiedzią, nie? Bo raczej nie nadaje się do tego, żeby go wrzucić jako to jest chatbot, który wie wszystko o wszystkim i zawsze opowiada dobrze i korzystacie z niego, nie? To ma być model, który wykorzystujemy w swoich projektach, prawda? W swoich narzędziach. Finetunujemy go, dopasowujemy go do naszego konkretnego use case'u, a nie używamy go tak generycznie, że to jest out of the box, wiecie, omnibus, który wie wszystko. OK, w porządku. Miało wyjść krótkie wideo, a tu chyba przekroczyłem 20 minut, więc prawdopodobnie te dwie osoby, które obejrzą ten film do końca i pozdrawiam, bo pewnie to moja rodzina. Dzięki i co? No i udane zabawy. Pamiętajcie o tych krokach dotyczących wymaganych działań aby model pobrać. Jak pojawi się wersja na Olama, pewnie za kilka się pojawi i będzie to dużo prostsze do uruchomienia, to pewnie jakiś krótki tym razem filmik też na ten temat skleję. Fajno. Dzięki za obejrzenie. To w sumie moje pierwsze wideo po polsku chyba. No i do zobaczenia na następnym wideo. Jest zbudowany. Na końcu dodajemy właśnie ten IEM Start Assistant. To jest koniec kontekstu. No i wysyłamy takie zapytanie nie do użytkownika, tylko do modelu językowego. No i potem tak naprawdę tutaj jeszcze dodałem sobie takie wyrażenie regularne, żeby odciąć jakby tą odpowiedź, odpowiedź chatbota i jakby z odpowiedzi chatbota wyciąć tylko bezpośrednią jego odpowiedź na ostatnie zapytanie. No i to jest wszystko. Czyli troszkę niby kodu jest, ale jak się w niego wczytać, to nie jest proste. Pewnie przekombinowane. Pewnie dałoby radę to zrobić szybciej czy łatwiej. No ale tak jak taki chat Bielik napisałem, jak go sobie wykonamy, to tutaj jest jakby tylko definicja do naszej pamięci, że coś takiego jest i to możemy go sobie uruchomić. Teraz collab nie jest najlepsze do takich chatbotów, więc to trochę tak wygląda trochę topo, nie? Ale generalnie działa. Czyli mamy chat z modelem Bielik 4.5b. Wpisz exit, aby zakończyć. No i podaję instrukcję systemową. Na przykład jak nadusimy enter na cytat, domyślna instrukcja systemowa zostanie wydana. No i pierwsze pytanie. Możemy napisać, że cześć. Coś mi tu w myszkach uciekało. Cześć, jestem Tomek. No i dostajemy odpowiedź od Bielika. Cześć Tomek, jak mogę Ci pomóc? I tu możemy się spytać. Nie wiem, ile dni ma luty? Trochę literówka, ale mam nadzieję, że Pan Dorosław jest tym poradzi. No i dostajemy fajną odpowiedź. Luty ma 20. Jeszcze mamy 20 dni, w zależności od tego, czy rok jest przedstępny. No i sprawdźmy faktycznie, czy jest ta pamięć, jakby kontekst. Jak mam na imię? I co ciekawego powiesz o tym imieniu? Krótko. No i to może zająć sekundkę dłużej, bo prawdopodobnie ta odpowiedź będzie troszkę dłuższa. Ona musi się wygenerować. Tutaj nie ma streamingu, tylko czekamy na pewną odpowiedź zanim dostaniemy ją na ekranie. No i fajno. Trochę przeskoczyło, ale odpowiedź tutaj się zaczyna, czyli Twoje imię to Tomek i tu fajne wytłumaczenie. Życzymy Jego Dnia Tomek. No i teraz tu mogę wpisać exit, żeby zakończyć czat. No i działa to fajnie. Myślę, że to jest fajna baza, żebyście samemu zaczęli się bawić. Warto sobie w collabie zrobić file i save a copy in drive, ponieważ teraz na tym pliku, który pracuje, to jest ten plik z GitHuba, więc te zmiany, czyli np. jak sobie dodam numer komórek itd., one nie będą zapisane. Więc jeżeli sami do tego siędzicie, to warto zacząć od copy w własnej drive i wtedy możecie te komórki sobie bezpośrednio tu tworzyć. Możemy dodawać skończoną ilość i sobie tam dalej programować. Jedna mała uwaga. To jest bardzo mały model. 4.5 beta, 4.5 miliarda parametrów on jest naprawdę mały, więc w dodatku on ma dobrze sobie radzić z językiem polskim, dobrze sobie radzić z językiem angielskim, kto wie, czy z jakimiś innymi językami także i ma mieć ogromną ilość wiedzy, więc on bez podłączenia do żadnej zewnętrznej bazy wiedzy, bez żadnego raga, on będzie popełniał błędy. Jeżeli zaczniemy go pytać o jakieś fakty itd., z lutym czy z jeszcze nic, to on spoko, da sobie radę, ale jakbyśmy zaczęli go pytać o jakieś tam inne szczegóły, on będzie popełniał pewne wtopy. To musi działać przy tak małym modelu niestety, to jest coś za coś. Nawet zauważyłem, on ma tutaj niestety taką słabą przypadłość w ta wersja modelu, że jak go się spytamy kim jesteś, to on nawet nam tu się przedstawia trochę błędnie, co może zrobić złe pierwsze wrażenia. Zobaczmy, jaką bym w stanie ma odpowiedź, ale poprzednio mi się przedstawiał troszkę brzydko, w sensie przedstawiał mi się jako... a nie, teraz zostałem Bozo fanem, jestem z awansowaną językową nazwę Bielik, ale przyznam szczerze, no właśnie, stworzony przez Antropik, tu pojawiają się jakieś takie czasem babole małe. Ja wcześniej dostałem jakąś odpowiedź, co jest związaną z OpenAI itd. To wcale nie znaczy, że ten model jest zły i w ogóle dyskwalifikujemy, to po prostu jest konsekwencja wielkości tego modelu i na czym zespół Bielika się skupiał, żeby w czym sobie radził lepiej, np. instruction calling itd. Także byłbym bardzo daleki od tego, żeby ocenić ten model po jakimś jednym prompcie i jedną złą odpowiedzią, bo on raczej nie nadaje się do tego, żeby go wrzucić jako to jest chatbot, który wie wszystko o wszystkim i zawsze opowiada dobrze i korzystacie z niego. To ma być model, który wykorzystujemy w swoich projektach, w swoich narzędziach, finetunujemy go, dopasowujemy go do naszego konkretnego use case'u, a nie używamy go tak generycznie, że to jest out of the box, wiecie, omnibus, który wie wszystko. OK, w porządku. Miało wyjść krótkie wideo, a tu chyba przekroczyłem 20 minut, więc bardzo prezentuję dwie osoby, które obejrzą ten film do końca i pozdrawiam, bo pewnie to moja rodzina. Dzięki i co? No i udane zabawy. Pamiętajcie o tych krokach dotyczących wymaganych działań na pewien moment, aby model pobrać. Jak pojawi się wersja na Lama? Pewnie za chwilkę się pojawi i będzie to dużo potrzeb do uruchomienia, to pewnie jakiś krótki tym razem filmik też na ten temat skojarzę. Fajna idea na następne wideo.