Pozwól, aby ChatGPT przeprowadził code review za Ciebie

dou.eu 2 miesięcy temu

Era sztucznej inteligencji już się rozpoczęła. Każdy, kto pracuje w IT, zna już naszego „nowego najlepszego przyjaciela” do tworzenia systemu — AI.

Pracuję na stanowisku DevOps Engineer w Innovecs i chciałbym podzielić się jednym z najnowszych odkryć.

Koncepcja

  • Chcielibyście, aby każdy wasz Pull/Merge Request był najpierw sprawdzany przez ChatGPT-4, a dopiero potem przez was?
  • Chcecie otrzymać natychmiastową opinię na temat zmian w kodzie, zanim zobaczą je koledzy?
  • A co z wykrywaniem, kto i gdzie wkomitował dane poufne lub klucze API, z możliwością od razu oznaczenia „winowajcy” do poprawki?

Dobrze wiemy, iż GPT potrafi całkiem nieźle generować kod... Ale przeglądać go może (jak się okazało) nie gorzej!

Od razu pokażę, jak ta magia działa w praktyce (ale muszę zamazać części kodu, aby nie pokazać za dużo).

1. Utworzyłem testowy Merge Request, w którym dodałam plik JSON z lekko uszkodzonym formatowaniem i zwykłymi tekstami haseł, odtwarzając security leak:

Jak widać, AI nie tylko wykrył poufne informacje, ale także zamaskował je w swoim komentarzu + oznaczył mnie, abym je usunął.

A oto inne przeglądy:

Znacznie potężniejsza analiza, niż narzędzia takie jak GitLeaks, które wykonują prostą wyszukiwarkę statycznie dzięki wyrażeń regularnych i symboli wieloznacznych.

2. Przykłady z frontowych Merge Requests (zrzuty ekranu kolegi), podkreślę tylko pewne momenty:

Model GPT-4o pokazuje całkiem niezłą znajomość React. Oto ten design z key — wszyscy go znają, ale wszyscy zapominają.

Albo tutaj, jakby przeczytał książkę:

Mogę podać wiele przykładów, ale chodzi o to, iż jego rekomendacje mają sens!

Oczywiście, nie wszystkie uwagi są warte uwagi, ale duża część jest naprawdę przydatna.

Realizacja

Podzielę się pomysłem, jak w ciągu jednej godziny można w Pythonie zaprogramować sobie zautomatyzowany proces przeglądu.

Ten kod warto od razu dodać do przepływu CI/CD, aby uzyskać maksymalny efekt i automatyzację procesu.

Idealnie jest zawinąć go w jedną pracę CI/CD i uruchamiać na każdym MR/PR (tylko zróbcie wyjątek dla zmian od renovate / dependabot).

Chętnie podzieliłbym się już gotowym kodem, ale niestety nie mogę (company complains, you must understand). Dlatego podzielę się pomysłem z blokami architektonicznymi, abyście mogli to złożyć jak klocki.

Do dzieła, bierzemy Python i piszemy kod.

1. Będziemy potrzebować połączenia do modelu AI.

import openai

To może być GPT-4o od OpenAI. Ale polecam Azure OpenAI, ponieważ Azure obiecuje nie przekazywać kodu i nie trenować na nim.

from openai import AzureOpenAI

Zapytajcie GPT, jak to zrobić, jeżeli robicie to po raz pierwszy.

2. Pobieramy zmiany w kodzie i komentarze do tych zmian.

Używamy GitLab, więc na jego przykładzie od razu podam endpointy:

a) Code changes using MR changes API:

/api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/changes?access_raw_diffs=true

b) Comments using MR notes API:

/api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/notes?order_by=created_at&sort=asc

where:

gitlab_request_id = os.getenv("CI_MERGE_REQUEST_IID")

gitlab_project_id = os.getenv("CI_PROJECT_ID")

Dla estetyki odpowiedź JSON z GitLab trzeba będzie sparsować.

3. Wysyłamy kod na przegląd AI.

Nie zapominamy na początku dodać prompt z wyjaśnieniami co robić i składamy to wszystko w jedno zapytanie:

review_request=f"{prompt}\n\n{notes}\n\n{changes}"

W prompt trzeba uprzejmie poprosić AI o przeanalizowanie waszych zmian w kodzie według kryteriów — coś w tym stylu (bardzo uproszczona wersja w porównaniu do tej, której używamy my):

“As a Developer, I want to ask you to perform a GitLab Merge Request review.

Consider previous comments noted below and avoid repeating similar recommendations.

If you spot a recurring issue, skip it.

For security issues or sensitive information leaks, mention the assignee's username with @.

Make your feedback clear, concise, and actionable, with specific improvement recommendations.

Review the code snippet below based on these criteria:

- Syntax and Style: Look for syntax errors and deviations from conventions.

- Performance Optimization: Suggest changes to improve efficiency.

- Security Practices: Check for vulnerabilities and hard-coded secrets (mask half the info).

- Error Handling: Identify unhandled exceptions or errors.

- Code Quality: Look for code smells, unnecessary complexity, or redundant code.

- Bug Detection: Find potential bugs or logical errors.”


4. That’s it! Otrzymaną odpowiedź po prostu zamieszczamy jako komentarz.

Utwórzcie GitLab PAT token dla tego z nazwą AI MR review i skierujcie POST na MR notes API:

/api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/notes

Wnioski

Zalety

Implementacja tego rozwiązania przyniesie korzyści dla:

  • DevSecOps: znacznie zwiększa bezpieczeństwo.
  • Poziom Senior+: teraz można znaleźć błędy i niedociągnięcia w MR/PR bez wczytywania się w kod — AI zrobi to za was.
  • Rozwój/QA: od razu otrzymujesz zaskakująco przydatne uwagi i rekomendacje.
  • Biznes: na wyjściu otrzymuje nieco lepszy kod.

Wady

Koszt: trudny do przewidzenia. Wszystko zależy od tego, ile zamierzacie przekazać do przeglądu i jaki model będzie go przeprowadzać.

Ryzyka

Ciągłe doskonalenie: pomysły na ulepszenie takiego narzędzia mogą być nieskończone, nie zawsze więcej kontekstu oznacza lepszy przegląd. A iteracyjne testowanie zmian wymaga pewnego czasu.

„Ulepszenia”: możemy stać się jeszcze bardziej leniwi =), ale lenistwo jest motorem postępu, prawda?

Perspektywy

Wyobraźcie sobie możliwości, to będzie wasz skrypt, więc można na przykład:

  • dodać kontekst zadania z Jira,
  • stworzyć podsumowanie dla PM,
  • napisać release notes/release changes,
  • szukać luk w zabezpieczeniach.

Robimy więc nasz kod lepszy, a życie prostsze.

Welcome to AI era, dear colleagues!

Idź do oryginalnego materiału