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.
Zanim przejdziemy do funkcji, w której nasz avatar będzie w stanie odpowiadać,
musimy także zadbać o to, aby umożliwić mu zapominanie niektórych informacji.
W związku z tym, że posługujemy się Airtable, wykorzystamy kolumnę dostępną tutaj
i umieścimy wewnątrz niej adres Webhooka kierującego do naszego scenariusza i
przekażemy do niego parametr Type ustawiony na forget oraz drugi parametr
oddzielony znakiem & o nazwie recordID.
W ten sposób będziemy w stanie dynamicznie przekazać identyfikator recordu.
I możemy to zrobić umieszczając znak &,
ale po zakończeniu ciągu znaków, a następnie podając wartość pola RecordID.
W ten sposób pod tym przyciskiem znajdzie
się adres kierujący bezpośrednio do naszego scenariusza z dodatkowym
parametrem forget i oczywiście podstawionym identyfikatorem Airtable .
Oczywiście w tym momencie nic się nie
wydarzyło i nawet jeżeli przejdziemy sobie do historii naszego scenariusza, to
zobaczymy, że jego wykonanie zakończyło się dokładnie tutaj.
Musimy więc tutaj rozwinąć nasz scenariusz o dodatkową ścieżkę, która będzie
obsługiwała sytuację, w której Type będzie ustawiony na Forget.
Wówczas możliwe będzie wykonanie zapytania HTTP na adres kierujący bezpośrednio do
naszej bazy, a następnie na Endpoint Vectors/delete?ids=
no i nasz identyfikator recordu.
Typ zapytania ustawiamy na POST oraz nagłówek Api-key.
Ustawiamy na wartość, którą mieliśmy tutaj wcześniej
no i teraz możemy zapisać zmiany i tylko zmienić nazwę naszego modułu.
I teraz możemy przetestować ten mechanizm.
W pierwszej kolejności przejdę tutaj do Airtable, a następnie do aplikacji Postman
z pomocą której raz jeszcze utworzę sobie wcześniej tworzony record.
Oczywiście zadbałem też o to, aby wcześniej go usunąć.
Rzeczywiście pojawił się w naszej bazie, a dodatkowo został synchronizowany z Pinecone
jeżeli jednak teraz wcisnę przycisk
Forget, to otrzymałem informację, że dane zostały przesłane do scenariusza.
Mamy tutaj potwierdzenie, że rzeczywiście zostały otrzymane.
No i jeżeli teraz przejdziemy sobie do panelu Pinecone, to mamy tutaj
potwierdzenie, że wszystkie zawarte w nim dane zostały usunięte.
Wygląda więc na to, że nasza akcja działa, ale musimy zrobić coś jeszcze.
Mianowicie konieczne będzie usunięcie
recordu z Airtable poprzez podanie jej bezpośrednio jego identyfikatora.
No i w tym momencie możemy zwrócić
odpowiedź, która w tym przypadku będzie zwykłym tekstem z dodatkowym nagłówkiem
ustawiona na tekst HTML z dodatkowym nkodowaniem UTF8.
W ten sposób, jeżeli raz jeszcze usuniemy ten record, otrzymamy potwierdzenie, że
record został usunięty i zniknie on także z naszego Airtable.
Zatem wszystko wygląda teraz w porządku i
nasz avatar jest w stanie zapominać określone przez nas informacje.
Zanim zakończymy, chciałbym tylko jeszcze zwrócić uwagę na pewien szczegół.
Mianowicie w tym momencie doprowadziliśmy do sytuacji, w której gdy będziemy
aktualizować jakiś record, czyli zaznaczymy tutaj checkbox Sync, to w
przypadku tego scenariusza zostanie uruchomiona ta górna ścieżka.
Rzecz w tym, że jeżeli zaktualizujemy treść
recordu w Airtable , wygenerowane wcześniej dla niego tagi przestaną być aktualne.
Z tego powodu musimy zadbać o to, aby
generowanie tagów odbywało się dokładnie tutaj.
W związku z tym dodam tutaj jeden moduł, aby nie rozerwać połączenia.
Następnie rozłącze tutaj te moduły i przeniosę go w to miejsce.
Teraz połączę te dwa moduły i usunę ten.
W takiej sytuacji to co muszę tutaj zrobić to z tego miejsca usunąć nasze tagi.
A następnie muszę upewnić się, że tagi
wygenerowane w tym miejscu zostaną uwzględnione tutaj.
I oczywiście wykorzystam jeszcze funkcję Trim oraz rezultaty zwrócony przez GPT3.
Tą samą wartość kopiuję w to miejsce no i zapisuję zmiany.
Następnie same tagi musimy wykorzystać
także w tym miejscu oraz oczywiście zapisać w Airtable dokładnie tutaj.
No i teraz, jeszcze przed zapisaniem zmian musimy upewnić się, że w tym module
content jest ustawiony dokładnie na wartość pochodzącą z Airtable.
Po zapisaniu tych zmian możemy zapisać scenariusz oraz utworzyć raz jeszcze nowy
record i tym razem zostanie zapisany w Airtable bez tagów.
Aczkolwiek one za chwilę się pojawią.
No i mamy tutaj wygenerowane tagi.
Aczkolwiek możemy się sprzeczać co do tego, czy należy zoptymalizować nasz
prompt, aby zwracał nieco bliższe tagi na podstawie przekazanej treści.
Wygląda na to, że wszystko działa, więc możemy przejść do kolejnej lekcji.