Как стать автором
Обновить

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

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2K

Мы, в компании 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.

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

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

  • Склонируйте репозиторий: 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, или улучшить промпт

Теги:
Хабы:
+1
Комментарии4

Публикации

Ближайшие события