Podstawy
2 godz. 43 min · OpenAI · Full-stack i Programowanie
Adam GospodarczykChociaż dokładne działanie dużych modeli językowych nie jest zrozumiałe nawet dla twórców tych narzędzi, to i tak istnieje szereg dobrze znanych faktów. Zapoznanie się z nimi pozwoli Ci lepiej wyobrazić sobie sposób działania LLM bez konieczności wchodzenia w głębokie detale techniczne. To z kolei w sposób bezpośredni przełoży się na skuteczność projektowanych promptów. W pierwszej części kursu skupiamy na wysokopoziomowym spojrzeniu na modele firmy OpenAI, uwzględniając ich aktualne możliwości oraz aktualne ograniczenia.
Instrukcje kierowane do modeli takich jak GPT-3.5-Turbo czy GPT-4, mogą realizować najróżniejsze zadania. Pomimo tego ich ogólna struktura uwzględnia pewne schematy z których możemy korzystać. W zależności od celu jaki chcemy osiągnąć, możemy uwzględniać lub pomijać poszczególne elementy promptu. I chociaż wspomniane modele są w stanie świetnie radzić sobie z nieustrukturyzowanymi danymi, to w przypadku projektowania instrukcji, bardzo istotne jest zachowanie precyzji oraz wyraźne oddzielenie jej fragmentów. Na praktycznych przykładach zobaczysz, jak łatwo niewłaściwe formatowanie może negatywnie wpływać na generowaną odpowiedź. Poznasz także ogólne zasady, które pomogą Ci kształtować instrukcje w sposób, który zwiększy prawdopodobieństwo wygenerowania odpowiedzi, której oczekujesz.
Zero-shot, Few-shot, Chain of Thought czy Tree of Thoughts — to techniki projektowania promptów, dzięki którym znacząco zwiększysz ich skuteczność. I choć każda z nich zwykle opiera się o bardzo proste koncepcje, tak ich praktyczne wykorzystanie nie zawsze jest oczywiste. W tym kursie nie tylko poznasz przykłady ich zastosowania, ale także będziesz w stanie połączyć je z ogólnymi zasadami tworzenia promptów, co jeszcze bardziej ulepszy tworzone przez Ciebie instrukcje. Ciekawostka: Technika Tree of Thoughts w niektórych przypadkach zwiększa skuteczność GPT-4 z 4% do nawet 74%.
Ostatnia część kursu uwzględnia kilka przykładów, których celem jest pokazanie Ci szerokiego kontekstu w którym umiejętność projektowania promptów, umożliwia wyjście daleko poza zwykłe odpowiadanie na pytania i generowanie tekstu. Zobaczysz, jak tworzone przez Ciebie instrukcje mogą zostać wykorzystane w aplikacjach webowych oraz systemach uwzględniających realizujących złożone zadania z pomocą dużych modeli językowych. Mowa tutaj o pamięci długoterminowej, embeddingu danych oraz nawet autonomicznych agentach, zdolnych do posługiwania się narzędziami. Pamiętaj jednak, że wszystkie z wymienionych tematów zostały omówione tylko z szerokiej perspektywy, ponieważ ich faktyczna implementacja, wykracza poza zakres tego kursu.
Ten kurs został zaprojektowany z myślą o osobach chcących rozpocząć naukę projektowania promptów dla dużych modeli językowych, takich jak GPT-3.5-Turbo czy GPT-4. Wcześniejsze doświadczenie oraz zaawansowane umiejętności techniczne czy programistyczne nie są wymagane. Wiedza z tego kursu da Ci podstawy do dalszej nauki projektowania promptów oraz pozwoli Ci uzyskać szerszą perspektywę na temat roli promptów przy codziennej pracy z narzędziami takimi jak ChatGPT czy integracjami dużych modeli językowych z aplikacjami.
W tej lekcji skupimy się na trybie Chat, w którym ja osobiście spędzam większość
mojego czasu projektując prompty dla modeli GPT-4 oraz GPT-3,5-Turbo.
Aby aktywować ten tryb, oczywiście z rozwijanej listy należy wybrać tryb Chat.
Następnie pola promptu zostaną podzielone w następujący sposób.
Mamy więc tutaj wiadomość systemową, użytkownika oraz asystenta.
Można powiedzieć, że wiadomość systemowa nadaje tutaj charakter rozmowy
natomiast w tych poszczególnych polach
mamy odpowiednio wiadomości użytkownika oraz asystenta.
No i teraz jeżeli chodzi o ustawienia,
które tutaj mamy, to już zdążyliśmy przez nie przechodzić.
Nie będę więc tutaj się powtarzał,
ponieważ nasza uwaga powinna skupić się na dostępnych modelach.
Konkretnie mamy tutaj GPT-4, GPT-3,5-Turbo
oraz ich dodatkowe wersje, które są tak zwanymi Snapshotami.
Musisz wiedzieć, że te dwa pierwsze modele otrzymują bieżące aktualizacje.
Oznacza to, że nieustannie mamy tutaj dostęp do najnowszych funkcji.
W niektórych sytuacjach może się jednak okazać tak, że będziemy potrzebowali, aby
nasz prompt działał precyzyjnie i w sposób dość przewidywalny.
Wówczas dodatkowe aktualizacje, które mogą
wpływać na działanie takich promptów, są po prostu niepożądane.
No i dokładnie na takie sytuacje zostały
przygotowane Snapshoty, które można sobie aktywować, a następnie korzystać z nich
przez około 3 miesiące do czasu wydania najnowszej wersji.
Oczywiście taka sytuacja zwykle wymagana
jest w przypadku aplikacji działających produkcyjnie.
W momencie jednak, gdy projektujemy prompty
na nasze potrzeby, raczej nie odgrywa to dużej roli
aczkolwiek musisz mieć na uwadze fakt, że
jeżeli korzystasz z tych aktualizowanych wersji modeli,
no to prompt, który zaprojektujesz dzisiaj, jutro może działać już nieco inaczej.
I choć zwykle różnice te są nieznaczne, to czasem mogą okazać się nawet niepożądane.
Jeżeli chodzi o czas wygaśnięcia tych
snapshotów, możesz odnaleźć go na tej stronie w dokumentacji OpenAI.
W przypadku modeli, które mamy dostępne w
tym momencie nie ma ogłoszonej daty wygaśnięcia.
Oczywiście taka data się pojawi w momencie, gdy pojawią się aktualizacje.
Zanim jednak to się stanie, możesz po
prostu przełączyć się na te modele, no i przynajmniej przez jakiś czas działać bez
aktualizacji, a w związku z tym zachować pewne prawdopodobieństwo, że Twoje
prompty będą zachowywać się w miarę stabilnie.
No to teraz zasadnym pytaniem wydaje się
to, jaka jest różnica pomiędzy GPT-4 a GPT-3,5-Turbo?
Otóż różnic jest przynajmniej kilka i zdecydowanie warto brać je pod uwagę.
Ja tylko dodam, że w większości przypadków
wykorzystuję model GPT-3,5-Turbo ze względu na to, że jego szybkość działania
jest nieporównywalnie większa, a dodatkowo sposób jego działania jest wystarczający
do większości realizowanych przeze mnie zadań.
Poza samą szybkością model GPT-3,5-Turbo jest także zauważalnie tańsze.
Na stronie OpenAI znajdziemy zestawienie, w którym wyraźnie widać, że
model GPT-4 w wersji 8K, czyli dokładnie tej, do której mamy dostęp, kosztuje
zdecydowanie więcej niż model GPT-3,5-Turbo.
Dodatkowo model GPT-4 rozliczany jest
inaczej w zależności od przekazanego promptu, czyli konkretnie tekstu, który
przekażemy do uzupełnienia oraz inaczej dla tekstu, który zostaje generowany.
W przypadku modelu GPT-3,5-Turbo takiego
podziału nie ma i też stawka jest odpowiednio niższa.
Rezultat końcowy jest taki; za każdym
razem, gdy korzystasz z modelu GPT-4, płacisz zdecydowanie więcej,
model działa wolniej, ale jednocześnie
jego ogólna skuteczność jest zdecydowanie wyższa.
Myślę, że w tym miejscu warto dodać, że w przypadku Playground oraz dostępu do API
rozliczani jesteśmy na podstawie cennika, który był widoczny na stronie.
Jeżeli jednak będziemy korzystać z modelu GPT-4 w ramach ChatGPT Plus no to tamto
dodatkowe rozliczenie nie zostanie uwzględnione, ponieważ całe działanie
opiera się o stały abonament na poziomie około 20 dolarów.
Oznacza to, że do takiego codziennego
zastosowania GPT-4 zdecydowanie lepiej jest korzystać ChatGPT.
Warto jednak mieć tutaj na uwadze pewien fakt.
Mianowicie w momencie gdy korzystamy z ChatGPT, sposób przetwarzania danych, które
wysyłamy do OpenAI jest zdecydowanie inne.
Mianowicie dane, które wysyłamy do ChatGPT nie tylko są przechowywane przez OpenAI,
ale także mogą zostać wykorzystane do dalszego trenowania modelu.
Oznacza to mniej więcej tyle, że jeżeli
przekażemy tutaj jakieś poufne informacje np.
na temat naszej firmy, to może okazać się,
że w przyszłości te informacje będą sugerowane innym użytkownikom.
Z tego powodu pierwsze co należy zrobić to
w wersji płatnej ChatGPT przejść do ustawień, a następnie w sekcji Data
Controls wyłączyć opcję historii oraz treningu.
Jest to niestety łączona opcja, którą w
momencie gdy wyłączymy cała historia konwersacji zostanie zablokowana oraz
kolejne rozmowy nie będą zapisywane, ale jednocześnie dane, które będziemy
przesyłać według OpenAI będą usuwane po 30 dniach i będą przechowywane na ich
serwerach w celu badania ewentualnych naruszeń.
Oczywiście tutaj musisz wiedzieć, że prompty, które
zaprojektujesz sobie w Playground możesz wykorzystać nie tylko na potrzeby API, ale
także z powodzeniem będą działać w przypadku ChatGPT, aczkolwiek oczywiście
wyjątek stanowią tutaj te dodatkowe ustawienia, których tam ustawić nie można.
Dodatkową różnicą pomiędzy modelami GPT-4
oraz GPT-3,5-Turbo jest liczba tokenów, które są w stanie przetworzyć.
W przypadku wersji GPT-4, która w momencie nagrywania tego materiału jest jedyną
wersją dostępną dla użytkowników, limit ten wynosi 8192 tokeny.
W przypadku GPT-3,5-Turbo limit ten jest o połowę mniejszy.
Co więcej, tak jak już wspominałem, limit ten nie uwzględnia tylko wygenerowanego
tekstu, ale także tekst, który przekazujemy jako prompt.
Oznacza to, że w przypadku GPT-3,5-Turbo mamy o połowę mniej miejsca na zapisanie
promptu oraz ewentualną generowaną odpowiedź.
To ograniczenie po prostu warto mieć na
uwadze, ponieważ też tak jak już powiedziałem, w momencie gdy przekroczymy
ten limit, zapytanie zostanie odrzucone i zostanie zwrócone błąd.
Oczywiście praktycznie zawsze musimy dbać o to, aby nasze prompty były możliwie jak
najkrótsze i jednocześnie skutecznie realizowały swoje zadanie.
Co więcej, zwykle jest tak, że prompty, które projektujemy dla modelu GPT-3,5-Turbo
działają w przypadku modelu GPT-4, ale odwrotnie nie zawsze musi tak być.
Chodzi o to, że po prostu GPT-4 jest zdecydowanie mądrzejszy i jest w stanie
radzić sobie lepiej z konkretnymi zadaniami.
Dodatkową, bardzo istotną różnicą pomiędzy tymi modelami jest fakt, że w przypadku
GPT-3,5-Turbo wiadomość systemowa bywa ignorowana lub też bardziej konkretnie
model nie do końca bierze ją pod uwagę w momencie generowania treści.
Coś takiego w niektórych przypadkach może okazać się bardzo uciążliwe.
Po prostu wyobraź sobie scenariusz, w którym zapisujemy, że nasz asystent udziela
odpowiedzi tylko w języku niemieckim, a on w przypadku modelu GPT-3,5-Turbo w
trakcie rozmowy może zgubić tą informację i zacząć ponownie mówić np.
po angielsku.
Myślę, że prędzej czy później z tym
problemem się spotkasz i jeżeli tak się stanie to wiedz, że jest to
charakterystyczne zachowanie dla modelu GPT-3,5-Turbo.
Oczywiście nie oznacza, że nie spotkasz go
w ogóle w przypadku modelu GPT-4, ponieważ taka sytuacja może mieć miejsce w
przypadku długich konwersacji, które mogą wpłynąć na zachowanie naszego asystenta.
Myślę, że lepiej będzie można to zrozumieć
w momencie, gdy przełączymy się do trybu Complete.
Tutaj mamy tylko jedno pole na wpisanie naszego promptu.
W praktyce to, że w trybie Chat wygląda to
nieco inaczej, to w rzeczywistości pod spodem działa bardzo podobny mechanizm.
Oznacza to, że jeżeli będziemy mieć tutaj
dużo treści, bądź też sama konwersacja będzie odpowiednio długa, to może mieć to
negatywny wpływ na przewidywanie dalszych tokenów.
W końcu, tak jak już powiedziałem, mamy
tutaj do czynienia z mechanizmem przewidywania kolejnego tokenu.
Oznacza to, że gdy dodam tutaj wiadomość, to w praktyce moje zapytanie będzie
uwzględniało wiadomość systemową, wiadomość, którą przesłałem tutaj,
odpowiedź, którą otrzymałem w tym miejscu
oraz kolejną wiadomość, którą właśnie napisałem.
Także z punktu widzenia modelu nie mamy
tutaj do końca samej konwersacji, ale po prostu tekst, który należy uzupełnić.
W tym przypadku uzupełnienie tego tekstu będzie wyglądało następująco.
Wygląda więc na to, że nadal jesteśmy w kontekście dyskusji.
Jednak jeżeli przebieg tej rozmowy nieco się zmieni i np.
będę chciał, aby asystent stał się pokemonem, to oczywiście zrealizuje moje
polecenie i teoretycznie może to zrobić nawet wtedy, gdy wiadomość systemowa
będzie jasno mówiła o tym, że nie może zmieniać swojej roli.
Taka sytuacja jest zdecydowanie mniej
prawdopodobna w momencie, gdy będziemy korzystać tutaj z modelu GPT-4, który
znacznie więcej swojej uwagi poświęca wiadomości systemowej.
W tej akurat sytuacji może się okazać to mało szkodliwe.
Wyobraź sobie jednak sytuację, w której masz Chat działający na stronie
internetowej, w której użytkownik również twierdzi, że chce zmienić zdanie i np.
rozmawiać z asystentem, który zaczyna go obrażać.
Taka sytuacja zdecydowanie nie powinna mieć miejsca,
w związku z tym warto tutaj korzystać z
modelu GPT-4, aczkolwiek zaznaczam, że tylko ten jeden fakt nie jest
wystarczające, aby uchronić się przed takimi zachowaniami.
Tym bardziej, że czasem takie zachowanie może zostać zmienione nie z wyniku akcji
użytkownika, ale w wyniku wczytania tak zwanego dynamicznego kontekstu, na
podstawie którego nasz model będzie udzielał odpowiedzi.
Taki dynamiczny kontekst może zostać programisty pobierany np.
z jakiejś bazy wiedzy, a wówczas czasem może zdarzyć się tak, że ten dynamiczny
kontekst wpłynie na sposób wypowiedzi naszego asystenta.
Z tego powodu ponownie należy wiedzieć, jak można projektować takie prompty,
które będą w stanie pomimo wszystko realizować założone przez nas zadanie.
Zatem podsumowując tą lekcję musisz
pamiętać o tym, że Playground i API to nieco inna usługa niż ChatGPT.
Jednocześnie prompty,
które projektujesz tutaj, mogą zostać wykorzystane w ChatGPT oraz odwrotnie.
Oczywiście jednak w ChatGPT nie masz tych dodatkowych ustawień i też zdecydowanie
mamy tam mniejszą kontrolę nad zachowaniem naszego asystenta.
Poza tym ChatGPT posiada także kilka zalet.
Jedną z nich jest fakt, że w momencie gdy
będziemy prowadzić dyskusję wewnątrz Playground, to gdy dojdziemy do limitu
tokenów naszego modelu, otrzymamy błąd i zapytanie nie zostanie zrealizowane.
W przypadku ChatGPT w tle będą działać
różnego rodzaju mechanizmy, które umożliwiają nam prowadzenie nawet długich
dyskusji bez obaw o to, że przekroczymy ten limit.
Oczywiście na ten temat będziemy sobie jeszcze mówić,
w związku z tym chciałem tylko jeszcze w
jednym zdaniu podkreślić różnice pomiędzy GPT-4 a GPT-3,5-Turbo, gdzie GPT-4 jest
zdecydowanie mądrzejsze, ale jednocześnie wolniejszy i znacznie droższy.
Model GPT-3,5-Turbo świetnie sprawdza się
do większości zadań i jest jednocześnie szybszy oraz tańszy.
W praktyce na dzień dzisiejszy ja w większości przypadków korzystam z GPT-3,5-Turbo,
a tylko wtedy, gdy rzeczywiście sytuacja tego wymaga
sięgam po model GPT-4.
Z kolei w przypadku ChatGPT praktycznie
zawsze korzystam z modelu GPT-4, ponieważ tam nie muszę obawiać się o koszty ze
względu na to, że wszystko jest uwzględnione tam w stałym abonamencie.
Jeżeli chodzi o tą lekcję to by było na tyle
w związku z tym dziękuję Ci za uwagę i zapraszam do kolejnej.