Czatowanie z ChatGPT

https://aie24.pl/

ChatGPT, o którym wspomniałem wcześniej w tym rozdziale, oznacza Chat Generative Pre-trained Transformer. Ten chatbot został opracowany przez OpenAI, aby służyć jako przyjazny front-end dla modeli OpenAI GPT. Po wydaniu 30 listopada 2022 r. ChatGPT szybko stał się najszybciej rozwijającą się aplikacją konsumencką w historii. ChatGPT rozmawia z użytkownikami i generuje niezwykle ludzkie odpowiedzi, biorąc pod uwagę kontekst i poprzednie monity. W przeciwieństwie do GitHub Copilot, ChatGPT nie jest specjalnie szkolony do rozumienia lub generowania kodu. Zamiast tego jest dostrojony do dobrego prowadzenia konwersacji. Jednak ogromne modele, których używa, obejmują kod programistyczny. W zależności od modelu używanego z ChatGPT, często obsługuje monity związane z kodowaniem co najmniej tak dobrze, jak Copilot. ChatGPT jest (obecnie) oparty na GPT-3.5 i GPT-4. Modele zostały dodatkowo dostrojone za pomocą procesu, który OpenAI nazywa wzmacnianiem uczenia się z ludzkiej informacji zwrotnej (RLHF). Trenerzy ludzcy oceniali odpowiedzi z modelu i tworzyli modele nagród, aby móc rozmawiać z ludźmi, korzystając z systemu bezpieczeństwa, aby uniknąć generowania szkodliwych treści. Ponieważ jest dostrojony do konwersacji, ChatGPT może pomóc w bardziej kreatywnych zadaniach obejmujących więcej niż kilka linijek kodu. Na przykład użyłem ChatGPT do wygenerowania przykładowych danych dla aplikacji, którą rozwijam. Użyłem go również do burzy mózgów na temat pomysłów na nowe funkcje do dodania do aplikacji.

Jak najlepiej wykorzystać czat Copilot

https://aie24.pl/

Czat Copilot działa najlepiej, gdy traktujesz go jak ludzkiego programistę — prawdopodobnie najbardziej gadatliwego ludzkiego programistę, jakiego kiedykolwiek spotkałeś, ale takiego, który wydaje się wiedzieć dużo, więc tolerujesz. Na przykład, załóżmy, że chcesz uzyskać pomoc w naprawieniu błędu w swoim kodzie. Twoja interakcja z bardziej doświadczonym kolegą może wyglądać mniej więcej tak:

Ty: Hej, Linda, masz czas, żeby pomóc mi naprawić coś w moim kodzie?

Linda: Jasne. Jaki jest problem?

Ty: Czy widzisz jakieś potencjalne problemy z bezpieczeństwem w sposobie, w jaki napisałem punkty końcowe rejestracji i logowania na tym serwerze?

Linda: Daj mi pomyśleć. Nie. Wygląda dość standardowo.

Ty: Jak byś to przetestował?

Linda: Prawdopodobnie za pomocą Jest i Supertest.

Ty: Tak, okej. Nie wiem, jak ich używać.

Linda: Przeczytaj dokumentację.

Ty: Okej, dzięki.

Gdybyś miał taką samą rozmowę z Copilot Chat, Twoje pytania mogłyby być dokładnie takie same (przynajmniej na początku). Zobaczmy, jak to się potoczy. Poniżej znajduje się moja prawdziwa rozmowa z Copilot.

Ja: Hej, Copilocie, czy masz czas, żeby pomóc mi naprawić coś w moim kodzie?

Czat Copilota: Oczywiście! Chętnie pomogę. Jaki jest problem?

Ja: Czy widzisz jakieś potencjalne problemy z bezpieczeństwem w sposobie, w jaki napisałem punkty końcowe rejestracji i logowania na tym serwerze?

Czat Copilota: Nie jestem pewien, czy mógłbyś pokazać mi kod tych punktów końcowych?

W tym momencie otworzyłem plik zawierający kod, do którego się odwoływałem.

