нейропоток
КейсыПрактик

AI code review в команде: как настроить за один день

Как подключить AI к процессу code review в команде: GitHub Actions + Claude API, автоматические комментарии к PR, снижение нагрузки на разработчиков. Реальный опыт настройки.

Павел·5 мин чтения
AI code review в команде: как настроить за один день
Поделиться:TelegramVK

У нас была проблема: code review стал бутылочным горлышком. Один-два старших разработчика, очередь из PR, ревью идёт по 2-3 дня. Мелкие замечания — опечатки, нарушения стиля, забытые console.log — занимали то же время что и архитектурные вопросы.

Решили подключить AI для первого прохода. Не вместо ревьюеров, а чтобы они тратили время на смысл, а не на синтаксис.

Вот как это выглядит сейчас и как мы это настроили.

Что делает AI в нашем процессе

AI ревьюер запускается автоматически на каждый PR. Он проверяет:

  • Стиль и соглашения по коду (ESLint/Pylint правила, но с объяснением)
  • Очевидные баги: off-by-one, null reference, необработанные ошибки
  • Безопасность: hardcoded secrets, SQL injection риски, небезопасный ввод
  • Читаемость: сложные функции, магические числа, неинформативные имена
  • Тесты: покрыт ли новый код тестами

Что он не делает: не оценивает архитектурные решения, не знает бизнес-контекст, не принимает финальное решение об апрув/реджект. Это остаётся за людьми.

Результат: 40% мелких замечаний теперь закрывается до того как живой ревьюер смотрит PR. Ревью в среднем сократилось с 3 дней до 1.

Как работает интеграция

Схема простая:

  1. Открыт PR → GitHub Actions запускает скрипт
  2. Скрипт берёт diff PR через GitHub API
  3. Передаёт diff в Claude API с инструкциями ревьюера
  4. Ответ Claude постится как комментарий к PR

Всё это работает через GitHub Actions — бесплатно для публичных репо и в лимитах бесплатного тарифа для приватных.

Настройка: шаг за шагом

Шаг 1: API ключи в секретах GitHub

Идём в Settings → Secrets and variables → Actions:

  • ANTHROPIC_API_KEY — ключ от Claude API
  • GITHUB_TOKEN — уже есть по умолчанию в Actions

Шаг 2: Скрипт ревью

Создаём scripts/ai_review.py:

python
import os import sys import json import requests import anthropic GITHUB_TOKEN = os.environ["GITHUB_TOKEN"] ANTHROPIC_API_KEY = os.environ["ANTHROPIC_API_KEY"] REPO = os.environ["GITHUB_REPOSITORY"] PR_NUMBER = os.environ["PR_NUMBER"] def get_pr_diff() -> str: """Получаем diff PR через GitHub API.""" url = f"https://api.github.com/repos/{REPO}/pulls/{PR_NUMBER}" headers = { "Authorization": f"token {GITHUB_TOKEN}", "Accept": "application/vnd.github.v3.diff" } response = requests.get(url, headers=headers) response.raise_for_status() return response.text def review_with_claude(diff: str) -> str: """Отправляем diff в Claude и получаем ревью.""" client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY) # Обрезаем diff если он слишком большой if len(diff) > 50000: diff = diff[:50000] + "\n...[diff truncated]" message = client.messages.create( model="claude-3-5-haiku-20241022", # Haiku — быстро и дёшево для ревью max_tokens=2000, messages=[{ "role": "user", "content": f"""Ты — опытный разработчик, делаешь code review. Проверь следующий diff и найди: 1. Потенциальные баги и ошибки 2. Проблемы безопасности (hardcoded secrets, SQL injection, небезопасный ввод) 3. Нарушения читаемости (неинформативные имена, магические числа, сложные функции) 4. Отсутствующие тесты для нового кода 5. Нарушения общих best practices Формат ответа: - Если нашёл проблемы: список конкретных замечаний с указанием файла и строки - Если всё хорошо: короткое "LGTM" с одним предложением о том что хорошо - В конце: краткое резюме Будь конкретным. Не выдумывай проблемы, которых нет. Если не уверен — не пиши. Diff: {diff}""" }] ) return message.content[0].text def post_review_comment(review: str) -> None: """Постим ревью как комментарий к PR.""" url = f"https://api.github.com/repos/{REPO}/issues/{PR_NUMBER}/comments" headers = { "Authorization": f"token {GITHUB_TOKEN}", "Accept": "application/vnd.github.v3+json" } body = f"## 🤖 AI Code Review\n\n{review}\n\n---\n*Автоматическое ревью — не заменяет ревью человека*" response = requests.post(url, headers=headers, json={"body": body}) response.raise_for_status() print(f"Комментарий добавлен: {response.json()['html_url']}") if __name__ == "__main__": diff = get_pr_diff() if not diff.strip(): print("Diff пустой, пропускаем") sys.exit(0) review = review_with_claude(diff) post_review_comment(review)

Шаг 3: GitHub Actions воркфлоу

Создаём .github/workflows/ai-review.yml:

yaml
name: AI Code Review on: pull_request: types: [opened, synchronize] jobs: review: runs-on: ubuntu-latest # Не запускаем ревью на PR от ботов if: github.actor != 'dependabot[bot]' steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: pip install anthropic requests - name: Run AI review env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} GITHUB_REPOSITORY: ${{ github.repository }} PR_NUMBER: ${{ github.event.pull_request.number }} run: python scripts/ai_review.py

Готово. Пушим, открываем тестовый PR — через 30-60 секунд появится комментарий от AI.

Сколько это стоит

Claude Haiku — самая дешёвая модель Anthropic. Цены актуальные на апрель 2026:

  • Input: $0.80 за 1M токенов
  • Output: $4.00 за 1M токенов

Средний diff для одного PR — 3-5k токенов. Ревью — ещё 1-2k токенов.

При 50 PR в месяц — выходит меньше $2. Для команды это несущественно.

Инфо

Можно использовать claude-3-5-sonnet для более глубокого анализа (~в 5-10 раз дороже) или claude-3-haiku для максимальной экономии. Для большинства задач ревью Haiku достаточно.

Тонкая настройка под проект

Промпт выше — базовый. Его нужно адаптировать под ваш стек:

Python/Django проект:

Обращай особое внимание на: - ORM-запросы (N+1 проблема, select_related/prefetch_related) - Django security: CSRF, XSS, SQL injection через ORM - Правила PEP 8 и type hints

TypeScript/React:

Проверяй: - TypeScript типы: any, as, ! (non-null assertion) без причины - React: лишние рендеры, забытые useCallback/useMemo - Асинхронность: необработанные промисы, race conditions

Размер diff: Если PR большой (10+ файлов), лучше ревьюить файлы по одному или разбить PR. AI теряет контекст на очень больших диффах.

Что мы заметили после месяца

Честно — были и минусы.

Плюсы:

  • Мелкие замечания закрываются ещё до ревью человека
  • Junior-разработчики получают фидбэк быстрее и учатся
  • Ревьюеры фокусируются на архитектуре, не на синтаксисе

Минусы:

  • Иногда AI галлюцинирует несуществующие проблемы — особенно если diff неоднозначный
  • Разработчики иногда игнорируют комментарии AI как «просто бот» — помогает если явно сказать в команде «AI ревью обязателен перед запросом человека»
  • На рефакторинговых PR с большим diff качество падает

Итого: не серебряная пуля, но реальная экономия времени. Стоит попробовать — настраивается за полдня.


Если хотите автоматизировать больше процессов с AI — смотрите гайд по n8n AI агентам для бизнес-процессов. Или Make.com для тех, кто без кода.