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 zaczynamy tworzenie tabeli Airtabel,
wewnątrz której będziemy przechowywać pamięć avatara oraz bieżącą konwersację.
Na początek usuwam niepotrzebne pola, a typ pierwszej kolumny zmieniam na formułę
i konkretnie przekazuję tutaj funkcję Record ID.
W ten sposób w naszej pierwszej kolumnie
pojawi się identyfikator rekordu i choć dodawany jest on normalnie, automatycznie
w tym momencie jest dla nas bardzo łatwo dostępny.
Tabela, w której pracujemy to pamięć naszego avatara.
W związku z tym zmieniam jej nazwę.
I tutaj zapisuję nazwę widoku jako all.
Dokładnie tutaj będziemy zapisywać
wszystkie informacje, na których będzie pracował nasz avatar.
Zatem mamy tutaj główną treść naszego wpisu.
Bardzo ważne jest tutaj to, aby
poszczególne wiersze nie zawierały więcej niż 500 znaków.
Powodem jest tutaj fakt, że treść tych wierszy będzie łączona ze sobą i stanowiła
kontekst, którym będzie posługiwał się avatar.
Jak już wiesz, długość porompta jest ograniczona.
W związku z tym tutaj również musimy dbać o pewnego rodzaju ograniczenia długości.
Kolejnym polem, z którego będziemy tutaj
korzystać będą tagi, które będzie generować dla nas GPT3.
Tagi będą wykorzystywane po to, aby
łatwiej było zidentyfikować treści powiązane z ewentualnym pytaniem.
W dalszych lekcjach pokażę Ci, co to dokładnie oznacza.
Tymczasem następna kolumna, której tutaj potrzebujemy to kolumna sync.
Będzie to konkretnie checkbox, który będziemy zaznaczać w momencie, gdy
będziemy chcieli, aby nasz avatar zapamiętał jakąś informację.
Powodem istnienia tej kolumny jest fakt,
że oprócz Airtable będziemy wykorzystywać bazę.
Pinecone ta kolumna będzie wskazywała dokładnie na to, które rekordy są
synchronizowane z informacjami znajdującymi się w tamtej bazie.
No i ostatnim elementem będzie możliwość zapominania konkretnych informacji ze
względu na to, że nie wystarczy ich po prostu usunąć.
Powodem ponownie jest tutaj Pinecone
rekordy, które są usuwane z Airtable muszą także zostać usunięte w tej drugiej bazie.
Tworzę teraz tymczasowy przycisk kierujący
do eduweb.pl, natomiast potem będzie on kierował do scenariusza z Make.com.
Ostatnim krokiem w kontekście naszej bazy danych będzie dodanie jeszcze jednego
widoku, wewnątrz którego będą przechowywane wyłącznie te pola, w
przypadku których kolumna sync jest zaznaczona.
Mechanizm ten polega na tym, że jeżeli teraz oznacze jakiś rekord jako gotowy do
zapamiętania, zostanie on przeniesiony do widoku sync.
Tutaj przechwyci go automatyzacja, a następnie doda do niego tagi i
zaktualizuje rekord znajdujący się w Pinecone.
Jeżeli chodzi o możliwość synchronizacji, możemy do niej podejść na dwa sposoby.
Pierwszym z nich będzie wykorzystanie scenariusza Make, który będzie obserwował
nowe rekordy pojawiające się w konkretnym widoku.
Konkretnie mamy tutaj nowy scenariusz i
obserwacje rekordów wewnątrz konkretnej bazy.
No i oczywiście tabeli i w tym przypadku konkretnego widoku.
Niestety ten trigger ma jedną bardzo poważną wadę.
Mianowicie możemy go uruchamiać
maksymalnie co minutę, o ile jesteśmy na płatnym planie make.come.
Jednak uruchamianie tego scenariusza tak często spowoduje bardzo szybkie zużycie
operacji dostępnych w make.com, za które jesteśmy rozliczani.
Z tego powodu ja osobiście wykorzystuję
ścieżkę związaną z automatyzacjami wbudowanymi bezpośrednio w Airtable.
Niestety opcja, z której będziemy korzystać jest opcją płatną.
W związku z tym musimy coś wybrać.
W jednej z poprzednich lekcji wspominałem
jednak o tym, że możesz skorzystać z bezpłatnej wersji airtable.
I za chwilę też pokażę sposób na to, aby to osiągnąć z wykorzystaniem przycisku
podobnego do tego, które mamy w tym miejscu.
To rozwiązanie posiada jednak jedną istotną wadę, o której również będę mówił.
W każdym razie, jeżeli chcemy utworzyć
tutaj automatyzację, wystarczy wybrać zdarzenie, które uruchomi te akcje.
W naszym przypadku będzie to moment, w
którym w danym widoku pojawi się nowy rekord.
Muszę tylko wskazać na tabelę oraz konkretny widok.
No i możemy tutaj przejść dalej.
Jako akcję uruchomimy sobie tutaj skrypt
JavaScript i tutaj tylko w pierwszej kolejności musimy pobrać rekord ID, czyli
identyfikator naszego rekordu, pochodzący bezpośrednio z naszej tabeli.
Teraz musimy zapisać tutaj dosłownie dwie linie.
Będzie to const data input.config.
Następnie wykorzystujemy tutaj funkcję
fetch, do której przekażemy adres kierujący do scenariusza w make, a
następnie dopiszemy do niego identyfikator naszego rekordu.
Jeżeli chodzi o adres, który musimy tutaj przekazać.
Na tym etapie go nie mamy.
W związku z tym na razie zapiszę zmiany i bez uruchamiania automatyzacji tylko
zmienię jej nazwę na sync with Pinecone i wrócę do naszej bazy.
Otrzymuję tutaj ostrzeżenie informujące
mnie o tym, że automatyzacja nie jest aktywna, ale to jest dla mnie w porządku.
W tym momencie mam gotową strukturę bazy, na której będzie pracował nasz avatar.
Później będzie nam potrzebna tutaj jeszcze
dodatkowa tabela, ale do niej będziemy jeszcze wracać.
Teraz dzięki za uwagę i do usłyszenia za chwilę.