Ja: Oto one.

Rozmowa drugiego pilota: Widzę, że używasz tokenów JWT do uwierzytelniania użytkowników. To dobry początek. Nie widzę jednak żadnej walidacji danych wprowadzanych przez użytkownika. Zawsze powinieneś walidować dane wprowadzane przez użytkownika, aby zapobiec atakom takim jak wstrzykiwanie kodu SQL lub cross-site scripting (XSS). Ponadto ważne jest hashowanie haseł przed zapisaniem ich w bazie danych, aby zapobiec ich ujawnieniu w przypadku naruszenia danych.

Ja: Sprawdzam dane wprowadzane i hashuję hasło za pomocą bcrypt. Czy możesz spojrzeć jeszcze raz?

Czat drugiego pilota: Widzę, że używasz biblioteki bcrypt do hashowania hasła przed zapisaniem go w bazie danych, co jest świetne. Nie widzę jednak żadnej walidacji danych wprowadzanych przez użytkownika. Zawsze powinieneś walidować dane wprowadzane przez użytkownika, aby zapobiec atakom takim jak wstrzykiwanie kodu SQL lub cross-site scripting (XSS). Jednym ze sposobów, aby to zrobić, jest użycie biblioteki takiej jak express-validator do walidacji danych wprowadzanych przed ich przetworzeniem.

Tutaj Copilot miał rację. Okazało się, że nie weryfikowałem danych wejściowych. Copilot również podał mi sugerowany następny monit, jak pokazano na rysunku

Zadałem pytanie uzupełniające i wdrożyłem sugerowane rozwiązanie, ale nadal nie byłem przekonany. Zadałem to samo pytanie, które zadałem mojej współpracownicy Lindzie:

Ja: Jak byś to przetestował?

Czat drugiego pilota: Aby przetestować walidację, możesz wysłać żądanie POST do punktu końcowego /signup z nieprawidłowym wejściem i sprawdzić, czy serwer zwraca prawidłową odpowiedź błędu. Oto przykład, jak możesz to przetestować za pomocą supertest i jest:

Copilot nie tylko udzielił mi praktycznie tej samej odpowiedzi, co mój współpracownik, ale okazał się o wiele bardziej cierpliwy i nawet napisał dla mnie przykładowy test.

Znajomość agentów Copilota

https://aie24.pl/

Agenci są funkcją Copilota, gdy jest używany z VS Code. Agenci pozwalają na dalsze określenie i rozszerzenie kontekstu, który ma być brany pod uwagę przez Copilot Chat w odpowiedzi. Agenta wywołuje się za pomocą @, po którym następuje nazwa agenta w monicie. Dostępni są następujący agenci:

»»@workspace: Ten agent sprawia, że ​​Copilot Chat bierze pod uwagę wszystkie pliki w bieżącym projekcie VS Code podczas generowania odpowiedzi.

»»@vscode: Możesz użyć tego agenta, aby zadać pytania dotyczące konkretnie sposobu korzystania z VS Code.

»»@terminal: Użyj tego agenta, aby zapytać Copilot Chat, jak coś zrobić w zintegrowanym terminalu VS Code.

Agent @workspace to potężne narzędzie. Najlepiej go użyć, gdy Copilot musi myśleć holistycznie o swoim projekcie, a nie tylko o pliku lub plikach, które aktualnie przeglądasz.

Zrozumienie poleceń ukośnika

https://aie24.pl/

Czat Copilot ma kilka wbudowanych poleceń ukośnika, które są skrótami, których możesz użyć, aby wykonać określone zadania lub dowiedzieć się czegoś. Aby zobaczyć listę poleceń ukośnika, wprowadź znak ukośnika (/) w polu tekstowym wprowadzania czatu, jak pokazano na rysunku.

Aby uzyskać więcej informacji o poleceniach ukośnika i innych rzeczach, które możesz zrobić za pomocą czatu Copilot, wpisz /help w polu tekstowym.

Czatowanie z Copilot

https://aie24.pl/

