Ты открываешь пул-реквест коллеги. Там 800 строк изменений. Дедлайн через час. Ревью нужно сделать качественно, но времени нет. Знакомо?

AI-ревью кода решает именно эту проблему — и не только в авральных ситуациях. Правильно составленный промпт превращает Claude или GPT-4o в педантичного senior-разработчика, который за 30 секунд находит потенциальные уязвимости, архитектурные проблемы и нарушения стиля — и объясняет каждую проблему с конкретным примером исправления.

Задача: что решает этот промпт

Промпт предназначен для структурированного ревью кода по нескольким осям одновременно:

  • Безопасность — SQL-инъекции, XSS, открытые секреты в коде, небезопасная обработка данных
  • Производительность — N+1 запросы, неэффективные алгоритмы, избыточные вычисления
  • Читаемость — нейминг, сложность функций, отсутствие документации
  • Архитектура — нарушение принципов SOLID, неправильные зависимости, антипаттерны

Это не замена человеческому ревью — это первый фильтр, который отсекает очевидные проблемы и позволяет ревьюеру сосредоточиться на архитектурных решениях.

Code review — это не про поиск ошибок. Это про передачу знаний и повышение общего уровня команды. AI берёт на себя рутинную часть, освобождая людей для интеллектуальной.

Для кого

  • Backend и frontend разработчики — для самопроверки перед пушем
  • Тимлиды — для первичной фильтрации PR перед глубоким ревью
  • Junior-разработчики — чтобы учиться на конкретных примерах исправлений
  • Фрилансеры — для проверки чужого кода перед приёмкой работы
ℹ Какие модели подходят
Промпт отлично работает с Claude Sonnet 4.6 (лучшее следование сложным инструкциям) и GPT-4o (хорошая осведомлённость о современных фреймворках). Для объёмных PR (1000+ строк) используй Claude — у него большее контекстное окно.

Промпт

Ты — опытный senior-разработчик, проводящий code review. Твоя задача — проверить 
предоставленный код и дать структурированную обратную связь.

<context>
Язык/фреймворк: [УКАЖИ ЯЗЫК — Python/TypeScript/Go/и т.д.]
Тип кода: [УКАЖИ — API endpoint / компонент UI / утилита / модель данных]
Основная цель кода: [КРАТКО ОПИШИ, что должен делать этот код]
Стандарты команды: [ОПИШИ — например: PEP8, ESLint Airbnb, без any в TypeScript]
</context>

<code>
[ВСТАВЬ КОД СЮДА]
</code>

Проведи ревью в два прохода:

**Проход 1 — поиск проблем.** Проверь по каждой из четырёх осей:

1. БЕЗОПАСНОСТЬ — уязвимости OWASP Top 10, секреты в коде, небезопасные операции
2. ПРОИЗВОДИТЕЛЬНОСТЬ — N+1 запросы, неэффективные циклы, избыточные вычисления  
3. ЧИТАЕМОСТЬ — нейминг, длина функций (>20 строк — подозрительно), отсутствие типов
4. АРХИТЕКТУРА — нарушения SOLID, God object, неправильная обработка ошибок

**Проход 2 — верификация.** Перечитай найденные проблемы. Убери те, которые:
- Основаны на неполном контексте
- Являются делом вкуса, а не реальной проблемой
- Не подтверждаются кодом

**Формат вывода:**

Для каждой подтверждённой проблемы:
- 🔴 КРИТИЧНО / 🟠 ВАЖНО / 🟡 НЕЗНАЧИТЕЛЬНО
- Строка(и): [номера строк]
- Проблема: [одно предложение]
- Почему это проблема: [1-2 предложения]
- Исправление:
```[язык]
[исправленный фрагмент]

В конце — краткое резюме: общая оценка кода (1-10), главный риск, одна похвала (что сделано хорошо).





💡 Ключевой трюк
Блок <context> — самая важная часть промпта. Чем точнее ты описываешь язык, фреймворк и стандарты команды, тем меньше ложных срабатываний. Без контекста AI будет ругать паттерны, которые в твоём проекте являются нормой.
## Пример результата **Входной код (Python + Django):** ```python def get_user_orders(user_id): orders = Order.objects.filter(user_id=user_id) result = [] for order in orders: items = OrderItem.objects.filter(order=order) result.append({"order": order, "items": list(items)}) return result

Вывод AI:


🔴 КРИТИЧНО | Строки: 3-5

