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 jednej z poprzednich lekcji wspominałem,
jak ogromną rolę przy projektowaniu promptów odgrywa odpowiednia struktura,
separatory czy dobieranie konkretnych słów.
Wspominałem także o tym, że na pewnym etapie do gry wchodzą także zagadnienia z
pogranicza psychologii czy bezpośrednio z niej.
Przykładowo mamy tutaj teorię umysłu,
czyli model dążący do tego, aby opisać działanie naszego umysłu.
Elementy tej teorii, takie jak Train of thought
czyli po prostu powiązania pomiędzy myślami prowadzące nas do konkretnych
wniosków, mogą być także wykorzystywane przy projektowaniu promptów oraz
tworzenia ogólnych technik i zasad ich projektowania.
No i tutaj konkretnie mamy główny temat
naszej lekcji, czyli Chain of thought łańcuch myśli.
W opisie, który znajdziemy na stronie Wikipedii zawarte jest tutaj bezpośrednie
nawiązanie do Train of thought, o którym wspominałem przed chwilą.
I choć domyślam się, że już na tym etapie możesz wiedzieć o co tutaj chodzi, tym
bardziej, że mamy tutaj podane przykłady, które jasno to sugerują
natomiast zobaczmy teraz, jak to wypada w praktyce przy projektowaniu promptów.
Mamy tutaj bardzo prosty prompt dla asystenta
nie posiadający żadnych dodatkowych
instrukcji. Użytkownik zadaje pytanie dotyczące jego strony internetowej, a
konkretnie polepszenia doświadczeń użytkownika oraz zwiększenia konwersji.
Można więc powiedzieć, że jest to taki
typowy przykład tego, jak wykorzystujemy ChatGPT.
Po prostu otwieramy nową konwersację i zadajemy pytanie.
No i teraz w takim scenariuszu oczywiście
odpowiedź, która zostaje tutaj wygenerowana z jednej strony jest jak
najbardziej poprawna, ale szczerze mówiąc jest jednocześnie bardzo ogólna.
Oczywiście mógłbym tutaj kontynuować tą konwersację i np.
pytać o pogłębienie poszczególnych punktów, natomiast jako zwykły użytkownik
prawdopodobnie bym się zniechęcił i po prostu uznał, że odpowiedzi ChatGPT są co
prawda imponujące, ale mało użyteczne w praktyce.
Jeżeli jednak przejdziemy teraz do
drugiego przykładu, który wykorzystuje Chain of Thought, to zobaczymy, że instrukcja jest
po pierwsze znacznie bardziej rozbudowana oraz dodatkowo bardzo precyzyjnie prowadzi
model przez pewien schemat myślenia, który wpływa na jego zachowanie.
Nasz prompt zaczyna się od opisania roli, w którą ma wcielić się asystent.
W ten sposób doprecyzowujemy jego zakres
specjalizacji oraz także tworzymy bezpośrednie powiązanie pomiędzy np.
pewnymi słowami kluczowymi, które mogą mieć wiele znaczeń, ale w tym przypadku
zostaną potraktowane właśnie przez pryzmat tej roli.
Następnie mamy tutaj instrukcję, która
określa rolę naszego asystenta i to, w jaki sposób ma się zachowywać.
Samą instrukcję dopełnia także kontekst wyjaśniający to, w jakiej sytuacji
znajduje się użytkownik oraz asystent oraz co jest celem tej dyskusji.
W dalszej części naszego promptu zwykle znajdowały się przykłady pokazujące
oczekiwane zachowanie naszego asystenta, bądź np.
to, w jaki sposób ma formatować swoje odpowiedzi.
W tym jednak przypadku sytuacja wygląda nieco inaczej.
Jak widać mamy tutaj pewnego rodzaju ciąg myśli, który przeprowadza model przez
pewien schemat tego, w jaki sposób ma się zachowywać.
Nie podajemy tutaj bardzo konkretnych
przykładów, ale jedynie sugerujemy pewnego rodzaju zachowania, które mogą być
wskazane do tego, aby jak najlepiej zaadresować problem użytkownika.
Oczywiście prefiksy, które tutaj mam w postaci Chain 1, Chain 2 itd.
Są tutaj opcjonalne i wykorzystuję je tylko na potrzeby naszego przykładu.
Nie zmienia to jednak faktu, że po
uruchomieniu tego promptu od razu widzimy, że zadanie nawet dokładnie tego
samego pytania, które mieliśmy wcześniej, wprost zmienia zachowanie modelu, który
tym razem nie dąży do udzielenia bezpośredniej odpowiedzi, ale zadaje nam
serię pytań, aby dowiedzieć się więcej na temat naszego przypadku.
Oczywiście to, jak precyzyjnie na nie
odpowiemy, będzie miało dalszy wpływ na prowadzoną dyskusję.
Uwzględniłem więc tutaj takie niezbędne minimum informacji, o które zostałem
zapytany, a następnie asystent przeszedł do sugerowanych rozwiązań.
Jak widać, tym razem są to jednak dostosowane do mojego przypadku sugestie,
które zawierają także dodatkowy opis powiązany bezpośrednio z moim problemem.
W ten sposób pomoc ze strony modelu jest
zdecydowanie lepsza niż mieliśmy to wcześniej.
Tym bardziej, że nic nie stoi na
przeszkodzie, aby wybrać jeden z tych tematów i kontynuować konwersację.
Tutaj zauważ, że na samym końcu oprócz samych sugestii zostały uwzględnione nawet
rekomendacje książek oraz kursów, które mogą okazać się dla mnie pomocne.
Oczywiście przykład promptu, który tutaj
mamy, został stworzony tylko na potrzeby tej lekcji.
Oddaje jednak ogólną koncepcję projektowania promptów, które prowadzą
model według konkretnego schematu myślenia.
Co więcej, taki ciąg myśli możemy zastosować nie tylko w wiadomości
systemowej, ale także poprzez rozpoczęcie konwersacji.
Konkretnie teraz ignorując na chwilę
wiadomość systemową, moglibyśmy zaprojektować naszą aplikację, aby
rozpoczynała się predefiniowaną konwersacją.
Taka konwersacja nie musi być widoczna dla użytkownika, który
po prostu może przyjść do naszej aplikacji
i zwyczajnie się przywitać bądź zadać pytanie.
Natomiast te wcześniejsze zdefiniowane przez nas
wiadomości nadają już ton dla bieżącej rozmowy.
W ten sposób również jesteśmy w stanie
prowadzić model, podobnie jak w przypadku Chain of Thought.
W tym momencie zbliżyliśmy się już do końca tej lekcji,
w związku z tym chciałbym podsumować temat Chain of Thought.
Jak widać, chodzi tutaj wyłącznie o to,
aby prowadzić model przez pewnego rodzaju schemat myśli, który ma bezpośredni wpływ
na zachowanie modelu przy generowaniu odpowiedzi.
W ten sposób jesteśmy w stanie nie tylko sprawiać, aby zachowywał się według
określonych przez nas zasad, ale także aby zwiększyć jego ogólną skuteczność.
W przykładzie, który zaprezentowałem, ta
skuteczność polegała na tym, aby w pierwszej kolejności zebrać niezbędne
informacje od użytkownika i dopiero potem przejść do rozwiązania.
Oczywiście scenariuszy, w których Chain pof Thought może być pomocne, jest zdecydowanie więcej.
Co ciekawe, nic także nie stoi na przeszkodzie, aby Chain of Thought zastosować podczas konwersacji.
Wówczas wyobraź sobie sytuację, w której
rozwiązujesz jakiś złożony problem i na ten moment masz zrealizowane trzy kroki i
potrzebujesz wsparcia przy realizacji kolejnego.
Wówczas możesz po prostu opisać swój schemat dotychczasowego myślenia czy
działania i po prostu poprosić model, aby uzupełnił dla Ciebie kolejny krok.
Przekładając to na nieco bardziej
praktyczny przykład wyobraź sobie, że spotykasz jakiś problem np.
z oprogramowaniem i aby go naprawić
podejmujesz kilka rozwiązań, które nie działają.
W momencie, gdy tracisz już wszelką nadzieję i otwierasz ChatGPT, zamiast po
prostu opisywać swój problem, możesz dołączyć także opis podjętych przez Ciebie
działań oraz rezultatów, które Ci przyniosły.
W ten sposób nie tylko sprawiasz, że model
nie będzie Ci sugerował rozwiązań, które masz już za sobą, ale także nadajesz
dodatkowe kontekst, który może zwiększyć prawdopodobieństwo tego, że otrzymasz
rozwiązanie, które rzeczywiście rozwiąże Twój problem.
Mam nadzieję, że technika Chain of Thought
jest dla Ciebie już przynajmniej w pewnym stopniu zrozumiała i możemy przejść dalej.
W związku z tym dziękuję za uwagę i do usłyszenia za moment.