До справи: беремо 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