Technologia

Użyliśmy GPT4 podczas hackathonu. Oto, czego się nauczyliśmy

  • 12 maja, 2023
  • 11 min read
Użyliśmy GPT4 podczas hackathonu.  Oto, czego się nauczyliśmy


Niedawno przeprowadziliśmy nasz pierwszy hackathon od dłuższego czasu.

Przez dwa dni nasz zespół pracował w grupach nad różnymi tematami. Pod koniec mieliśmy 12 wersji demonstracyjnych do udostępnienia reszcie zespołu. Obejmowały one ulepszenia debugowania odpowiedzi na żądania HTTP po wspaniały „automatyczny program do udostępniania łupów”.

W naszych grupach wielu z nas próbowało zintegrować się z GPT OpenAI, aby zobaczyć, jakie inteligentne rozwiązania moglibyśmy wnieść do naszego produktu. Ponieważ sztuczna inteligencja, a w szczególności ChatGPT, była tak aktualna, mieliśmy wiele różnych rzeczy, które chcieliśmy wypróbować, w tym:

  • Automatyczne generowanie podsumowań incydentów na podstawie wiadomości wysyłanych w kanałach Slack.
  • Zezwalanie użytkownikom na używanie języka naturalnego do opisywania filtrów, których chcą w naszych funkcjach Statystyki, Incydenty lub Kontynuacje.
  • Możliwość rozmowy z naszym Slackbotem za pomocą naturalnego języka bez konieczności znajomości dokładnych poleceń.
  • Automatycznie sugeruj niestandardowe pola, które wydają się dotyczyć incydentu.
  • Zautomatyzuj przekazywanie incydentów dzięki kontekstowym podsumowaniom dla użytkownika dołączającego do incydentu.

Czat próbny GPT-4

Przed hackathonem jeden z naszych inżynierów, Lawrence, próbował już użyć GPT4 w naszym produkcie: stworzył sposób automatycznego generowania podsumowań incydentów na podstawie aktualizacji każdego incydentu.

Ten kod z flagą funkcji, który jest już w produkcji, można uruchomić za pomocą przycisku na pulpicie nawigacyjnym.

Lawrence zbudował również interfejs wiersza poleceń (CLI), który umożliwiał pobieranie odpowiedzi na monit dotyczący danego incydentu. Dzięki temu mieliśmy krótką pętlę informacji zwrotnych do przetestowania, co pozwoliło nam szybko powtarzać monity.

Przyszliśmy na hackathon z kilkoma pomysłami na to, jak możemy wykorzystać sztuczną inteligencję, niektóre z nich zostały szczegółowo opisane powyżej.

Naszym pierwszym celem było zaktualizowanie istniejącego kodu Lawrence’a, aby korzystał z GPT4, więc korzystaliśmy z najnowszego i najlepszego rozwiązania OpenAI. Inny inżynier, Rob, podjął się tego zadania, podczas gdy mój kolega Aaron i ja zaczęliśmy razem hakować podpowiedzi jako weryfikację słuszności naszych różnych pomysłów.

Początkowo chciałem oprzeć się na podsumowaniach incydentów Lawrence’a, aby zrobić dwie rzeczy: stworzyć bardziej szczegółowe podsumowania i dostosować je do konkretnych użytkowników, aby móc powiedzieć coś w stylu: Wygeneruj podsumowanie dotychczasowego incydentu dla Rory’ego. Rory jest inżynierem, który przejmuje kontrolę nad tym incydentem.

W ten sposób mieliśmy nadzieję, że otrzymamy podsumowanie, w którym dopracujemy szczegóły techniczne i dostarczymy odpowiednich informacji, abym mógł dołączyć do incydentu i zacząć.