Copilot zapewnia bezpośredni interfejs do podpowiadania swojego modelu za pomocą rozszerzenia Chat. Rozszerzenie Chat jest instalowane automatycznie podczas instalacji Copilot i można uzyskać do niego dostęp, klikając ikonę Chat w lewym panelu VS Code. Przy pierwszym dostępie do Chat zobaczysz podstawowe instrukcje dotyczące jego używania, jak pokazano na rysunku

Podpowiedzi jak profesjonalista

https://aie24.pl/

Chociaż podpowiedzi dotyczące modelu językowego często wiążą się z metodą prób i błędów, możesz udoskonalić swoje podpowiedzi, pamiętając o następujących wskazówkach:

»»Zachowaj krótkie i precyzyjne monity. Zamiast upychać każdą informację, której model będzie potrzebował, w jednym monicie, podziel skomplikowane monity na krótsze, które będą bazować na poprzednich w konwersacji.

»»Używaj kontynuacji. Ta wskazówka jest szczególnie przydatna podczas generowania dużych bloków kodu. Interfejs czatu ograniczy ilość danych wyjściowych, jakie podaje dla każdego monitu, więc możesz otrzymać tylko część funkcji na raz. Monitowanie kontynuacją spowoduje, że model zwróci dodatkową treść.

»»Użyj Act as a lub You are a: Po frazie podaj opis idealnej osobowości lub osoby do wykonania zadania (takiej jak profesjonalny programista oprogramowania, doświadczony administrator bazy danych lub pomocny asystent AI odpowiadający w języku pirackim). Takie sformułowanie może skutkować wyższą jakością wyników.

»»Powiedz modelowi, aby postępował zgodnie z najlepszymi praktykami branżowymi. Ta wskazówka doprowadzi do mniejszego wykorzystania przestarzałych technik lub przestarzałej składni.

»»Podaj wskazówki. Wskaż, gdzie i w jaki sposób model powinien zapewnić swoje zakończenie, jeśli to możliwe. Na przykład, prosząc modelkę o podsumowanie artykułu, możesz napisać poniższe, aby model odpowiedział wypunktowaną listą:

Kluczowe punkty  to:

»»Oznacz elementy monitu. Określ części swojego monitu, które są instrukcją, danymi wejściowymi, kontekstem lub formatem wyjściowym. Na przykład

Dane wejściowe: tekst wiadomości e-mail.

Instrukcja: Napisz odpowiedź na tego e-maila z listą działań.

Format wyjściowy: Profesjonalny e-mail z wypunktowaną listą kolejnych kroków, które podejmę w odpowiedzi na wiadomość e-mail.

Kontekst: Nadawca jest moim szefem

»»Oceń wynik i poproś o ulepszenia, jeśli to konieczne. Zawsze pamiętaj, że jesteś ekspertem i nigdy po prostu nie akceptuj odpowiedzi, co do której nie jesteś pewien.

Podpowiedź w postaci łańcucha myśli

https://aie24.pl/

W podpowiedzi w postaci łańcucha myśli podano szereg pośrednich kroków rozumowania, aby poprawić zdolność modelu do wykonywania złożonych zadań. Na przykład możesz poprawić dokładność i szybkość reakcji SI na podpowiedź z kilkoma strzałami w poprzedniej sekcji, wyjaśniając, w jaki sposób doszedłeś do swoich odpowiedzi:

P: Jechałem przez 30 minut i przejechałem 30 mil. Jak szybko jechałem?

O: Jeśli przejechałeś 30 mil w 30 minut, to jest to 1 mila na minutę (30 mil / 30 minut), czyli 60 mil na godzinę 60 mil na godzinę = (30 mil / 30 minut) * (60 minut / 1 godzina)

P: Jechałem przez 10 minut i przejechałem 5 mil. Jak szybko jechałem?

O: Jeśli przejechałeś 5 mil w 10 minut, to jest to 0,5 mili na minutę (5 mil / 10 minut), czyli 30 mil na godzinę 30 mil na godzinę = (5 mil / 10 minut) * (60 minut / 1 godzina)

