Промпт для AI Code Review: находи баги до того, как они попадут в прод
Готовый промпт для автоматического ревью кода с помощью AI. Находи уязвимости, N+1 запросы и нарушения code style за секунды — до пуша в репозиторий.
Ты открываешь пул-реквест коллеги. Там 800 строк изменений. Дедлайн через час. Ревью нужно сделать качественно, но времени нет. Знакомо?
AI-ревью кода решает именно эту проблему — и не только в авральных ситуациях. Правильно составленный промпт превращает Claude или GPT-4o в педантичного senior-разработчика, который за 30 секунд находит потенциальные уязвимости, архитектурные проблемы и нарушения стиля — и объясняет каждую проблему с конкретным примером исправления.
Задача: что решает этот промпт
Промпт предназначен для структурированного ревью кода по нескольким осям одновременно:
- Безопасность — SQL-инъекции, XSS, открытые секреты в коде, небезопасная обработка данных
- Производительность — N+1 запросы, неэффективные алгоритмы, избыточные вычисления
- Читаемость — нейминг, сложность функций, отсутствие документации
- Архитектура — нарушение принципов SOLID, неправильные зависимости, антипаттерны
Это не замена человеческому ревью — это первый фильтр, который отсекает очевидные проблемы и позволяет ревьюеру сосредоточиться на архитектурных решениях.
Code review — это не про поиск ошибок. Это про передачу знаний и повышение общего уровня команды. AI берёт на себя рутинную часть, освобождая людей для интеллектуальной.
Для кого
- Backend и frontend разработчики — для самопроверки перед пушем
- Тимлиды — для первичной фильтрации PR перед глубоким ревью
- Junior-разработчики — чтобы учиться на конкретных примерах исправлений
- Фрилансеры — для проверки чужого кода перед приёмкой работы
Промпт
Ты — опытный 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-ревью — это ценная статистика о том, какие ошибки ты делаешь чаще всего.
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 — это не серебряная пуля, но это дополнительный слой защиты, который стоит добавить в любой рабочий процесс разработки.