AI Code Reviewer: автоматизация код ревью

Мы, в компании 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 будете пользоваться)

Рассмотрим основные варианты и их назначение:

  1. Режим "general" — общий обзор PR

    python review.py AnyMaint/repo 42 --mode general --llm chatgpt
    • Назначение: Формирует краткое описание пул-реквеста #42 на основе его заголовка, описания и изменений. Подходит для быстрого ознакомления с содержимым PR, например, перед детальным разбором.

  2. Режим "issues" — выявление проблем

    python review.py AnyMaint/repo 42 --mode issues --llm gemini
    • Назначение: Выводит список потенциальных проблем в коде без их автоматической публикации. Это удобно для самостоятельной проверки и принятия решений о дальнейших действиях.

  3. Режим "comments" — автоматические комментарии

    python review.py AnyMaint/repo 42 --mode comments --llm chatgpt
    • Назначение: Добавляет комментарии к строкам кода в PR, где AI обнаружил возможные ошибки. Используется для автоматизации обратной связи в команде.

  4. Флаг "--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):

  1. Создание 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
  2. Настройка секретов:

    • В настройках репозитория (Settings > Secrets and variables > Actions > Secrets) добавьте TOKEN (GitHub PAT с правами repo) и OPENAI_API_KEY.

Использование локальной копии

Не всем может понравиться запуск скрипта из чужого репозитория на свой код, поэтому можно и скопировать код локально.

Код открытый, можно что-то добавить

AI Code Reviewer — проект с открытым исходным кодом, и будет здорово если вы что то туда добавите. Репозиторий доступен на github.com/AnyMaint/code-reviewer. Можно добавить, например поддержку других LLM, Gitlab или bitbucket, или улучшить промпт

@javax
03.04.2025 15:07 UTC
Первоисточник

Комментарии

@
05.04.2025 08:12 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@javax
05.04.2025 15:02 UTC
0

Всё верно, но это ответственность каждого. Я у себя в фирме разрешаю пользоваться LLM сколько угодно и сам пользоюсь, я не боюсь кражи каких то секретов.

05.04.2025 15:09 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
06.04.2025 05:25 UTC
0

Я не владелец, я CTO