Aby uzyskać te dodatkowe szczegóły, chciałem zacząć pobierać pełne kanały Slack, a nie tylko aktualizacje incydentów. Aby rozpocząć od tego na podstawowym poziomie, po prostu zaznaczyłem cały testowy kanał Slack i skopiowałem/wkleiłem wyniki do monitu GPT4. Uporządkowałem formatowanie za pomocą zabawnej edycji z wieloma kursorami i byłem gotowy do pracy.

Monit był następujący:

Utwórz wiadomość powitalną dla Rory’ego, który przejmie obowiązki Milhouse’a, aby rozwiązać incydent.

Dla kontekstu Rory jest inżynierem produktu, a Milhouse jest inżynierem produktu.

Powinieneś przedstawić kontekst tego, co Milhouse robił podczas incydentu.

Powinieneś podsumować to, co wydarzyło się do tej pory i dać Rory’emu kontekst, jakiego potrzebuje:

Nazwa incydentu to: „Nasza aplikacja wielokrotnie ulega awariom”

Rozmowa na Slacku wygląda następująco:

Warto przeczytać!  Wyprzedaż na Amazon: Amazon Blockbuster Value Days 2023: duże zniżki na zegarki, tablety, głośniki i akcesoria do aparatów

incydent.io APP 12:46 dołączył #inc-2023-04-04-a-badacz-bezpieczeństwa-znalazł-dwa-drobne-problemy-bezpieczeństwa-an wraz z Milhouse … … i tak dalej

Wraz z tym monitem otrzymałem następującą odpowiedź:

Witaj Rory! Firma Milhouse pracuje nad rozwiązaniem incydentu „Nasza aplikacja wielokrotnie się zawiesza”.

O 13:39 zdarzenie asynchroniczne spowodowało błąd, który spowodował wyłączenie jednej z hamowni Heroku, co z kolei spowodowało efekt „trującej pigułki”, który spowodował wyłączenie całej naszej aplikacji.

Jednak wdrożyliśmy poprawkę, która szybko wykryła błąd i zapobiegła jego ponownemu wystąpieniu. Wprowadziliśmy również ulepszenia w konfiguracji naszej aplikacji i infrastruktury.

Oto aktualizacje incydentów: o 16:26 zatrzymaliśmy wyzwalacze i zegary oraz rozpoczęliśmy czyszczenie wiadomości. O 17:08 Alex wdrożył poprawkę, która uniemożliwiła ponowne wystąpienie tego błędu. O 17:22 oddzieliliśmy nasze hamownię sieciową i robotniczą i teraz testujemy ją na inscenizacji.

Poinformuj Lawrence’a, jeśli potrzebujesz pomocy.

W tym momencie byłem całkiem zadowolony z odpowiedzi na około 20 minut pracy. Jednak nie wszystko poszło gładko. Użyłem GPT3.5 Turbo do tego żądania, a wygenerowanie każdej odpowiedzi zajęło około 30 sekund — niezupełnie akcja „Wylogowuję się i muszę to szybko przekazać” w czasie rzeczywistym, której szukałem.

Dodatkowo, zanim otrzymałem tę odpowiedź, musiałem wykonać nietrywialne przycinanie wiadomości Slack. Miałem nadzieję, że po prostu wkleję całą rozmowę, która zawierała kilkaset wiadomości, ale OpenAI ma koncepcję „limitu tokenów”, który ogranicza liczbę znaków, o które możesz poprosić.

Czym są tokeny?

Tokeny można traktować jako fragmenty słów. Zanim interfejs API przetworzy monity, dane wejściowe są dzielone na tokeny. Te tokeny nie są cięte dokładnie tam, gdzie słowa zaczynają się lub kończą — tokeny mogą zawierać końcowe spacje i słowa podrzędne. Oto kilka przydatnych praktycznych zasad zrozumienia tokenów pod względem długości:

  • 1 token ~= 4 znaki w języku angielskim
  • 1 żeton ~= ¾ słów
  • 100 żetonów ~= 75 słów

