Як підʼєднати ChatGPT до код-рев’ю
Привіт! Я працюю на позиції DevOps Engineer в Innovecs та маю 7+ років в IT. У цій статті хочу поділитися однією зі свіжих знахідок в галузі ШІ, яка допоможе робити код-рев’ю.
Концепція
Ви хотіли б, щоб кожен ваш pull/merge request спочатку перевіряв ChatGPT-4, а вже потім ви? Хочете моментальний фідбек про зміни в коді перед тим, як це побачать колеги? А як щодо виявлення того, хто і де вкомітив конфіденційні дані або API-ключі, з можливістю одразу тегнути «винуватця» для виправлення?
До речі, як ви використовуєте ШІ у своїй роботі? Пишіть в коментарях, буде цікаво почитати.
Ми добре знаємо, що GPT вміє непогано генерувати код... але рев’ювити його він може (як виявилось) не гірше! Тож зараз я розкажу, як можна під`єднати ШІ, який буде автоматично розглядати зміни в коді та давати вам змістовний фідбек.
Такий тулінг буде корисним і для DevSecOps-інженерів, і для всіх, хто проводить код-ревʼю. Це не замінить інженера, але допоможе з рутиною.
Одразу покажу, як ця магія працює на практиці (але вимушений заблюрити частини коду, щоб не показати зайвого).
Перший кейс — в тестовому репозиторії я додав JSON-файл із трохи зламаним форматуванням та plainext-паролями, відтворивши security leak, та створив Merge Request.
GPT-4o це просто так не пропустить:
Як бачимо, ШІ не тільки виявив senstitive information, але й замаскував її у своєму коментарі та тегнув мене, щоб я це прибрав.
Або ось так: інше ревʼю, але суть та ж сама — перевірити, як впорається ШІ з комітом sensitive information:
Набагато потужніша аналітика, аніж тули типу GitLeaks, які статично роблять простий пошук за regex та wildcards.
Другий кейс — це приклади з фронтових Merge Requests (скриншоти колеги), виділю тільки певні моменти:
Модель GPT-4o демонструє непогані знання React. Ось цей дизайн з key — його всі знають, але всі забувають.
Або ось тут, ніби книжку прочитав:
Прикладів можу навести багато, але суть в тому, що ці рекомендації мають сенс! Звісно, не всі зауваження варті уваги, але велика частина є справді корисною.
Реалізація
Викладу ідею, як за одну годину можна на Python напрограмувати собі автоматизований рев`ю процес. Я б із задоволенням поділився вже готовим кодом, але, на жаль, не можу (company complains, you must understand). Тому викладу ідею з архітектурними блоками, щоб ви могли скласти це як конструктор.
Нотатка для DevOps-інженерів — цей код варто одразу додати в CI/CD-флоу для отримання максимального ефекту та автоматизації процесу. Його ідеально загорнути в одну CI/CD-джобу і виконувати на кожному MR/PR (тільки зробіть виняток для змін від renovate/dependabot).
До справи: беремо Python та пишемо код.
1. Нам знадобиться підʼєднання до ШІ-моделі
import openai
Це може бути GPT-4o від OpenAI. Але я рекомендую Azure OpenAI, оскільки Azure обіцяє не передавати код і не тренуватися на ньому.
from openai import AzureOpenAI
Запитайте у GPT, як це зробити, якщо це у вас вперше.
2. Отримуємо зміни в коді та коментарі цих до змін
Ми використовуємо GitLab, тож на його прикладі одразу дам ендпоінти:
- Code changes using MR changes API:
/api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/changes?access_raw_diffs=true
- Comments using MR notes API:
/api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/notes?order_by=created_at&sort=asc
де:
gitlab_request_id = os.getenv("CI_MERGE_REQUEST_IID") gitlab_project_id = os.getenv("CI_PROJECT_ID")
Для краси JSON-відповідь від GitLab треба буде розпарсити.
3. Надсилаємо код на ШІ-рев`ю
Не забуваємо на початку додати промпт з поясненнями, що робити, і складаємо це все в один запит:
review_request=f"{prompt}\n\n{notes}\n\n{changes}"
В промпті треба ввічливо попросити ШІ проаналізувати ваші зміни в коді за критеріями: щось типу такого (дуже спрощений варіант у порівнянні з тим, що використовуємо ми):
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! Отриману відповідь просто постимо як коментар
Створіть GitLab PAT token для цього з іменем AI MR review та направте POST на MR notes API:
/api/v4/projects/{gitlab_project_id}/merge_requests/{gitlab_request_id}/notes
Висновки
Імплементація цього рішення покращить процес для:
- DevSecOps: значно додасть security;
- Senior+ рівня: тепер можна знаходити помилки та недоліки в MR/PR, не вчитуючись у код — це зробить за вас ШІ;
- розробки/QA: одразу отримати на диво корисні зауваження та рекомендації;
- бізнесу: на виході отримати трохи кращий код.
Серед недоліків інструменту — вартість. Її складно спрогнозувати. Усе буде залежати від того, як багато ви плануєте передавати на рев`ю та яка власне модель буде робити рев`ю.
Є ризик, звісно, впасти в постійне вдосконалення: ідеї для покращення такого інструменту можуть бути нескінченними. Але не завжди більше контексту означає краще ревʼю. А ітеративне тестування змін вимагає певного часу. І ми можемо стати ще більш лінивими, але лінь — це рушій прогресу, чи не так?
А ще — уявіть можливості. Це буде ваш скрипт, тому, наприклад, можна:
- додати контекст завдання з Jira;
- зробити самарі для PM;
- написати release notes/release changes;
- пошукати вразливості.
Тож робимо наш код краще, а життя простішим. Welcome to AI era, dear colleagues!
53 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів