ChatGPT to ostatnio niezwykle gorący temat w świecie technologii. Wszyscy zadrżeli na myśl o tym, iż AI niedługo może pozbawić ich pracy. Co interesujące narzędzie to może być również wykorzystywane przez programistów.
Przyjrzyjmy się zatem w jaki sposób możemy wykorzystać ChatGPT, programując w naszym ulubionym języku z dolarami przy nazwach zmiennych (tak, chodzi o PHP ( ͡° ͜ʖ ͡°)).
Najpierw wyjaśnijmy sobie tylko kilka rzeczy:
Czym jest ChatGPT?
ChatGPT to produkt firmy OpenAI. Jest to narzędzie typu chatbot bazujące na algorytmie uczenia maszynowego (GPT – ang. Generative Pre-Trained Transformer).
Zasada działania tego narzędzia jest prosta. Zadajesz pytanie – dostajesz odpowiedź. Nie dostajesz jednak listy linków, tak jak ma to miejsce w wyszukiwarce Google. Dostajesz pełną, całkowicie spójną odpowiedź.
Jak zacząć używać ChatGPT?
Tutaj sprawa jest bajecznie prosta. Musisz wejść w następujący link i założyć sobie konto w OpenAI. Przy rejestracji jest wymagane również podanie numeru telefonu i autoryzacja przy pomocy otrzymanego kodu SMS. Następnie logujesz się do narzędzia pod tym linkiem. Po wykonaniu tych kroków możesz zacząć używać ChatGPT. Po zalogowaniu powinieneś zobaczyć następujący ekran:

Z AI możesz komunikować się używając okna czatu widocznego na obrazku powyżej.

ChatGPT bez problemu jest w stanie zrozumieć język polski. Wystarczy, iż napiszesz do niego coś w danym języku:

Czyż nie jest uroczy? (✿╹◡╹)
Jak programista PHP może użyć ChatGPT w codziennej pracy?
Poniżej przedstawiam kilka pomysłów na to, w jaki sposób możesz skorzystać z ChatGPT w swojej codziennej pracy developerskiej. W tym miejscu chciałbym serdecznie podziękować Wojciechowi Łaskawcowi za podesłanie mi kilku use case’ów tego, w jaki sposób ChatGPT może być wykorzystany przez PHP-owca.
1. Code review dla kodu PHP
Zapytałem ChatGPT, czy mogłoby zrobić dla mnie code review.
Ja: Czy jesteś w stanie zrobić dla mnie code review kodu w PHP?
AI: Niestety, jako iż jestem dużym modelem językowym wytrenowanym przez OpenAI, nie jestem w stanie przeprowadzić code review kodu w PHP ani w żadnym innym języku. Jestem programem stworzonym do generowania tekstu na podstawie otrzymywanych danych wejściowych, więc nie posiadam zdolności ani narzędzi do analizowania kodu. jeżeli potrzebujesz pomocy z code review kodu w PHP, możesz skontaktować się z profesjonalistą lub poszukać odpowiednich narzędzi i tutoriali online
Bardzo skromne to AI. Nie zniechęcony jednak tym faktem poszedłem krok dalej. Otóż pokazałem AI następujący, niezbyt ładny, kod kontrolera w Laravelu. Czemu akurat kod w Laravelu? Powiedzmy, iż akurat taki wygrzebałem ze śmietnika… ( ͡° ͜ʖ ͡°)
Ja: przeprowadź dla mnie code review następującego kodu w PHP: <tutaj wkleiłem kod>
AI: Podczas przeprowadzania code review dla powyższego kodu w PHP, zwróciłbym uwagę na następujące kwestie:
- W metodzie show() zmienna $product jest typu mixed, ale na podstawie kontekstu wydaje się, iż powinna być typu Term. Zalecałbym zmianę typu zmiennej na Term, aby uniknąć potencjalnych błędów i ułatwić czytelność kodu.
- W obu metodach show() i redirect() kod jest podobny i w obu przypadkach wyszukiwana jest kategoria o określonym slugu. Zalecałbym stworzenie osobnej metody, która będzie wyszukiwać kategorię, aby uniknąć powielania kodu i ułatwić utrzymanie i rozwój kodu.
- W metodzie show() zmienna $product jest rozszerzana dzięki metody toAugmentedArray(), ale nie wiadomo, co ta metoda robi i jakie dane zwraca. Zalecałbym dodanie komentarza dokumentacyjnego do tej metody, aby wyjaśnić jej działanie i pokazać, jakie dane są zwracane.
- W metodzie redirect() zmienna $product jest używana do uzyskania permalinku, ale nie wiadomo, czy ta zmienna zawsze zawiera permalink. Zalecałbym sprawdzenie, czy zmienna $product zawiera permalink i dodanie odpowiedniego komunikatu błędu lub obsługi wyjątku, jeżeli permalink nie jest dostępny.
Podsumowując, powyższy kod w PHP wymaga pewnych poprawek i usprawnień, aby zapewnić jego poprawne działanie i ułatwić utrzymanie.
Całkiem nieźle co? Osobiście w ramach code review zwróciłbym uwagę na jeszcze kilka rzeczy, ale wygląda to naprawdę imponująco. Czy to już koniec ery pull requestów, które od tygodni leżą odłogiem w oczekiwaniu na code review? ( ͡° ͜ʖ ͡°)
2. Implementacja kodu PHP
No to idźmy dalej. Czy ChatGPT będzie w stanie przygotować dla nas jakąś prostą implementację w PHP? Sprawdźmy!
Załóżmy, iż chcemy sobie zaimplementować komendę konsolową w Symfony, której zadaniem będzie pobranie czegoś z GoogleMaps API.
Ja: Pokaż mi przykład implementacji komendy konsolowej w Symfony, której zadaniem będzie pobranie czegoś z GoogleMaps API.
AI: Poniżej znajduje się przykładowa implementacja komendy konsolowej w Symfony, której zadaniem jest pobranie danych z GoogleMaps API:
Komenda ta może być uruchomiona z linii poleceń w następujący sposób:
Oczywiście powyższy przykład jest jedynie ilustracją i może wymagać dalszego dostosowania do konkretnych potrzeb.
Ja: okej, a teraz pokaż przykład zapytania do GoogleMaps API przy użyciu biblioteki Guzzle
AI: Poniżej znajduje się przykładowy kod, w którym zostaje wysłane zapytanie do GoogleMaps API dzięki biblioteki Guzzle:
W powyższym przykładzie wysyłamy zapytanie do metody findplacefromtext w API GoogleMaps, w którym szukamy pizzerii w pobliżu Nowego Jorku. W odpowiedzi otrzymujemy dane w formacie JSON, które następnie są dekodowane i zapisywane w zmiennej $data.
Oczywiście, aby skorzystać z tego kodu, należy zastąpić wartość YOUR_API_KEY w linii 14 swoim własnym kluczem API z GoogleMaps.
Szału nie ma, ale powiedzmy, iż cośtam bylibyśmy w stanie z tego posklejać. ( ͡° ͜ʖ ͡°)
3. Testy automatyczne w PHP
No i tutaj mamy prawdziwą petardę. Okazuje się, iż ChatGPT może dla nas napisać choćby testy automatyczne. Pamiętasz implementację Laravelowego ProductControllera, z pierwszego przykładu? Użyłem sobie tej implementacji i poprosiłem AI, aby napisało dla mnie testy jednostkowe.
Ja: Dla następującej implementacji, napisz dla mnie testy jednostkowe: <tutaj wkleiłem kod>
AI: Poniżej znajdują się przykładowe testy jednostkowe dla powyższej implementacji:
Powyższe testy sprawdzają, czy metoda show zwraca obiekt View z odpowiednimi danymi oraz czy metoda redirect zwraca obiekt RedirectResponse z odpowiednim adresem URL. Testy te są jedynie przykładem i mogą
A teraz patrz na to, testy integracyjne z użyciem traitów udostępnionych przez Laravela!
Ja: napisz testy integracyjne dla kodu PHP w Laravelu: <tutaj wkleiłem kod>
AI: Poniżej przedstawiam przykładowe testy integracyjne dla kodu PHP w Laravelu:
Testy funkcjonalne? Dla ChatGPT to żaden problem!
Ja: napisz testy funkcjonalne dla tej samej implementacji
AI: Poniżej przedstawiam przykładowe testy funkcjonalne dla tej samej implementacji:
Jako rozwiązanie na zasadzie kopiuj-wklej – super sprawa! Trochę refactoru, może otestowanie jakichś ciekawych przypadków brzegowych i gotowe!
4. Dokumentacja w języku ojczystym zawsze pod ręką
Męczy cię ciągłe googlowanie i przeszukiwanie dokumentacji? ChatGPT jest zatem idealnym rozwiązaniem dla Ciebie!
Poprosiłem, aby ChatGPT wyjaśnił mi czym są Security Votery w Symfony.
Ja: wyjaśnij mi czym jest security voter w symfony
AI: Security voter w symfony jest mechanizmem, który pozwala na zdefiniowanie reguł dostępu do różnych zasobów w aplikacji opartej na frameworku symfony. Security voter umożliwia sprawdzenie, czy dana osoba (np. użytkownik) posiada odpowiednie uprawnienia do dostępu do danego zasobu, a jeżeli nie posiada tych uprawnień, może zostać zablokowany dostęp do tego zasobu.
Ja: okej, a teraz pokaż mi przykład implementacji
AI: Niestety, jako asystent OpenAI nie posiadam dostępu do przeglądarek internetowych, więc nie jestem w stanie pokazać Ci konkretnego przykładu implementacji mechanizmu Security Voter w Symfony. Mogę jednak opisać ogólny sposób tworzenia voterów w tym frameworku.
Aby utworzyć voter w Symfony, należy utworzyć klasę, która implementuje interfejs Symfony\Component\Security\Core\Authorization\Voter\VoterInterface. Klasa ta musi zawierać metodę vote(), która jest odpowiedzialna za określenie, czy dana osoba ma dostęp do danego zasobu. W jej implementacji należy zdefiniować odpowiednie reguły decyzyjne i zwrócić jedną z trzech wartości: VoterInterface::ACCESS_GRANTED – jeżeli dostęp jest dozwolony, VoterInterface::ACCESS_DENIED – jeżeli dostęp jest zabroniony, lub VoterInterface::ACCESS_ABSTAIN – jeżeli voter nie ma wiedzy, czy dostęp powinien być dozwolony, czy zabroniony.
Następnie należy zarejestrować utworzony voter w systemie zabezpieczeń Symfony poprzez dodanie go do listy voterów w pliku konfiguracyjnym. Po tym kroku voter będzie mógł być użyty do oceny dostępu do zasobów w aplikacji.
Przykładowa implementacja votera może wyglądać następująco:
Niestety z nieznanych mi powodów, AI ucięło ten przykład. Być może mamy tutaj do czynienia z jakimś narzuconym limitem na długość wiadomości.
Mimo wszystko komentarz „jeśli użytkownik nie jest zalogowany, zwróć abstynencję” jest niezwykle zabawny. Bardzo chciałbym zobaczyć kiedyś podobny komentarz w kodzie. ( ͡° ͜ʖ ͡°)
Podsumowanie
Mam nadzieję, iż podobały Ci się przykłady ChatGPT, które przedstawiłem w tym poście. To niesamowita technologia, która na pewno zrewolucjonizuje wiele branż i zawodów!
Czy jako programiści mamy się czego obawiać? Czy już niedługo AI nas zastąpi? Osobiście byłbym daleki od takiego stwierdzenia. Mimo wszystko dostaliśmy do rąk interesujące narzędzie, które może znacząco usprawnić naszą codzienną pracę. Narzędzie niepozbawione wad, bo zdarzają się błędy i łatwo wpaść w limity. No i koniec końców to tylko AI, technologia wciąż na tyle niedoskonała i niebędąca w stanie całkowicie zastąpić człowieka. Niemniej jednak rezultaty są bardzo imponujące i świetnie rokują na przyszłość.
Znasz jeszcze jakieś interesujące wykorzystania ChatGPT w kontekście pracy PHP developera? A może masz jakieś przemyślenia na ten temat? Daj znać w komentarzu!