Мы, в компании Anymaint, сделали скрипт для код ревью с помощью ChatGPT или Gemini.
Это Python-скрипт с открытым исходным кодом, который использует ChatGPT или Gemini для анализа пул-реквестов на GitHub.
Он умеет рассказывать о чем вообще пул реквест, выявлять проблемы или автоматически добавлять комментарии в PR. Скрипт доступен на github.com/AnyMaint/code-reviewer под лицензией BSD 3-Clause.
Вручную или через GitHub Actions
Скрипт можно запускать через GitHub Actions, но я думаю, что основное использование - ручное. Во первых можно проверить свой PR перед тем, как посылать коллегам, во вторых перед оценкой чьего то PR полезно посмотреть на мнение ChatGPT о чем он вообще и в третьих лучше отсеять вручную комментарии скрипта, которые не релевантны или не интересны.
Где взять скрипт?
Скрипт доступен на github.com/AnyMaint/code-reviewer под лицензией BSD 3-Clause. Можно скачивать, изменять, использовать.
Примеры использования
AI Code Reviewer поддерживает несколько режимов работы и параметров. Для запуска вам будут нужны переменные окружения GITHUB_TOKEN для доступа к PR и OPENAI_API_KEY или GOOGLE_API_KEY (смотря какой LLM будете пользоваться)
Рассмотрим основные варианты и их назначение:
Режим "general" — общий обзор PR
python review.py AnyMaint/repo 42 --mode general --llm chatgpt
Назначение: Формирует краткое описание пул-реквеста #42 на основе его заголовка, описания и изменений. Подходит для быстрого ознакомления с содержимым PR, например, перед детальным разбором.
Режим "issues" — выявление проблем
python review.py AnyMaint/repo 42 --mode issues --llm gemini
Назначение: Выводит список потенциальных проблем в коде без их автоматической публикации. Это удобно для самостоятельной проверки и принятия решений о дальнейших действиях.
Режим "comments" — автоматические комментарии
python review.py AnyMaint/repo 42 --mode comments --llm chatgpt
Назначение: Добавляет комментарии к строкам кода в PR, где AI обнаружил возможные ошибки. Используется для автоматизации обратной связи в команде.
Флаг "--full-context" — полный анализ
python review.py AnyMaint/repo 42 --mode general --full-context --llm chatgpt
Назначение: Передаёт в LLM не только изменения, но и полное содержимое файлов. Это улучшает качество анализа для сложных PR, но увеличивает объём обрабатываемых данных и может привести к менее точным замечаниям
Учёт затрат и ограничений
Скрипт не ограничивает количество токенов, поэтому при обработке больших пул-реквестов или использовании --full-context затраты на API OpenAI могут вырасти. Лучше учитывать этот фактор при работе с ChatGPT. Также не забывайте что не во всех компаниях можно посылать свой код в интернет чужой LLM
Интеграция с GitHub Actions
Для автоматизации ревью можно настроить запуск скрипта через GitHub Actions. Пример конфигурации для репозитория (например, AnyMaint/my-repo):
Создание workflow: Файл .github/workflows/code-review.yml:
name: AI Code Review on: pull_request: types: [opened, synchronize] jobs: review: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v4 - name: Checkout Code Reviewer Repository uses: actions/checkout@v4 with: repository: AnyMaint/code-reviewer path: code-reviewer - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install Dependencies run: | python -m pip install --upgrade pip pip install -r code-reviewer/requirements.txt - name: Run AI Code Review env: GITHUB_TOKEN: ${{ secrets.TOKEN }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | cd code-reviewer python review.py ${{ github.repository }} ${{ github.event.pull_request.number }} --mode comments --llm chatgpt
Настройка секретов:
В настройках репозитория (Settings > Secrets and variables > Actions > Secrets) добавьте TOKEN (GitHub PAT с правами repo) и OPENAI_API_KEY.
Использование локальной копии
Не всем может понравиться запуск скрипта из чужого репозитория на свой код, поэтому можно и скопировать код локально.
Склонируйте репозиторий: git clone https://github.com/AnyMaint/code-reviewer.git.
Скопируйте файлы (review.py, requirements.txt и др.) в корень вашего проекта или в папку, например, tools/.
Измените YAML:
yaml
- name: Checkout Repository uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.10' - name: Install Dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt # Или tools/requirements.txt - name: Run AI Code Review env: GITHUB_TOKEN: ${{ secrets.TOKEN }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | python review.py ${{ github.repository }} ${{ github.event.pull_request.number }} --mode comments --llm chatgpt # Или tools/review.py
Код открытый, можно что-то добавить
AI Code Reviewer — проект с открытым исходным кодом, и будет здорово если вы что то туда добавите. Репозиторий доступен на github.com/AnyMaint/code-reviewer. Можно добавить, например поддержку других LLM, Gitlab или bitbucket, или улучшить промпт