Różne wersje modeli OpenAI mogą obsługiwać różną liczbę tokenów. Model GPT3.5 Turbo, od którego zacząłem, może obsłużyć do 4096 tokenów; Jednak model beta GPT4 obsługuje do 32 000 tokenów.

Aby jeszcze bardziej skomplikować sprawę, ten limit nie dotyczy tylko Twojej prośby. Jest to ograniczenie kombinacji długości żądania i długości odpowiedzi.

Jako użytkownik nie możesz być całkowicie pewien długości odpowiedzi (bez konkretnego monitu i oczekiwanego wyniku), więc generalnie musisz być dość konserwatywny w swojej prośbie.

Aby wyjaśnić to bardziej konkretnie, kiedy wkleiłem pełną rozmowę na Slacku, początkowo otrzymałem błąd informujący, że wysłałem 11 000 tokenów i nie mogłem wysłać więcej niż 4096.

Skróciłem wiadomości Slacka do 4000 znaków, usuwając wiele mniej interesujących wiadomości. To jednak skutkuje połową odpowiedzi. ChatGPT wygeneruje odpowiedź o długości do 96 znaków (4096 pułapów, odejmując 4000, których użyłem w żądaniu), a następnie anuluje wszystko inne.

Warto przeczytać!  To archiwum map Marsa umieszcza Czerwoną Planetę w dłoni (wideo)

Aby niezawodnie otrzymywać odpowiedzi, musiałem zredukować monit do około 3900 znaków, czyli tylko około 35% oryginalnej treści wiadomości Slack. To wydawało się prawdziwym ograniczeniem i czymś, na co inni musieli już natknąć się.

Zbadałem podobne doświadczenia i odkryłem, że standardowym obejściem tego problemu jest generowanie przez ChatGPT podsumowań mniejszych fragmentów, a następnie podsumowanie podsumowań.

Bardzo meta.

Możesz skutecznie napisać funkcję rekurencyjną, na przykład:

Biorąc pod uwagę, że wygenerowanie standardowej odpowiedzi zajęło już około 20-30 sekund, po prostu nie było możliwe kilkakrotne wywołanie API dla każdego z tych podsumowań.

Nasze wnioski

Ponownie doganiając Aarona i Roba, omówiliśmy, gdzie dotarliśmy i porównaliśmy wyniki.

Rob połączył zmianę, aby zaktualizować nas do najnowszych bibliotek klienckich OpenAI i udostępnił nam konto, które miało dostęp do wersji beta modeli GPT4. Mieliśmy nadzieję wykorzystać nowy limit 32 000 tokenów w jednym z modeli GPT4, ale nigdy nie otrzymaliśmy odpowiedzi od API.

Przeglądając otrzymany błąd, doszliśmy do wniosku, że chociaż mieliśmy dostęp GPT4, niestety nie obejmował on większego modelu 32 000.

Następnie Rob stworzył funkcję, w której można było zareagować na wiadomość Slack za pomocą emoji ❓ (znak zapytania), a my odpowiadaliśmy na tę wiadomość w wątku z wyjaśnieniem, co ktoś powiedział.

Wydawało się to przydatną funkcją w przypadkach, gdy ktoś bierze udział w incydencie i nie do końca rozumie jakiś techniczny żargon. Niestety napotkaliśmy te same problemy z opóźnieniem, w przypadku których odpowiedź zajęłaby około 20-30 sekund.

W przypadku użycia takim jak ten łatwiej było po prostu przejść do Google, niż czekać na odpowiedź.

Jednak Rob dodał drugi tryb, w którym sztuczna inteligencja została poinstruowana, aby działać jako „sfrustrowany nauczyciel w przedszkolu wyjaśniający dziecku ten termin”, co przyniosło całkiem zabawne wyniki, które zwykle zaczynały się od „OK, kochanie”.

