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.
Aktualnie prawdopodobnie najbardziej
zaawansowaną i też efektywną techniką jest Tree of Thoughts.
Wykorzystuje ono i rozszerza wszystkie dotychczas omówione przez nas techniki.
Konkretnie, jeżeli weźmiemy sobie pod uwagę ten obrazek, zobaczymy, że mamy tutaj prompty
typu input output, czyli pytanie, odpowiedź oraz prompty typu Chain of Thought, gdzie po prostu
przechodzimy krok po kroku do konkretnego rozwiązania.
Następnie mamy też Self Consistency, który również może być rozszerzony o Chain of Thought.
Wówczas otrzymujemy kilka możliwych rozwiązań, np.
trzy i wybieramy spośród nich to, które pada najczęściej.
I teraz jeżeli chodzi o tą ostatnią
technikę, mamy tutaj do czynienia dokładnie z drzewem decyzyjnym polegającym
na tym, że w pierwszej kolejności rysujemy możliwe scenariusze, potem je rozszerzamy
i pogłębiamy, a następnie każde z nich oceniamy pod różnym kątem.
Tak prowadzona analiza prowadzi nas do
wniosku, który ma największą szansę powodzenia.
Oczywiście, jak nietrudno się domyślić,
zarówno zaprojektowanie, jak i późniejsze wykorzystywanie takiego promptu nie jest
oczywiste, a samo generowanie odpowiedzi wymaga dużo czasu.
Z drugiej jednak strony, jeżeli weźmiemy pod uwagę skuteczność takiego podejścia,
to możliwe, że w wielu scenariuszach będzie ono najbardziej efektywne.
Tym bardziej, że biorąc pod uwagę
abstrakt dokumentu, który pokazywałem przed chwilą dla jednego z testów GPT-4,
wykorzystując nawet Chain of Thought było w stanie rozwiązać tylko 4% zadań.
Natomiast w momencie, gdy zastosowana
została technika Tree of Thoughts, GPT-4 osiągnął wynik na poziomie 74%.
Wydaje mi się, że to jedno zdanie mówi
samo za siebie i zachęca do tego aby eksplorować tą technikę.
Jeżeli chodzi o jej zrozumienie to myślę,
że najlepiej spojrzeć po prostu na ten diagram.
Jak widać mamy tutaj kilka etapów, z czego
początkowy dąży do tego, aby wygenerować możliwe rozwiązania.
Następnie mamy etap, w którym powyższe rozwiązania są pogłębiane i rozszerzane.
W ten sposób po prostu wykorzystując
wygenerowany kontekst odkrywamy możliwe zalety oraz wady każdego z podejść.
No i następnie mamy tutaj etap weryfikacji
czy też ewaluacji każdego z rozwiązań i ocenę ich możliwej skuteczności.
Na samym końcu, mając te wszystkie
informacje oraz wcześniej wygenerowany kontekst, model jest w stanie podjąć
najlepszą z możliwych decyzji, a przynajmniej ją zasugerować.
No to teraz zasadne staje się pytanie, w jaki sposób przełożyć to na praktykę.
Okazuje się, że sytuacja jest tutaj stosunkowo prosta.
Naturalnie tutaj poszczególne prompty
będziemy definiować w zależności od rozwiązywanego problemu.
A jeżeli chodzi o instrukcję systemową, to
w tym konkretnym przypadku jest ona dość krótka,
natomiast możemy ją także rozbudowywać
dokładnie tak, jak robiliśmy to we wcześniejszych przykładach, dołączając np.
kontekst bądź jakieś inne elementy, które pomogą w przeprowadzeniu całego procesu.
Proponuję więc, abyśmy po prostu przeszli sobie przez konwersację, którą tutaj mamy.
Zanim jednak zaczniemy, chciałbym tylko zwrócić uwagę, że akurat tutaj wybrałem
model GPT-4 oraz ustawiłem temperaturę na 0.
Szczerze mówiąc nie widzę problemu z tym, aby przesunąć ją np.
na 0,5 bądź 0,7, aby sprawić, żeby
generowane odpowiedzi były nieco bardziej zróżnicowane i kreatywne.
Pierwsza wiadomość zawiera tak naprawdę opis problemu oraz prośbę o to, aby
wygenerować możliwe scenariusze, które pomogą zrealizować opisany tutaj cel.
Dodatkowo uwzględniłem tutaj zachowanie
zwięzłości, ale jednocześnie zwracanie uwagi na detale.
Oczywiście to ostatnie zdanie nie jest tutaj potrzebne, ponieważ na tym etapie
najważniejsze jest narzucenie kontekstu oraz zachęcenie modelu do tego, aby
wygenerował możliwe strategie rozwiązania problemu.
Czyli w tym momencie nie zależy nam na bardzo szczegółowej analizie, ale bardziej
na rozpoznaniu i zarysowanie możliwych ścieżek.
Szczerze mówiąc, biorąc pod uwagę jakość
tych wypowiedzi jestem pozytywnie zaskoczony.
Konkretnie problem dotyczył tutaj tego, aby w sposób jakościowy i długoterminowy
tworzyć sporo treści w formie kursów wideo oraz materiałów na YouTube.
Zarysowane tutaj strategie dotyczące
outsourcingu oraz współpracy, optymalizacji samego procesu no i wyboru
priorytetów oraz ogólnej optymalizacji są jak najbardziej zasadne.
To wszystko jednak nie jest wystarczające do podjęcia właściwej decyzji.
Zatem w kolejnej wiadomości mówię tutaj o tym, aby model przeanalizował zasugerowane
strategie, ocenił ich potencjał, a także rozważył je pod różnym kątem.
Poza samym opisem, w tym przypadku uwzględniłem także ocenę możliwego
prawdopodobieństwa oraz pewności dotyczącej każdej z możliwych ścieżek.
Tutaj ponownie, zgodnie z oczekiwaniem i też na podstawie wcześniejszego kontekstu,
otrzymujemy analizę każdej z poszczególnych ścieżek.
Każda z nich została odpowiednio oceniona
i posiada swój Success rate oraz poziom przekonania.
No to teraz mając tak sklasyfikowane
strategie, jesteśmy w stanie przejść do kolejnego etapu, który będzie polegał na
tym, aby uwzględnić początkowo wygenerowany opis oraz
dodatkową analizę, którą przeprowadziliśmy w poprzednim kroku, po to, aby pogłębić
każdy ze scenariuszy oraz zarysować ewentualne szanse oraz zagrożenia.
Ponownie otrzymujemy tutaj rozbudowaną odpowiedź, która realizuje nasze zadanie i
jednocześnie wykorzystuje całą naszą wcześniejszą konwersację po to, aby
wygenerować kolejne porcje wartościowego kontekstu.
Ten kontekst i cała wcześniejsza rozmowa
będzie mogła teraz być wykorzystana z powodzeniem po to, aby zdecydować, która z
zasugerowanych strategii jest możliwie najlepsza.
Dokładnie na tym polega ostatni etap naszego procesu, którego efektem jest
uporządkowanie naszych strategii oraz uzasadnienie tego wyboru.
No i końcowa odpowiedź, która w tym
przypadku uwzględnia połączenie pierwszej oraz trzeciej strategii.
W tym momencie, jeżeli przejdziemy sobie
raz jeszcze przez tą konwersację, to widzimy, że zaczynamy od problemu oraz
burzy mózgów dotyczącej możliwych rozwiązań,
następnie przechodzimy przez ocenę każdej
ze strategii pod różnym kątem oraz ich dodatkową ocenę.
Mając te wszystkie informacje możemy przejść dalej i pogłębiać wygenerowane
przez model pomysły, aby dojść do bardziej szczegółowych wniosków.
To wszystko połączone ze sobą umożliwia
spojrzenie na sprawę z wielu różnych perspektyw,
uwzględnienie zarówno różnych możliwości, szans oraz zagrożeń, a następnie wybór czy
też bardziej zasugerowanie opcji, która może sprawdzić się nam najlepiej.
Tutaj ponownie, aby to wszystko sobie zwizualizować, polecam raz jeszcze rzucić
okiem na ten schemat, który jasno pokazuje cały proces i poszczególne etapy, czyli
generowanie, ocenę, rozszerzanie no i podejmowanie decyzji.
Myślę, że w tym momencie powinno być to
już dla Ciebie, przynajmniej do pewnego stopnia zrozumiałe,
natomiast chciałbym dodać tutaj tylko
tyle, że zaprezentowane przeze mnie przykład dotyczy jednego konkretnego
problemu i jak najbardziej może być modyfikowany.
Wystarczy, że będziemy trzymać się tej
ogólnej koncepcji polegającej na przejściu przez te kolejne fazy.
To jakie elementy będą miały miejsce
pomiędzy oraz to jak będzie wyglądał poszczególny etap zależy już tylko od
Ciebie, no i oczywiście od rozwiązanego problemu.
Tutaj jeszcze zanim zakończymy, chciałbym tylko powiedzieć, że oczywiście nic nie
stoi na przeszkodzie, aby wszystkie te poszczególne kroki były dość generyczne i
realizowały cały proces poza wzrokiem użytkownika.
Dla niego efekt końcowy w naszej aplikacji
może być taki, że po prostu zaprezentuje swój problem, a cały proces myślowy
zostanie zrealizowany w tle, a on otrzyma jedynie wynik końcowy.
Coś takiego może mieć miejsce zarówno tej techniki, jak i każdej pozostałej.
To w jaki sposób będziesz projektować swoje prompty oraz jak będziesz podłączać
je do aplikacji oraz oddawać w ręce użytkowników jest bardzo otwartą kwestią.
A teraz chciałbym tylko podziękować za uwagę i zaprosić do kolejnej lekcji.