Когда ревью превращается в пытку
Представьте понедельник. Вас ждет 27 пул-реквестов. Половина - это правка опечаток в комментариях, треть - банальный рефакторинг, и только два PR действительно требуют вашего мозга. Вы тратите 40 минут на поиск контекста, еще 20 - на формальные замечания о нейминге, и к концу дня понимаете, что сделали ровно ноль полезных ревью. Знакомо? В Avito это было ежедневной рутиной для 300+ разработчиков.
В 2025 году команда Avito публично заявила: мы теряем 15% рабочего времени senior-инженеров на тривиальные ревью. При 1000 PR в неделю это 400+ человеко-часов. Месяц - 1600 часов. Год - почти 20 тысяч часов, или 10 senior-разработчиков, которые могли бы создавать продукт, а не ставить лайки на чужие коммиты.
Автоматизация не там, где вы думаете
Большинство команд начинают с тупых правил в linters: 'максимальная длина функции - 50 строк', 'используй camelCase'. Avito прошел этот этап в 2023. Проблема в том, что статические анализаторы ловят 20% проблем, а остальные 80% - это архитектурные решения, контекст бизнес-логики, нарушение абстракций. Именно здесь нужен мозг. Или его цифровая копия.
Архитектура, которая работает на 1000 PR в неделю
Система построена на трех слоях:
- Сборщик контекста: агрегирует не только diff, но и связанные тикеты в Jira, историю изменений файла, документацию микросервиса. Без этого LLM слепа.
- Оркестратор задач: разбивает ревью на атомарные проверки - безопасность, перформанс, соглашения кода, архитектурные принципы. Каждую проверку выполняет отдельный агент.
- Мульти-модельный движок: здесь самое интересное. Avito использует кастомную модель, дообученную на 500k своих PR, но с важной фичей - роутинг запросов. Простые проверки идут на GPT-4o-mini (дешево), сложные архитектурные вопросы - на Claude-3.5-Sonnet, security - на специализированной модели типа DeepSeek-Coder-V2.
| Компонент | Технологии (2026) | Зачем нужен |
|---|---|---|
| Event Collector | Kafka, GitLab Webhooks | Ловит создание PR, пуши в ветки, комментарии |
| Context Builder | Python, GraphQL к Jira/Confluence | Собирает максимум контекста о задаче |
| Task Router | FastAPI, Redis для кеширования | Решает, какую модель и промпт использовать |
| LLM Orchestrator | OpenAI API, Anthropic API, vLLM для своих моделей | Выполняет запросы, управляет тарификацией |
| Feedback Loop | PostgreSQL, векторное хранилище Qdrant | Сохраняет, какие замечания разработчики приняли/отклонили |
1Что НЕ работает: наивный промптинг
Типичная ошибка - скормить diff в ChatGPT с просьбой 'сделай ревью'. Результат предсказуем: модель не знает ваших конвенций, не видит связанных файлов, не понимает бизнес-контекста. В Avito первые эксперименты дали 70% ложных срабатываний - разработчики просто игнорировали систему.
# КАК НЕ НАДО ДЕЛАТЬ
import openai
def naive_review(diff):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a code reviewer"},
{"role": "user", "content": f"Review this diff: {diff}"}
]
)
return response.choices[0].message.content
# Результат: общие фразы, пропущенные баги, раздражающие разработчиков2Что работает: контекст - это все
Avito собирает 15 типов контекста для каждого PR:
- Полная история изменений файла (последние 20 коммитов)
- Связанный тикет в Jira с описанием бизнес-требования
- Архитектурная документация сервиса (если ее нет, система помечает это как риск)
- Результаты статических анализаторов (SonarQube, CodeClimate)
- Тесты, связанные с изменяемым кодом
- Комментарии из предыдущих ревью по похожим изменениям
Этот подход резко снижает процент ложных срабатываний - с 70% до 12%. Если интересно, как автоматизировать документирование архитектуры, чтобы ее понимали и люди, и ИИ, у меня есть подробный разбор в статье про архитектуру как код.
3Секретная деталь: двухэтапный промптинг
Вместо одного большого промпта система использует каскад:
- Анализ типа изменений: модель классифицирует PR - 'новый фич', 'багфикс', 'рефакторинг', 'обновление зависимостей'.
- Выбор специализированного промпта: для security-правок активируется чеклист OWASP Top 10 2026, для рефакторинга - проверка на сохранение поведения.
Например, для проверки безопасности используется такой промпт:
SYSTEM_PROMPT = """You are a security expert reviewing code for vulnerabilities.
You have access to:
1. Full git diff of changes
2. List of changed dependencies with versions
3. This service's data classification (PII level 3)
Focus on:
- SQL injection in new query strings
- Hardcoded credentials or secrets
- Missing validation of user input
- Unsafe deserialization
- Cross-service authentication bypass
Return ONLY JSON with format: {"risk_level": "high|medium|low", "issues": [{"line": 42, "description": "...", "suggestion": "..."}]}
"""Ключевой момент: модель возвращает структурированные данные, а не текст. Это позволяет автоматически создавать комментарии в GitLab/GitHub, помечать PR метками (security-risk), и даже блокировать мердж при высоком риске.
Пошаговый план внедрения (без бюджета Avito)
Вы не Avito с их 500k датасетом PR. Но внедрить рабочую систему можно за 2-4 недели с бюджетом $500/месяц.
1Начните с одного типа проверок
Не пытайтесь охватить все. Выберите самую частую и болезненную проблему в вашей команде. У 80% команд это:
- Проверка нейминга переменных и функций
- Поиск забытых console.log / debug-кода
- Проверка формата коммитов
- Обнаружение захардкоженных конфигов
Напишите простой GitHub Action, который на каждый PR:
name: Auto Code Review
on: [pull_request]
jobs:
code-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run AI Code Review
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
# Собираем контекст
git diff ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} > diff.txt
# Запускаем Python скрипт с промптом
python review.py diff.txt ${{ github.event.pull_request.number }}2Собирайте feedback loop с первого дня
Каждый комментарий ИИ должен иметь кнопки 'Полезно' / 'Бесполезно'. Сохраняйте эти голоса. Через месяц у вас будет датасет из 200-500 размеченных примеров. Этого достаточно, чтобы fine-tune небольшую модель (например, CodeLlama-13B) под ваш кодстайл. У меня есть гайд, как это сделать без PhD в ML - QuillCode: разбор архитектуры своего кодинг-агента.
3Интегрируйте с существующим workflow
Разработчики ненавидят новые инструменты. Особенно если они требуют действий вне привычной среды. Ваша система должна:
- Работать внутри GitHub/GitLab UI
- Комментировать прямо в diff, а не присылать отчет в Slack
- Иметь механизм suppress - возможность пометить 'это ложное срабатывание, не показывать в будущем'
- Учитывать, что некоторые PR уже были просмотрены человеком (не спамить повторными комментариями)
Ошибки, которые сломают вашу систему
Самая частая ошибка - дать ИИ право вето на мердж. Это превратит разработчиков против системы. В Avito AI только рекомендует, а человек принимает решение. Исключение - критические security issues, но их список строго ограничен.
Другие грабли:
- Игнорирование false positives: если 30% комментариев ИИ - мусор, разработчики перестанут читать все остальные 70%.
- Отсутствие контекста: без доступа к Jira, Confluence, дизайн-документам ИИ будет делать элементарные ошибки.
- Попытка заменить человека: ИИ хорош для шаблонных проверок, но бесполезен для оценки архитектурных решений, где нужен опыт конкретного домена.
- Неучет стоимости: GPT-4 за $0.03/1K токенов на 1000 PR в неделю съест ваш бюджет. Начинайте с дешевых моделей (GPT-4o-mini, Claude Haiku).
Что дальше? Авторевью 2027
Avito уже экспериментирует с системой, которая не только комментирует, но и предлагает конкретные правки через Pull Request. ИИ анализирует замечания, делает локальный коммит с исправлениями, и создает новый PR с префиксом 'ai-fix:'. Разработчик просто мерджит его в основную ветку.
Еще более интересное направление - превентивный анализ. Система сканирует feature-ветки до создания PR и отправляет разработчику уведомление: 'В твоей ветке обнаружены потенциальные проблемы с безопасностью. Вот фикс, примени его перед созданием PR'.
Параллельно растет спрос на специалистов, которые умеют работать в симбиозе с ИИ. Если хотите прокачаться в этом направлении, посмотрите мой гайд Как стать незаменимым программистом с AI-ассистентами.
Стоит ли игра свеч?
После 6 месяцев эксплуатации системы Avito получил такие метрики:
- Время на первое ревью уменьшилось с 8 часов до 45 минут
- Количество security incidents, пропущенных на код-ревью, упало на 60%
- Разработчики тратят на 30% меньше времени на формальные замечания
- Но самое главное - senior-инженеры перестали ненавидеть понедельники
Система окупилась за 4 месяца просто за счет экономии времени разработчиков. И это без учета предотвращенных багов и security-дыр.
Если вы только начинаете - не копируйте Avito целиком. Начните с одного микросервиса, одной проверки, дешевой модели. Добавляйте контекст. Собирайте фидбэк. Через месяц у вас будет работающий прототип, через три - система, которая экономит часы каждый день.
А самое интересное впереди. Когда авторевью станет стандартом, следующая битва разгорится на уровне автотестирования. Кстати, если хотите подготовиться, у меня есть материал про автоматическую генерацию тестов с помощью RAG и LLM. Но это уже совсем другая история.