W międzyczasie Aaron szybko zhakował proces języka naturalnego dla filtrów incydentów, dzięki czemu można było filtrować listę incydentów za pomocą zdania typu: Incydenty w ciągu ostatnich dwóch tygodni, które miały wpływ na usługę płatności”. A jeśli to się powiedzie, możemy nawet rozszerzyć to na inne części produktu, takie jak polisy, aby ktoś mógł po prostu nadać swojej polisie nazwę + opis, a my automatycznie wygenerowalibyśmy wszystkie warunki, które kodują tę polisę.

Warto przeczytać!  5 najszybszych supersamochodów w GTA Online (luty 2023)

Otrzymał dość udany prototyp działającej funkcji, z polem tekstowym w interfejsie użytkownika, które mogło precyzyjnie generować filtry, takie jak: Pokaż mi krytyczne prywatne incydenty z ostatnich dwóch tygodni”.

Jednak napotkał również te same ograniczenia tokenów, co ja. Niektóre z naszych filtrów umożliwiają mówienie takich rzeczy jak: „Gdzie reporterem jest Rory” co skutkuje filtrem z rolą[“reporter”]=01ETNC3M9A89ERN6680GFTPPNA, gdzie „Rory” zostało zastąpione moim identyfikatorem użytkownika. Aby wygenerować takie filtry, musielibyśmy zapewnić mapowanie wszystkich nazw użytkowników (i pseudonimów) na identyfikatory użytkowników. To, wraz z podobnymi atrybutami, takimi jak „pola niestandardowe”, oznacza, że ​​musielibyśmy zapewnić ogromne monity, które ponownie wpadają na limity tokenów.

Czat GP-Pass

Pod koniec dnia, wypróbowując każdą z tych funkcji, wszyscy w dużej mierze zdecydowaliśmy się zrezygnować z dalszych implementacji. To powiedziawszy, nie czułem, że to strata czasu.

Wiele się nauczyliśmy o korzystaniu z OpenAI i wiemy, na co zwrócić uwagę, aby zdecydować, kiedy warto do niego wrócić.

Jeśli chodzi o opóźnienie, przeprowadziliśmy pewne dochodzenie i wygląda na to, że możliwe są odpowiedzi poniżej 10 sekund, które w pewnym momencie były standardem. Wygląda jednak na to, że odkąd OpenAI wysadziło w powietrze, niewiele osób otrzymuje szybkie odpowiedzi, a wybrane organizacje partnerskie są prawdopodobnie na razie traktowane priorytetowo.

Innym wnioskiem było to, że szybka inżynieria jest trudna!

Ludzie żartują w Internecie, że „szybcy inżynierowie” stają się legalnymi miejscami pracy. Po napisaniu kilku mogę sobie wyobrazić, że jest to legalna praca. Nie wydaje się to nauką ścisłą i prawdopodobnie będzie się zmieniać z modelu AI na model. Zauważyłem, że trudne było to, że kiedy coś poszło nie tak, twoja intuicja podpowiadała, aby dodać więcej instrukcji do modelu, ale w miarę nakładania coraz większej liczby instrukcji twoja podpowiedź może szybko stać się nieporęczna i trudna do zrozumienia dla człowieka, nie mówiąc już o sztucznej inteligencji Model.

Ostatnim problemem związanym z rozwinięciem tych pomysłów, który odłożyliśmy na później w ramach naszego hackathonu, jest prywatność i bezpieczeństwo danych. Ponieważ tylko testowaliśmy za pomocą naszych incydentów testowych, nie było to problemem przy budowaniu weryfikacji koncepcji.

Ale gdybyśmy chcieli udostępnić to jako rzeczywistą funkcję, prawdopodobnie musielibyśmy dodać zabezpieczenia, aby umożliwić organizacjom wyłączenie tych funkcji sztucznej inteligencji, a być może nawet kontroli w celu filtrowania, jakiego rodzaju dane są wysyłane w monitach.

Grupa Utworzono za pomocą Sketcha.


Źródło