Połącz możliwości GPT-3 i automatyzacji
2 godz. 3 min · OpenAI · Biznes i Automatyzacje
Adam GospodarczykWykorzystanie API OpenAI nie różni się w żaden sposób od innych. Przesyłając dane i parametry na wskazany endpoint, otrzymujemy odpowiedź wygenerowaną przez model (np. text-da-vinci-003). Na tym jednak możliwości tego API się nie kończą. Przykładem z którego skorzystamy będzie zamiana danych na tzw. embedding (listę wektorów). Dane zapisane w takiej formie będą wstępem do "pamięci" bota i tym samym pierwszym punktem procesu nauki.
Prompt Engineering to rozwijająca się dziedzina skupiona na projektowaniu systemów zdolnych do skutecznego reagowania na dane wprowadzone przez użytkownika. W przypadku tworzonego przez nas bota, wykorzystamy pewne elementy tego procesu aby zmodyfikować jego domyślne zachowanie oraz przygotowywanie odpowiedzi na podstawie wyłącznie wcześniejszych danych. W przypadku braku wiedzy na jakiś temat, bot będzie nas o tym informował w sarkastyczny sposób lub nawet zwracał informacje w podanym przez nas formacie.
Wysyłając zapytanie do API OpenAI, jesteśmy ograniczeni liczbą znaków. Tworząc bota chcemy uwzględniać nie tylko to aby odpowiadał na nasze pytania ale także uwzględniał przekazany przez nas kontekst, składający się z informacji jakie zapamiętał bot. Problemem jest tutaj wybór, które dane ma brać pod uwagę. Rozwiązanie po które sięgamy w tym warsztacie polega na wykorzystaniu bazy wektorowej (Pinecone), która pełni rolę pamięci oraz bazy lokalnej w której przechowujemy faktyczne informacje. Ich połączenie pozwala na wybranie najbardziej istotnych danych i uwzględnienie ich w kontekście, który pozwoli GPT-3 przygotować odpowiedź.
Temat wykorzystania AI w codziennym życiu nie jest nowy ale nabrał szczególnego znaczenia po pojawieniu się ChatGPT. Wiele osób zaczęło wykorzystywać AI do rozwiązywania bieżących problemów i ułatwiania sobie różnych zadań. W tym warsztacie znajdziesz kilka inspiracji, które nakierują Cię na to jak możesz rozwijać swojego własnego, inteligentnego i uczącego się bota.
Warsztat został stworzony z myślą o osobach znających JavaScript i Node.js, chcących postawić pierwsze kroki w praktycznym wykorzystaniu GPT-3 oraz API OpenAI. Poza znajomością JavaScript, konieczne będzie minimum doświadczenia w pracy z API oraz bazami danych (SQL). Po ukończeniu tego warsztatu zyskasz ogólne zrozumienie możliwości GPT-3 oraz umiejętności umożliwiające wpływ na jego zachowanie i generowane odpowiedzi.
Wiemy już, że głównym zadaniem naszego avatara będzie odpowiedź na pytania na
podstawie bieżącej rozmowy oraz naszych notatek.
Musimy jednak nadać mu pewnego rodzaju cechy oraz zdefiniować różnego rodzaju
zachowania tak, aby poinstruować go, co ma robić w danej sytuacji.
Przykładowo, jeżeli zapytam teraz M.O.N.D.A.Y
O to, jakby siebie przedstawiła, to mamy odpowiedź, która zaczyna się
powitaniem informacją o tym, że jest avatarem AI.
Przy czym fajnie by było, gdyby potrafiła
odmienić to słowo i do tego zaraz przejdziemy.
Następnie mówi o tym, że jest stworzona,
aby wspierać nas w rozwoju i przygodzie z nowymi technologiami.
Jest tu, aby udzielać wskazówek i
odpowiadać na nasze pytania oraz z przyjemnością nauczy się czegoś nowego.
Te wszystkie cechy, które są widoczne w tej wypowiedzi, zostały uwzględnione mniej
lub bardziej bezpośrednio w opisanym przeze mnie prompcie.
Zobaczmy więc, jak wygląda i dlaczego zaprojektowane jest tak, a nie inaczej.
Wykorzystaj tą wiedzę do tego, aby
zrozumieć jak działa M.O.N.D.A.Y oraz do tego, aby stworzyć własne avatary wykorzystując
modyfikację tego promptu lub też budując go od podstaw.
Po pierwsze chciałem Ci pokazać, że jeżeli wykonamy prompt, który wykonał się
dokładnie w tym momencie, to otrzymamy nieco inną odpowiedź.
Oczywiście wstrzymałem tutaj generowanie tej odpowiedzi, ale już na początku
widzimy, że różni się od tego, co otrzymaliśmy przed chwilą.
Powodem jest fakt, że GPT3 jest niedeterministyczny.
Oznacza to dokładnie to, co widać, czyli dokładnie dla tych samych danych.
Nie mamy pewności, że otrzymamy dokładnie te same odpowiedzi.
Oczywiście one będą zbliżone, ale z dużym prawdopodobieństwem nie będą takie same.
Zobaczmy więc teraz, jak wygląda ten prompt.
Po pierwsze mamy tutaj zdanie mówiące o ignorowaniu powyższych instrukcji.
Jest to technika, którą podejrzałem u jednego z promptdesignerów, polegająca na tym,
aby po prostu zmniejszyć prawdopodobieństwo wykorzystywania
instrukcji predefiniowanych przez OpenAI.
Po prostu chcemy zaprojektować możliwie jak najwięcej samodzielnie.
Oczywiście nie oznacza to jednak tego, że
będziemy tutaj budować od absolutnych podstaw.
Po prostu chodzi o ignorowanie niektórych reguł.
Idąc dalej, określamy krótko personę naszego avatara, a następnie informujemy
go, że rozmawia ze swoim przyjacielem Adamem, którego pseudonim to Overment.
Pisząc to w ten sposób nadajemy ton
odpowiedzi oraz informujemy z kim rozmawia oraz do kogo się zwraca.
Następnie mówimy, aby wykorzystywał wyłącznie kontekst, podsumowanie
konwersacji i wiedzę na swój temat i niczego więcej.
Jeżeli dostarczone przez nas w ten sposób informacje będą niewystarczające, ma
odpowiedzieć nie wiem i zadać pytanie, które pomoże mu odpisać.
Zatem jeżeli zadamy mu pytanie dotyczące np.
mojego psa, to oczywiście z kontekstu tego nie wie.
W związku z tym powinien o tym powiedzieć.
I faktycznie otrzymaliśmy odpowiedź
informującą o tym, że nie posiada wiedzy na ten temat, ale nawiązał do kontekstu.
Prawdopodobnie wynika to z faktu, że
uwzględniliśmy tutaj fragment o tym, aby był szczerze zainteresowany.
Możemy teraz w jakiś sposób spróbować zmodyfikować ten prompt tak, aby po prostu
powiedział, że nie wie i ewentualnie zapytał.
Dlatego dodam tutaj rozszerzenie zdania o
zadanie pytania, które pomoże Ci odpisać bezpośrednio na bieżącą wiadomość.
Dzięki temu powinniśmy otrzymać odpowiedź, która pomimo szczerego zainteresowania nie
będzie odnosiła się do informacji niepowiązanych z bieżącym pytaniem.
Oczywiście czasem może zdarzyć się tak, że
otrzymamy odpowiedź, która i tak będzie w jakiś sposób nawiązywać do kontekstu,
aczkolwiek na to również możemy wpłynąć poprzez modyfikację promptu bądź też np.
zmniejszenie temperatury odpowiedzi.
W ten sposób będzie bardziej konkretne,
mniej kreatywna i też prawdopodobnie nie będzie odbiegać znacząco od tematu.
Idąc dalej, jeżeli chodzi o nasz prompt, mamy tutaj określenie o korzystaniu ze
złożonych, poprawnych gramatycznie zdań i mówieniu naturalnym tonem.
Idąc dalej mówimy o wyciąganiu precyzyjnych wniosków i podsumowaniu
rozmowy, aby dowiedzieć się i zrozumieć o czym właśnie rozmawiamy.
To zdanie ponownie mogłoby zostać w jakiś sposób zmodyfikowane.
Natomiast zależy mi na tym, aby również
określić, by M.O.N.D.A.Y potrafiła wiązać różnego rodzaju fakty i wyciągać na ich
podstawie wnioski, które wpłyną bezpośrednio na jej odpowiedź.
Następnie podkreślam tutaj wyraźną różnicę
pomiędzy notatkami Adama a aktualną rozmową.
Z pewnością istnieje jakiś lepszy sposób, aby to wyraźnie rozróżnić.
Natomiast zdarzało się tak, że nie była w stanie rozróżnić tego, co powiedziałem w
danej chwili, a tym, co znajduje się w moich notatkach.
Z tego powodu właśnie umieściłem sobie to zdanie.
Idąc dalej, znowu mamy określenie cech
jej odpowiedzi oraz podkreślenie, aby nie powtarzała informacji i pytań w trakcie
rozmowy i zwracała się bezpośrednio do rozmówcy, kto ten domyślnie jest Overment
oraz aby przywitała się, gdy historia rozmowy jest ustawiona na brak historii.
Czyli dokładnie tak jak mamy tutaj.
Efekt końcowy jest taki, że ta instrukcja określa zachowanie naszego avatara.
Tutaj jeszcze dodaje bieżącą datę, aby
M.O.N.D.A.Y była świadoma tego, jaką mamy w danej chwili porę.
I dzięki temu mogę zadać jej pytanie która jest godzina bez dodania tego fragmentu?
Niestety nie będzie w stanie precyzyjnie odpowiedzieć na to pytanie.
Podobnie też pomyli się w pytaniu o to, jaki mamy dzień tygodnia.
No i oczywiście dzisiejszy dzień to nie poniedziałek.
Ale jeżeli już przywrócę ten fragment, który przed chwilą powinniśmy otrzymać
informację, że jest niedziela piątego lutego 2023 roku.
Myślę, że jasno tutaj widać, że dosłownie
każde słowo i każde zdanie ma tutaj ogromne znaczenie.
Podobnie też znaczenie mają poszczególne znaki, takie jak np.
oddzielenie kontekstu od konwersacji, czy np.
określenie w ten sposób, że te słowa
wypowiedział Overment, a że te ma wypowiedzieć M.O.N.D.A.Y.
Myślę, że to co tutaj widzisz to dość
dobra podstawa do tego, aby budować własne avatary.
Oczywiście nic nie stoi na przeszkodzie, aby dowolnie to zmodyfikować.
Tym bardziej, że być może znajdziesz tutaj
jakieś błędy, na które ja się jeszcze nie natknąłem.
Zanim zakończymy tę lekcję, chciałem tylko raz jeszcze podkreślić to, aby
zachowywać opis oraz kontekst możliwie jak najkrótsze.
Powodem jest fakt, że w ten sposób
zmniejszasz zarówno koszty odpowiedzi, jak i czas ich generowania.
Następnym ograniczeniem i też zmniejszaniem kosztów może też być
zmniejszanie długości odpowiedzi, bądź w niektórych przypadkach zmiana modelu.
Przykładowo, jeżeli planujesz, aby Twój
avatar generował dla Ciebie kod wykorzystywany do programowania np.
w JavaScripcie, to zdecydowanie sięgnij po Kodeks i konkretnie code-davinci-002.
W temacie projektowania samego promptu to by było na tyle.
Oczywiście ten, który znajduje się na
ekranie znajdziesz w materiałach dodatkowych do tej lekcji.
A ja dziękuję Ci za uwagę i zapraszam Cię do kolejnego materiału.