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.
W tej lekcji zajmiemy się rozbudowaniem
mechanizmu zapamiętywania o generowanie dodatkowych tagów.
Jest to jedna z technik mająca na celu
zwiększenie skuteczności naszego avatara, aczkolwiek w pierwszej kolejności zależy
mi na tym, aby było dla Ciebie jasne, dlaczego w ogóle chcemy to zrobić.
Mianowicie wynika to z mechanizmu, który
będziemy wykorzystywać do generowania odpowiedzi.
Szczegółowo będziemy przechodzić sobie przez niego w następnych lekcjach.
Natomiast w tym momencie musisz wiedzieć,
że gdy użytkownik wyśle wiadomość, nasz scenariusz będzie zamieniać ją na vector,
analogicznie jak to mieliśmy w tym przypadku.
Jednak w tej sytuacji nie będziemy zapisywać jej w Pinecone.
Aczkolwiek oczywiście możemy w zależności
od tego, jak chcemy zaprojektować nasz avatar.
W każdym razie w tym przypadku Embedding samej wiadomości od użytkownika, zostanie
wykorzystany po to, aby z pomocą Pinecone znaleźć podobne vectory.
Inaczej mówiąc, jeżeli wiadomość od użytkownika będzie poruszała temat
samochodów, to z pomocą Pinecone będziemy w stanie znaleźć podobne informacje.
Co więcej, będziemy mieć tutaj do czynienia z tzw.
wyszukiwaniem podobieństw.
Oznacza to, że nie będziemy szukać tylko w
poszukiwaniu samego samochodu, ale również zestawów danych, które
zawierają nazwy samochodów bądź na przykład informacje o podróży.
Wynik zostanie tutaj zwrócony, będzie posiadał tzw.
scoring, który będzie określał prawdopodobieństwo tego, jak bardzo
zbliżone do przesłanych danych są dane, które zostały zwrócone.
Wykorzystując ten scoring będziemy mogli dodatkowo przefiltrować nasze wyniki, a
następnie w związku z tym, że w metadanych znajdują się identyfikatory recordów,
będziemy mogli pobrać sam tekst, który jest tam przechowywany po to, aby zbudować
kontekst, na podstawie którego GPT3 wygeneruje nam odpowiedź.
Czyli mówiąc teraz w skrócie, gdy użytkownik wysyła wiadomość, zamieniamy je
na vectory i znajdujemy podobne zestawy danych.
Następnie pobieramy tekst i generujemy odpowiedź.
Schemat jest dość prosty, natomiast
największym problemem, z którym z całą pewnością będzie się mierzyć, będzie
wspominany już przeze mnie mieszanie informacji.
Poza samym mieszaniem będziemy też chcieli
zwiększyć szanse na to, aby zostały odnalezione właściwe informacje.
Z tego powodu na etapie zapamiętywania
wykorzystamy możliwość generowania semantycznych tagów, które wygenerujemy na
podstawie informacji przekazanej przez użytkownika.
Aby stało się to dla Ciebie bardziej obrazowe, przejdźmy teraz do Playground.
Napisałem tutaj następujący prompt.
Podaj semantyczne tagi istotne z punktu widzenia SEO dla poniższego tekstu.
Nie bez powodu wykorzystałem tutaj określenie semantyczne oraz SEO.
Jedno i drugie określenie jest bardzo
ściśle powiązane z mechanizmami wyszukiwania i właśnie tym, aby zwiększać
prawdopodobieństwo tego, że użytkownik odnajdzie to, czego szuka.
W naszym przypadku tym użytkownikiem będzie nasz avatar.
Poza samą instrukcją przekazuję również
przykład, w którym zapisuję tekst oraz dodatkowe tagi.
Na tej podstawie GPT3 będzie w stanie
dokładnie wiedzieć, w jakiej formie te tagi ma mi zwrócić.
W tym przypadku nie tylko sugeruję mu sposób zapisu, czyli po przecinku małymi
literami, ale także sugeruje mu zwracanie semantycznych tagów, czyli słów,
które są zbliżone do tego, co zostało zapisane w tekście.
Jeżeli teraz uruchomimy sobie ten prompt, otrzymamy następujący rezultat.
Wygląda na to, że wszystko poszło tutaj
ok, no może poza samym zapisywaniem znaków małymi literami.
W tym przypadku jednak wydaje mi się, że jest to uzasadnione.
Kopiuję zatem ten prompt i przechodzę bezpośrednio do naszego scenariusza.
I tutaj dokładnie w tym miejscu umieścimy
dodatkowy moduł GPT3, a konkretnie akcję Create a Completion.
Wewnątrz niej możemy wykorzystać tutaj
tekst DaVinci 003, a następnie przekazać nasz prompt.
Wewnątrz niego muszę tylko podmienić
fragment, który tutaj mamy na tekst, który zostanie przekazany przez użytkownika.
No i oczywiście na samym końcu usuwam te
wygenerowane tagi i ustawiam wartość max tokens tak aby odpowiedź nie była zbyt
długa, a jednocześnie też aby nie została ucięta w połowie.
Jeżeli chodzi o ten drugi wskaźnik
ustawiam go na 04 czyli powiedzmy umiarkowana kreatywność.
Po zapisaniu zmian mogę zmienić nazwę tego modułu no i upewnić się, że odpowiedź, która
zostanie tutaj wygenerowana zostanie zapisana w Airtable.
Ale dodatkowo wykorzystamy sobie tutaj funkcję
Trim po to, aby przyciąć ewentualne białe znaki.
Jeżeli teraz przejdziemy sobie do
aplikacji Postman i jeżeli teraz wykonamy sobie to zapytanie, to informacja
mam na imię Adam została zapisana w
Airtabeli, a dodatkowo zostały wygenerowane tutaj tagi.
Gdyby tego było mało, to od razu
przeszliśmy tutaj przez proces synchronizacji.
W związku z tym w naszym Pinecone pojawił
się tutaj w moim przypadku już trzeci zestaw informacji.
Jeżeli teraz jeszcze prześledzimy nasz scenariusz, to okaże się, że jeżeli
przejdziemy sobie do historii wykonania to zobaczymy.
W tym miejscu pobraliśmy nazwę recordu oraz tagi i teraz obie te informacje
zostały zapisane jako vector, a następnie przekazane i zaindeksowane w Pinecone.
Co więcej, te tagi nie tylko zostały zapisane
jako liczby, ale także zostały zapisane jako metadane.
Dzięki temu, w momencie, gdy będziemy
zajmować się logiką odpowiedzialną za zwracanie odpowiedzi, będziemy mogli
dodatkowo filtrować te recordy właśnie na podstawie metadanych.
Jeszcze nie jestem pewien, czy w tym kursie będziemy się tym zajmować,
natomiast zależało mi na tym, aby pokazać Ci tą technikę ze względu na to, że sam ją
wykorzystuję i dzięki niej otrzymuję bardziej trafne wyniki.
Natomiast jednocześnie przygotowanie
takiego scenariusza jest odpowiednio bardziej złożone.
W każdym razie na tym etapie jesteśmy w
miejscu, w którym nasz avatar jest w stanie zapamiętywać to, co mu wskażemy.
Zanim zakończymy tę lekcję, dodam tylko
tyle, że przy tworzeniu własnego avatara możesz wykorzystać dokładnie ten sam
mechanizm po to, aby zapamiętywać także samą konwersację.
W ten sposób avatar będzie w stanie nie tylko zapamiętywać to, co mu dokładnie
powiesz, ale także to, o czym z nim rozmawiasz.
Ostatnią rzeczą, o której chciałbym tutaj wspomnieć są opłaty, które są naliczane
nie tylko przy generowaniu odpowiedzi GPT3, ale także przy tworzeniu Embeddingów.
To również jest odpowiedź generowana przez
GPT3, z tą różnicą, że korzystamy tutaj z modelu Text Embedding ada i oczywiście
opłaty są tutaj trochę niższe, ale jednocześnie trzeba o tym pamiętać.
Jest to szczególnie ważne np.
w momencie, gdy przyjdzie Ci do głowy
zaindeksowanie jakiś bardzo dużych ilości danych.
W przypadku którym w pewnym ograniczeniem może stać się także bezpłatny plan Pinecone.
Na takie bieżące potrzeby i własne prywatne użycie,
to co tutaj mamy nie powinno generować dużych kosztów.
Wszystko jednak zależy od intensywności
korzystania oraz oczywiście tego, w jaki sposób zaprojektujesz prompty.
Teraz już dziękuję Ci za uwagę i zapraszam Cię do kolejnej lekcji.