Co ostatnio się nauczyłem

Przyszło mi do głowy, że mogę sobie podsumować co się ostatnio nauczyłem, i to też właśnie robię.

Że LLM fine-tuning nie zawsze jest konieczny

W pracy mamy swój własny język programowania (nieduży, do specyficznego zadania), wygląda trochę jak pseudocode i jako, że jest do specyficznego zadania, zawiera niewielką grupę instrukcji jak if/else, operacje matematyczne i kilka tym podobnych.

Wiosną ubiegłego roku pomyślałem, że to dobra okazja by zobaczyć czym jest fine tuning: postanowiłem zrobić czata, który w odpowiedzi na pytanie (np, “policz ile to jest 2 + zmienna1, jeśli wynik będzie większy niż zmienna2, napisz ‘za dużo'”). Jako, że żaden model językowy nie zna naszego języka, postanowiłem za pomocą fine-tuningu nauczyć nowy model i go użyć. Wtedy zadziałało.

Firmie się spodobało i dostałem zadanie by czat był dostępny dla użytkowników naszych produktów. Tyle, że miałem to zrobić bez fine-tuningu.

Już miałem pójść w embeddings i zacząłem z nimi ekseprymentować, ale znajomy podpowiedział, że ju próbował przekazać dokumentację języka – okrojoną – zwyczajnie jako system prompt.

I faktycznie: pierwsze próby dały od razu pozytywne rezultaty, a dopieszczanie system prompt daje już rezultaty niemal idealne. Do tego stopnia, że spodziewajcie się, że napiszę więcej gdy produkt będzie już na rynku.

Skille podszlifowane: OpenAi API, fine tunning, embeddings i wyczajnie prompting.

Że web components są fajne

Czat ma bazować na UI, który już mamy do czatów w innych celach dodanych tu i tam. Całe UI to jeden HTML-pseudo-element napisany jako Web Component.

Spodobało mi się to do tego stopnia (działa to i wygląda podobnie do komponentów React, Svelte czy innych, tylko, że nie wymaga niczego więcej niż czystego JS i przeglądarki), że przez kilka dni myślałem co by tu dla siebie napisać w tym API i wymyśliłem: narzędzie do wrzucania obrazków ponad swoją stronę, z designu by porównywać z tworzoną stroną czy jest taka, jak grafik sobie zażyczył.

Jak to działa możecie zobaczyć tutaj (spójrzcie w prawy dolny róg), tu jest repo jeśli chcecie sami użyć (dodajcie wtedy na stronie element <pixel-perfect> i tyle), a jeśli chcecie w postaci wtyczki do WordPressa to też oczywiście jest.

To była fajna zabawa, serio.

Skille: web components, shadow DOM, localStorage API i do tego kolejny raz użyte Github Pages.

Że takie narzędzia już są, ale to dobrze

Plugin wam nie zadziała z marszu, musicie sklonować repo i zrobić composer install. Buildów nie zrobiłem, a tym bardziej nie wrzuciłem do repo WordPressa, bo gdy pokazałem to narzędzie w firmie, powiedziano, że przypomina już istniejące dodatki do przeglądarek. Tu dla Firefoksa, a tu dla Chrome.

Tak więc wtyczki dalej nie będę rozwijał (chyba).

Ale to, że narzędzia już istnieją przyjąłem z entuzjazmem. Nawet czułem, że musi być już coś takiego, ale nie szukałem, bo głównym celem było “użyć web components w czymkolwiek i nie patrzeć się na nic”. Chciałem się nauczyć nowej technologii i już umiem.

A czemu z entuzjamem? Było to dla mnie wielkie wow, jak bardzo trafiłem z wyborami:

  • ta sama nazwa biblioteki jak istniejacych rozwiązań
  • upload obrazka (to oczywiste)
  • zmiana przezroczystości za pomocą suwaczka
  • inwersja kolorów!
  • przesuwanie obrazka po ekranie kursorem lub klawiszami strzałek (z shiftem przesuwa bardziej)
  • zapamiętywanie położenia i parametrów pomiędzy odświeżeniami strony

Moja biblioteka i dostępna rozszerzenia robią dokładnie to samo choć nie podglądałem “konkurencji”. Cieszy mnie, że zrobiłem coś, tak jak tego oczekuje rynek.

Skille: samozadowolenie.

Że można hostować WordPressa jako static page

Dla mojej wtyczki WC Price History musiałem zrobić landing page. Domenę już mam w OVH i do niej za darmo mikrohosting więc stwierdziłem, że na jedną stronę, no może kilka, wystarczy.

Zdziwiłem się, że tam nie ma bazy danych, no ale dobra: za darmo. WordPress więc nie pójdzie, więc może jakiś static page?

Jako, że z designem u mnie nie najlepiej, mimo wszystko chciałem wykorzystać jakiś gotowy motyw WordPressa i Gutenberga do budowania blokowych treści.

I się udało, tu jest strona, zupełnie statyczna, a zbudowana w WordPressie. Jak?

  • na localhost mam stronę normalną w WP
  • za pomocą Gutenberga zbudowałem jej cały wygląd, to było w sumie pierwsze użycie (bez porażek) Gutenberga nie do edycji treści a budowy całego layoutu. Nadal nie jest to idealne user experience ale już zaczynam czuć to narzędzie
  • za pomocą wtyczki Simply Static (wersji darmowej) generuję wersję statyczną
  • potem przez ftp wysyłam do OVH. Automatyczne wysyłanie jest w wersji płatnej ale udało mi się je zastąpić prostym skryptem w bash.

Skille: już mi o wiele lepiej z Gutenbergiem, statyczne strony są szybkie, bash scripting

Web components i statyczne strony zainteresowało mnie Astro.

Powyższe doświadczenia plus ten film na youtube sprawiły, że wyszedłem troszkę z WordPressa i zacząłem szukać innych ciekawych rzeczy wokół JS. W filmie można zobaczyć jak duże frameworki JS wykorzystują web components i tag <template> do streamowania danych i hydracji widoku użytkownika. Pomysłowe, sam myślałem, że to po prostu jakiś ajax.

W filmie pada stwierdzenie, że Astro to taki framework, w którym można używać Reacta, Svelte, Vue czy czego się chce do budowania komponentów (plus własne elementy Astro) i zacząłem czytać o tym więcej.

Rewelacyjny pomysł, szczególnie jeśli chcesz używać strony do nauki kolejnych frameworków. Znam już React i dość sporo wiem o Svelte (na poziomie stworzonych mini projektów). Jak stworzysz stronę w React, a chcesz się nauczyć Svelte to musisz stworzyć kolejną stronę lub przepisać poprzednią. A z Astro nie: jak masz już komponenty napisane w React, a chcesz się nauczyć Vue, po prostu piszesz kolejny moduł w Vue. I wszystko razem działa i wymienia między sobą informacje.

Astro jeszcze czeka na użycie, takie prawdziwe. Ale cała idea “static first”, wysp dynamicznych i ewentualnego SSR na koniec bardzo mi się podoba.

Skille: Astro, jak działa hydracja

To tyle z ostatniego miesiąca

To tylko ostatnie mniej więcej 40 dni, może mniej, a na pewno nie dzień w dzień. Raz na jakiś czas przychodzi mi taka maniakalna faza na poznawanie nowych rzeczy (a potem i tak kończę w WordPressie). Ale chyba każdy programista tak ma.

W komentarzach możecie mi podesłać swoje nowo nauczone rzeczy lub co jeszcze wokół tematów powyżej krąży i mógłbym poczytać. Jestem głodny 🙂

20

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.