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 nasza uwaga
będzie skupiona na Prompt Designe, czyli
projektowaniu promptów.
Niewykluczone jednak, że
bardziej znane Ci jest określenie Prompt Engineering.
To właśnie tak określane są stanowiska
osób zajmujących się projektowaniem promptów.
Na potrzeby naszego kursu
dość nieoficjalnie rozróżniam jednak określenie Design od Engineering
ze względu na to, że
moim zdaniem design obejmuje część kreatywną, konkretnie
dotyczącą słów
oraz struktuty promptów.
Mowa tutaj np.
o słowach, które wpływają wprost na
zachowanie modelu oraz jakość generowanych odpowiedzi.
Natomiast w momencie, gdy pojawia się
tutaj programowanie, różnego rodzaju integracje oraz przygotowywanie promptów
np.na potrzeby
trenowania modelu, to moim zdaniem jest to część zdecydowanie bardziej praktyczna
i raczej powinna zostać odróżniona ze względu na to,
że do projektowania dobrych promptów
często nie potrzebujemy programowania.
Ale już jeżeli przyjdzie nam wdrażać system,
który ma się zintegrować z jakąś aplikacją,
no to w tym przypadku sama umiejętność projektowania promptów nie
wystarczy i potrzebna jest np. wiedza dotycząca
pracy z dużymi zestawami danych czy ich
odpowiedniej organizacji i późniejszego wyszukiwania.
Pamiętaj jednak, że w momencie nagrywania tego materiału raczej
posługujemy się określeniem Prompt Engeneering
i jest to raczej nazwa,
którą warto się posługiwać.
Przechodząc teraz dalej, niezależnie od tego, czy programujesz czy nie
powinna być dla Ciebie zrozumiała różnica pomiędzy
różnego rodzaju modelami takimi jak Davinci, GPT-3,5
oraz GPT-4. Pamiętaj jednak,
że mowa tutaj o modelach firmy OpenAI.
Wymieniamy je tutaj z nazwy ze względu na to, że aktualnie są najpopularniejsze
spośród wszystkich dostępnych modeli.
Natomiast na horyzoncie pojawiają się także modele
od firmy Google, takie jak rodzina modeli PaLM 2
ale także szereg modeli offlineowych takich jak np.
najnowszy Falcon.
Dobra wiadomość jest tutaj taka,
że w każdym z tych przypadków mówimy o dużych modelach językowych.
Oznacza to, że wiedza, którą zdobędziesz
w tym kursie, będzie mogła zostać
w mniejszym lub większym stopniu wykorzystana także w
pracy z innymi modelami.
Oczywiście mogą pojawić się pewne różnice,
natomiast fundamenty, przez które przejdziemy sobie w tej oraz kolejnych lekcjach,
przynajmniej do tej pory miały zastosowanie
także w przypadku innych modeli,
które też stopniowo stają się coraz
mądrzejsze, a w związku z tym może się okazać,że
niektóre techniki, którymi będziemy teraz
omijać różne ograniczenia, okażą się już mało przydatne
albo w ich miejsce pojawią się nowe. Tak czy inaczej
wymienione tutaj modele firmy OpenAI różnią się pomiędzy sobą w sposób
znaczący. Przykładowo moją
naukę zacząłem od modelu Text-Davinci-002.
W jego przypadku zderzyłem się z szeregiem różnego
rodzaju ograniczeń, które w nowszych modelach po prostu nie istnieją.
Z drugiej jednak strony już tamten
model był w stanie realizować różnego rodzaju zadania,
takie jak np. wyjaśnianie złożonych pojęć.
I teraz Davinci zapytane o wyjaśnienie
teorii gier w jednym zdaniu jest w stanie udzielić poprawnej odpowiedzi.
Natomiast jeżeli teraz to samo pytanie skierujemy do modelu
GPT-3,5-Turbo
no to jego odpowiedź będzie następująca.
Jak widać nadal mamy tutaj jedno zdanie,
natomiast jest ono zdecydowanie bardziej precyzyjne niż to, które mieliśmy
w przypadku Davinci.
Nadal jest jak najbardziej poprawne aczkolwiek
uwzględnia kilka dodatkowych detali. Nietrudno się więc
domyślić, że w przypadku modelu GPT-4
uzyskamy jeszcze bardziej precyzyjną
i szczegółową odpowiedź.
I teraz aby to wszystko
nabrało tempa, powiem tylko, że model
Text-Davinci-003
został udostępniony mniej więcej w połowie grudnia, natomiast jakieś
3 - 4 miesiące później
mieliśmy już do dyspozycji GPT-4 i wszystkie możliwości,
które się z tym wiążą.
Te kilka miesięcy rozwoju widać bardzo wyraźnie
w tych czerwonych tutaj zdaniach.
I choć modele, z którymi mamy do czynienia
dzisiaj, działają zdecydowanie lepiej i w zasadzie nie ma
czego porównywać, to jednocześnie sposób
projektowania promptów w zasadzie się nie zmienił.
Oczywiście pojawiły się nowe techniki, które będziemy też omawiać w tym kursie,
fundament działania tych modeli pozostał taki sam.
Oczywiście nikt nie wie, czy będzie to obowiązywało także kolejne modele,
natomiast teraz można to
uznać po prostu za prawdopodobne.
W tej chwili mówię o tym tylko po to, aby zaadresować możliwą obawę, którą
możesz mieć, dotyczącą tego szybkiego
tempa rozwoju, które w przypadku tematu AI jest niesamowicie wysokie.
Czyli konkretnie pomimo tego, że
zyskujemy coraz większe możliwości
to w praktyce jest to dobra, a nie zła wiadomość dla osób, które
uczą się tych wszystkich technik już teraz.
Po prostu w miarę pozostawania na bieżąco część
z nich będzie okazała się bardziej istotna, a z innych
będzie można
zrezygnować, ponieważ nie będzie potrzeby ich wykorzystania ze względu na
lepsze działanie modeli.
I teraz mówiąc
o tych wszystkich technikach możemy przez nie
krótko przejść.
Mianowicie przy projektowaniu
promptów zaczynają pojawiać się pewne powtarzalne wzorce, wyrażenia oraz różnego
rodzaju zwroty oraz sekwencje promptów, które prowadzą do znacznie
lepszych wyników niż
pozostałe. Jednocześnie też
niektóre interakcje z modelami, z których prawdopodobnie
już teraz korzystasz
zyskały po prostu konkretną nazwę aby można było je
odróżnić.
No i przykładem takiej interakcji, z której z
pewnością korzystasz, a jednocześnie
posiada pewną nazwę, jest Zero-Shot.
Czyli chodzi tutaj o zwykłe odpowiadanie na pytania.
Czyli zadajemy tutaj pytanie o jakąś konkretną
rzecz i natychmiast uzyskujemy dobrą odpowiedź.
Okazuje się, że modele takie
jak GPT-3.5 czy GPT-4
są niesamowicie dobre w odpowiadaniu na
takie pytania czy w ogóle w rozwiązywaniu problemów,
które nie dostarczają żadnego
dodatkowego kontekstu, jednocześnie korzystając tylko z takich promptów
dość często możemy spotkać się z różnego rodzaju ograniczeniami,
które będą prowadziły do tego, że np.
model pomyli się udzielając nam odpowiedzi.
Przykładem może być zadanie
pytania, podając jakąś określoną nazwę, która może mieć dwa
znaczenia.
Bez dodatkowego doprecyzowania, o co nam chodzi
model z pewnością udzieli nam nieprawidłowej odpowiedzi.
Konkretnymi przykładami
takich promptów będziemy
się jeszcze zajmować.
Natomiast jeszcze raz pamiętaj proszę o tym, że nie zawsze
prompty typu Zero-Shot są skazane na porażkę.
Co więcej, ich odpowiednie zaprojektowanie niejednokrotnie
może być wręcz
niezbędne do tego, aby skutecznie wygenerować jakąś odpowiedź
i ma to związek m.in. z długością samego zapytania i tym samym też związanym z tym
tempem przetwarzania oraz kosztami.
Następnie mamy promty typu
One-Shot i Few-Shot.
Mowa tutaj o zapytaniach, które poza samą
instrukcją bądź pytaniem zawierają także jeden bądź więcej
przykładów pokazujących możliwe
rozwiązania.
Przykładem takiego promptu może być klasyfikacja według konkretnych kategorii,
w ramach której podajemy nie tylko kategorie, do których chcemy
przyporządkować zapytanie przekazane przez
użytkownika, ale także podajemy kilka przykładów
aby pokazać, o co nam chodzi.
W ten sposób modele językowe są w stanie uczyć się na etapie samego promptu i
lepiej dostosować swoje zachowanie do realizowanego zadania.
Oczywiście jest tutaj szereg czynników
które wpływają na skuteczność takich
promptów, natomiast o tym również będziemy sobie jeszcze mówić.
Na ten moment musisz tylko wiedzieć, że poza
zadaniem pytania podanie kilku przykładów jest wprost bardzo wskazane do tego, aby
zwiększyć skuteczność naszego promptu.
Kolejne techniki dosłownie
wchodzą już w temat
teorii umysłu oraz różnego rodzaju zagadnień z innych obszarów psychologii.
Oznacza to mniej więcej tyle, że jako
osoby projektujący prompty warto by było, abyśmy
poszerzali naszą wiedzę także w tematach dotyczących
psychologii. Powiązanie pomiędzy tym jak
działa nasz umysł
oraz jak działają modele typu LLM jest dość oczywiste ze względu
na to, że u podstaw obecnej sztucznej
inteligencji leżą sieci neuronowe, które
są niczym innym jak po prostu modelem neuronów, które występują
w naszym mózgu.
Okazuje się, że w przypadku dużych modeli
językowych, które były trenowane na ogromnych zestawach danych
generowanych przez ludzi, istnieją
także pewne mechaniki oraz zachowania, po które
możemy sięgać przy projektowaniu promptów.
Bezpośrednim dowodem tego, o czym mówię
jest fakt, że
określenia takie jak
Chain of Thoughts czy
Tree of Thoughts mają swoje przełożenie
we wspomnianej teorii umysłu, a teoria umysłu w razie gdyby jeszcze nie była Ci
znana, obejmuje temat modelowania tego, jak działa nasz umysł.
Tak czy inaczej, znowu w szczegóły
będziemy wchodzić tutaj w kolejnych lekcjach, ale wszystkie z wymienionych
tutaj technik skupiają się głównie na tym, aby dać modelowi więcej czasu do namysłu.
Przenosząc to na pewnego
rodzaju przykład jeżeli
damy modelowi do rozwiązania jakiś problem, a on natychmiast udzieli
odpowiedzi, to szansa na to, że się pomyli jest
dość duża. Jeżeli jednak rozbije sobie ten problem
na mniejsze kroki
to robiąc to i wymieniając kolejne kroki jest w stanie wyłapać pewnego rodzaju
błędy logiczne, które doprowadzą go do poprawnej odpowiedzi.
W efekcie przykładowo technika Zero-Shot
Chain of Thoughts polega na tym, aby po zadanym pytaniu bądź opisaniu problemu dodać do
swojego promptu określenie wyjaśnij krok po kroku.
W ten sposób model nie będzie nam udzielał odpowiedzi natychmiast, tylko
będzie dążył do rozwiązania przechodząc przez mniejsze etapy.
I tutaj niezależnie od tego, czy
konkretnie będziesz wykorzystywać
te techniki, po prostu chodzi o to, aby w
miarę możliwości
rozciągać naszą dyskusję z modelem, aby doprowadzić go do najlepszych odpowiedzi.
Oczywiście nie zawsze jest to możliwe
i co więcej też nie chodzi o to, aby wydłużać tą rozmowę w nieskończoność
natomiast odnalezienie tutaj pewnego rodzaju balansu
może okazać się pomocne.
No i właśnie jeżeli chodzi o uzyskanie takiego balansu
to kluczowe okazuje się tutaj
słownictwo, z którego korzystamy, różnego rodzaju wyrażenia
oraz nawet sięganie po pewnego
rodzaju obszary wiedzy,
po które domyślnie model może nie
sięgać. Przykładowo, projektując prompty,
dobrze
jest unikać negacji, czyli zamiast mówić o tym, czego nie chcemy, lepiej dodatkowo podkreślić
to, na czym nam zależy.
Zwykle takie odwrócenie jest możliwe, ale wymaga chwili do namysłu.
Następnie możemy korzystać także z różnego rodzaju definicji.
Przykładowo, jeżeli mam
tutaj problem dotyczący tego, że moje auto nie chce się uruchomić, to
mogę w dalszym prompcie
uwzględnić to, aby odpowiedź była generowana
o możliwie najlepszy strzał
wykorzystując np.
model mentalny Brzytwa Ockhama.
Taki model mentalny mówi o tym, że
zwykle najprostsze rozwiązania
są najlepsze.
Wykorzystując taki model nie
będziemy dążyć do
zgłębiania potencjalnych przyczyn,
ale wskazania tej
możliwie najprostszej.
W ten sposób model odpowie nam, że raczej
chodzi o rozładowany akumulator ze względu na to, że na
podstawie jego bazy wiedzy jest to
najczęstsza możliwa przyczyna
niedziałającego auta.
Oczywiście nie chodzi mi tutaj o ten
konkretny przykład
ale zwróć uwagę jak posługując się
określeniem Brzytwa Ockhama byłem w stanie zawrzeć bardzo rozbudowane informacje
dotyczące
tego, aby skupiać się tylko na możliwie najprostszych rozwiązaniach.
Tutaj wystarczyły mi dwa słowa, a tak musiałbym opisywać to całym zdaniem.
Wyszukiwanie różnego rodzaju definicji czy
synonimów, może okazać
się bardzo efektywne przy projektowaniu zwięzłych,
skutecznych i jednoznacznych promptów. To ostatnie
również ma ogromne znaczenie, ponieważ przy
projektowaniu promptów raczej powinniśmy unikać
dwuznaczności.
Oczywiście w niektórych przypadkach będzie
nam wręcz na tym zależało. Natomiast gdy
będziemy potrzebowali
precyzji, musimy w sposób bardzo bezpośredni wskazać, o co nam chodzi.
Idąc dalej, poza takimi definicjami oraz synonimami
mamy także pewnego rodzaju dość powszechne
określenia, które możemy wykorzystywać
i działają naprawdę dobrze.
Jednym z przykładów takich określeń jest potwierdzenie zrozumienia instrukcji
poprzez napisanie trzech kropek i niczego więcej.
W ten sposób, jeżeli przykładowo
tutaj mówimy modelowi, aby zachowywał się jak
Prompt Engineer
to w odpowiedzi otrzymamy tutaj trzy
kropki, a nie rozbudowany opis tego, na
czym polega jego nowa rola oraz w jaki sposób będzie mógł nam pomóc.
Oczywiście znowu w niektórych przypadkach może to być wręcz wskazane, chociażby w
świetle tego, co powiedziałem przed chwilą na temat dawania
modelowi przestrzeni
do tego, aby się zastanawiał.
Jednak w większości przypadków
będzie nam zależało na tym aby utrzymywać
konwersację możliwie zwięzłe.
Ponownie jest to istotne ze względu na szybkość działania takich promptów oraz
także koszty, które będą generować.
Dodatkowym czynnikiem, który odgrywa tutaj
dużą rolę w przypadku dłuższych
rozmów jest ograniczenie wynikające z
liczby tokenów, które mogą zostać jednorazowo
przetworzone przez model.
Na temat samego ograniczenia tokenów będziemy sobie
jeszcze mówić, ponieważ jest to
niezwykle istotne
natomiast w tym momencie miej po prostu z tyłu głowy to, że do modelu jednorazowo
nie można przekazać nieskończonej
ilości treści. No i
tutaj jeszcze muszę wspomnieć na temat
obszarów wiedzy, czyli zasadniczo
wskazywaniu modelowi tego, o co dokładnie nam chodzi.
Przykładowo jeżeli
zapytam o Embedding to warto tutaj dodatkowo podkreślić,
że chodzi nam o
obszar związany z dużymi modelami językowymi.
Chodzi o to, że słowo
Embedding może mieć wiele
znaczeń, a to może doprowadzić do wygenerowania złej odpowiedzi.
W przypadku jednak, gdy doprecyzuję o co
nam chodzi, szansa na poprawną odpowiedź po prostu rośnie.
Tutaj w temacie obszarów wiedzy, którymi posługuje się model spotkałem się z pewną
ciekawostką, która wydaje się bardzo uzasadniona.
Mianowicie przy projektowaniu promptów możemy posługiwać się nie tylko
konkretnymi definicjami, ale także sposobami wypowiedzi.
Przykładowo są pewne określenia, które
często padają w różnego rodzaju tutorialach, filmach na
YouTubie czy np. .
publikacjach naukowych.
Jeżeli więc chcemy, aby model generował
nam wysokiej jakości odpowiedzi, to dodanie do niego wyrażeń,
które charakteryzują np.
wysokiej jakości materiały edukacyjne, jest po prostu dobrym pomysłem.
Oczywiście to dlaczego takie wydarzenia działają
ma też swoje uzasadnienie techniczne,
natomiast na tym etapie nie będziemy się w nie zgłębiać
ale raczej wystarczy zapamiętać
aby po prostu precyzyjnie określać to, o co nam chodzi, a dodatkowo
też w pewnym sensie
wczuwać się w osobę, która mogłaby potencjalnie udzielać odpowiedzi
i też tym samym kierować uwagę modelu w pewne
miejsca, które mogą zawierać informacje, które mogą okazać się przydatne.
I tym sposobem przeszliśmy już do
ostatniego zagadnienia w tej lekcji czyli różnicy
pomiędzy dopełnieniem a Chatem.
Otóż w sytuacji, gdy mówiłem o
modelu DaVinci
mówiliśmy tutaj o działaniu opartym o uzupełnianie
oznacza to, że przykładowo
zdanie być albo nie model dopełni słowem być, aby uzupełnić to zdanie.
W przypadku nowszych modeli
sytuacja się nieco zmienia i pojawia się
podział na system użytkownika oraz asystenta.
Oznacza to, że projektując
prompty nie mówimy o jednym polu wejścia,
ale trzech polach, które możemy niezależnie
uzupełniać.
Oczywiście znowu tutaj o szczegółach jeszcze będziemy rozmawiać
natomiast ponownie
zapamiętaj, że istnieją różnice pomiędzy wcześniejszymi
wersjami modelu oraz modelami, które aktualnie mamy do dyspozycji
i nie mówimy tutaj tylko o sposobie działania modelu
ale także sposobie
zapisywania promptu.
Ostatecznie musisz tylko wiedzieć, że w
jednym i drugim przypadku mówimy tutaj o
przewidywaniu kolejnego słowa, a więc o mechanizmie takiego autouzupełniania
natomiast modele takie jak GPT-3,5-Turbo
i GPT-4
realizują to po prostu w nieco inny sposób
z punktu widzenia projektowania promptu. Jeżeli chodzi o tą lekcję, to by
było już na tyle.
Podsumowując więc nasza
uwaga w tej i kolejnych lekcjach skupi się
raczej na
projektowaniu promptu, a nie tematach związanych z programowaniem.
Następnie będziemy posługiwać się jedynie nowszymi modelami
aczkolwiek zahaczymy sobie jeszcze o wcześniejsze
modele, aby zobaczyć różnice
w ich działaniu.
Jeżeli chodzi o same techniki projektowania promptów, to szeroko
będziemy o nich jeszcze mówić w kolejnych lekcjach.
Natomiast tak jak już wspomniałem projektowanie
promptów często wykracza poza same
zdefiniowane i sprytne techniki i
wkracza nawet w obszar psychologii, którym
zdecydowanie warto się zainteresować.
No i ostatecznie mamy też samo strukturyzowanie,
promptu, na którym również będzie skupiona
nasza uwaga.
Dzięki za uwagę. I do usłyszenia w
kolejnej lekcji.