P: Jechałem przez 120 minut i przejechałem 100 mil. Jak szybko jechałem?

O: Ponownie, model będzie pracował nad problemem krok po kroku, mniej więcej zgodnie z tym samym formatem, co podane przez Ciebie przykłady. Według badania Google Research z 2022 r. („Chain-of-Thought Prompting Elicits Reasoning in Large Language Models”), podpowiedzi łańcuchowe mogą radykalnie poprawić zdolność sztucznej inteligencji do dokładnego wykonywania zadań arytmetycznych, zdroworozsądkowych i symbolicznych.

Monitowanie z kilkoma ujęciami

https://aie24.pl/

W monitowaniu z kilkoma ujęciami zaczynasz od wyjaśnienia parametrów prawidłowej odpowiedzi i podania co najmniej jednego przykładu. Oto przykład monitu z kilkoma ujęciami w celu wygenerowania fałszywych danych dla API:

Give me 20 made-up records for customers,

in JSON format, with the following shape:

[

{

“Title”: “Ms.”,

“GivenName”: “Geneva”,

“MiddleInitial”: “W”,

“Surname”: “Cole”,

“StreetAddress”: “3447 Reeves Street”,

“City”: “Mill Center”,

“State”: “WI”,

“ZipCode”: 54301,

“Birthday”: “1/5/1978”

},

Powszechną techniką w zadawaniu pytań za pomocą niewielu pytań jest podawanie przykładów prawidłowych odpowiedzi w formacie pytań i odpowiedzi, jak w poniższym przykładzie:

P: Jechałem przez 30 minut i przejechałem 30 mil. Jak szybko jechałem?

O: 60 mil na godzinę

P: Jechałem przez 10 minut i przejechałem 5 mil. Jak szybko jechałem?

O: 30 mil na godzinę

P: Jechałem przez 120 minut i przejechałem 100 mil. Jak szybko jechałem?

O:

Model odpowie w tym samym formacie, co w przykładach, jak pokazano na rysunku

Rozszyfrowanie elementów monitu

https://aie24.pl/

Monity mogą być proste, takie jak żądanie ukończenia chleba i, lub złożone i wieloczęściowe. Monity mogą zawierać wszystkie lub tylko niektóre z następujących elementów:

»»Instrukcja: Zadanie, które ma wykonać model. Na przykład Przetłumacz poniższy tekst na język hiszpański.

»»Kontekst: Dodatkowe informacje lub pliki, które model powinien wziąć pod uwagę podczas generowania odpowiedzi. Pliki otwarte w sąsiednich kartach podczas korzystania z Copilota są przykładami kontekstu.

»»Dane wejściowe: Dane wejściowe lub pytanie, na które ma odpowiedzieć sztuczna inteligencja. Jeśli instrukcja ma przetłumaczyć jakiś tekst na język hiszpański, danymi wejściowymi będzie tekst, który chcesz przetłumaczyć.

»»Format wyjściowy: Typ lub format, w którym model powinien dostarczyć dane wyjściowe. Przykładami formatu wyjściowego są dane JSON, dane rozdzielone tabulatorami i format Markdown.

Monity otwarte i zamknięte

Monity mogą być otwarte lub zamknięte. Monity zamknięte proszą o konkretną i ukierunkowaną odpowiedź, taką jak

»»Napisz funkcję weryfikującą wprowadzony adres e-mail.

»»Sprawdź tę funkcję pod kątem błędów.

»»Jaki jest najwyższy budynek w Indianapolis?

Pytania otwarte mają na celu generowanie rozbudowanych odpowiedzi, takich jak:

»»Napisz e-mail do mojego gospodarza, w którym powiem mu, że się wyprowadzam, jeśli nie naprawi przecieku.

»»Napisz szkic artykułu o odżywianiu i szkolnych lunchach.

»»Napisz historię o wiewiórce-magiku w stylu Dr. Seussa.

Korzystanie z różnych typów monitów

Chatbot zrobi wszystko, co w jego mocy, aby zwrócić dokładne ukończenie każdego monitu, który mu podasz. Istnieją jednak typy monitów, które można wykorzystać do różnych celów, jak opisano w tej sekcji.

Monity zero-shot

W przypadku monitu zero-shot nie podajesz kontekstu modelu ani przykładów tego, czego szukasz, ale zamiast tego polegasz całkowicie na jego szkoleniu. Przykładem monitu zero-shot jest

What is the capital of Maine?

W przypadku prostych pytań lub zadań wiele LLM może stosować podpowiedzi zero-shot. Jednak w miarę jak Twoje prośby stają się bardziej złożone, będziesz musiał przejść do innych form podpowiedzi. Wraz ze wzrostem modeli, coraz więcej zadań można wykonać przy użyciu prostych podpowiedzi zero-shot. Jednak jeśli chcesz, aby LLM wykonał zadanie obejmujące matematykę lub złożone rozumowanie, możesz odnieść większy sukces, stosując jeden z typów podpowiedzi opisanych w poniższych sekcjach.

Dostosowywanie temperatury

https://aie24.pl/

Wyniki uzyskane z LLM są w dużym stopniu zależne od ustawienia zwanego temperaturą, które bezpośrednio określa, jak kreatywny lub faktyczny będzie model. Po ustawieniu niższej temperatury LLM zawsze zwróci najbardziej prawdopodobne odpowiedzi. Po ustawieniu wyższej temperatury LLM będzie bardziej kreatywny i losowy. W większości modeli językowych skala temperatury waha się od 0 do 1. W przypadku ChatGPT ustawieniem domyślnym jest 0,7. W zależności od rodzaju żądanej odpowiedzi możesz chcieć ustawić tę wartość na niższą lub wyższą. Możliwe jest ustawienie temperatury na poziomie nawet 2,0 w ​​modelach OpenAI, ale ustawienia temperatury powyżej 1,0 są bardziej prawdopodobne, że będą bełkotem. Aby zilustrować, jaką różnicę robi temperatura, poprosiłem ChatGPT o listę słów, które rymują się z Pythonem. Nie określiłem temperatury, więc ChatGPT użył jej wartości domyślnej. Odpowiedź pokazano na rysunku

Powiedział mi, że Python nie jest popularnym słowem w języku angielskim i podał cztery słowa, które w jakiś sposób się z nim rymują, a jako piąte powtórzył słowo „bison” — prawdopodobnie dlatego, że uznał, że cztery elementy to za mało na „listę słów”, ale nie mógł wymyślić niczego innego.

Następnie zadałem to samo pytanie programowi ChatGPT, ale kazałem mu ustawić temperaturę na 1,0. Odpowiedź pokazano na rysunku

Tym razem zwróciło dziesięć słów lub fraz, a osiem z nich było rymami. Następnie poprosiłem ChatGPT o ustawienie temperatury na 2,0. Odpowiedź pokazano na rysunku

Zwróciło 19 sugestii słów, które rymują się z Pythonem, w tym moją ulubioną sugestię: Thai cuisine. Ponieważ ChatGPT jest dostrojony do generowania zawsze czegoś sensownego (nawet gdy jest kreatywny), dostosowywanie temperatury nie ma tak dużego wpływu na wynik, jak dostosowywanie jej podczas bezpośredniej pracy z modelami OpenAI. Aby zilustrować, jak to wygląda, gdy zwiększasz temperaturę modelu, Rysunek  pokazuje wynik dla tego samego monitu z temperaturą ustawioną na 2,0, ale robioną bezpośrednio przez API, a nie przez ChatGPT.

W dalszej części  opisuję, jak pracować z modelami OpenAI za pomocą API. Niektórzy asystenci AI mogą pozwolić na ustawienie temperatury nawet wyższej niż 2, jeśli poprosisz grzecznie. Pamiętaj jednak, że wyższe temperatury prawie na pewno wygenerują śmieci.