Проблема: N+1 запрос к базе данных

Почему это проблема: Для каждого заказа выполняется отдельный SQL-запрос за items. При 100 заказах — 101 запрос к БД. При нагрузке это убьёт производительность и перегрузит соединения.

Исправление:

def get_user_orders(user_id):
    orders = Order.objects.filter(
        user_id=user_id
    ).prefetch_related('orderitem_set')
    return [
        {"order": order, "items": list(order.orderitem_set.all())}
        for order in orders
    ]

🟡 НЕЗНАЧИТЕЛЬНО | Строки: 1

Проблема: Отсутствуют аннотации типов и docstring

Почему это проблема: Неясно, что возвращает функция. IDE не сможет предложить автодополнение для элементов result.

Исправление:

from typing import TypedDict
from .models import Order, OrderItem

class OrderWithItems(TypedDict):
    order: Order
    items: list[OrderItem]

def get_user_orders(user_id: int) -> list[OrderWithItems]:
    """Возвращает заказы пользователя вместе с позициями."""
    ...

Резюме: 5/10. Главный риск — деградация производительности под нагрузкой из-за N+1. Хорошо: логика чистая, функция делает одно дело.


Как работает процесс


graph TD
    A[Вставляешь код в промпт] --> B[Заполняешь контекст]
    B --> C{Выбор модели}
    C -->|До 500 строк| D[GPT-4o / Claude Sonnet]
    C -->|500+ строк| E[Claude Sonnet 4.6]
    D --> F[Проход 1: поиск проблем]
    E --> F
    F --> G[Проход 2: верификация]
    G --> H[Структурированный отчёт]
    H --> I{Есть критичные?}
    I -->|Да| J[Исправляешь до ревью]
    I -->|Нет| K[Отдаёшь на человеческое ревью]
    J --> K

Вариации промпта

РежимКогда использоватьЧто добавить в промпт
Security-onlyПеред деплоем в прод«Фокусируйся ТОЛЬКО на уязвимостях безопасности. Игнорируй стиль и производительность»
Quick scanБыстрая проверка«Выведи только 🔴 КРИТИЧНО проблемы. Максимум 5 пунктов»
Junior modeОбучение разработчика«Объясняй каждую проблему так, будто разговариваешь с начинающим разработчиком. Добавляй ссылки на паттерны»
Diff reviewРевью PR«Тебе передаётся git diff. Комментируй только изменённые строки, не весь файл»
ArchitectureРевью больших изменений«Сосредоточься на архитектурных решениях. Игнорируй мелкие стилистические замечания»

Советы по улучшению

1. Добавляй контекст итерационно. Если AI даёт много ложных срабатываний — добавь в <context> раздел <known_patterns> с описанием ваших специфических паттернов:

<known_patterns>
- Мы намеренно не используем TypeScript strict mode в legacy файлах
- Все функции с суффиксом _unsafe работают без валидации по дизайну
</known_patterns>

2. Используй двухшаговое ревью. Сначала запусти промпт на весь файл, затем — отдельно на самые сложные функции с просьбой «объясни логику этого блока строка за строкой». Так ловятся логические ошибки, которые AI пропускает при беглом просмотре.

3. Сохраняй результаты. Веди лог AI-ревью — это ценная статистика о том, какие ошибки ты делаешь чаще всего.

⚠ Ограничения
AI не видит контекст выполнения: не знает, какие данные реально приходят в функцию, какова нагрузка на систему, каковы бизнес-требования. Критичные изменения (аутентификация, платёжная логика, работа с персональными данными) всегда должны проходить через человеческое ревью вне зависимости от AI-вердикта.

4. Встрой в CI/CD. Промпт можно автоматизировать через Claude API — запускать на каждый PR через GitHub Actions. Пример минимального скрипта:

import anthropic

client = anthropic.Anthropic()

def review_diff(diff: str, language: str) -> str:
    prompt = f"""
    <context>
    Язык: {language}
    Тип: git diff из pull request
    </context>
    <code>
    {diff}
    </code>
    Проведи code review. Фокус: только критичные и важные проблемы.
    """
    message = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=2048,
        messages=[{"role": "user", "content": prompt}]
    )
    return message.content[0].text

Лучший код — тот, который никогда не доходит до прода с багами. AI code review — это не серебряная пуля, но это дополнительный слой защиты, который стоит добавить в любой рабочий процесс разработки.