
Полная версия
Vibe-кодинг: как писать код через GPT и LLM
Парадокс. Кажется, что два шага тратят больше времени, чем один. На практике же код получается более цельным и тестируемым, а ручные правки после первого слива в CI падают с 5 до 1–2 на MR (данные внутренних метрик Tinkoff Tech, март 2025).
5.2 Self-review модели: автоматизированный премьер-контроль
Задача: Модель сама проводит предварительный аудит своего кода до отправки на человеческое ревью.
Порядок действий:
Генерация кода.
Запрос самопроверки:
«Проведи self-review: найди уязвимости, нарушения стиля, предложи улучшения.»
Получение списка замечаний (diff-патчей в формате unified – модель умеет генерировать корректные git-патчи).
Автоматическое применение – в IDE через Cursor или Copilot Workspace.
Преимущества:
Снижение нагрузки на командный ревью.
Раннее выявление XSS/SQL-инъекций, недочётов в граничных условиях.
Повышение согласованности стиля (согласно внутреннему Style Guide).
Частая ошибка. Просить одноразовый self-review без чёткого запроса о формате. Модель возвращает разрозненные комментарии в тексте, которые трудно влить в CI. Всегда уточняйте:
«Отформатируй самопроверку в виде git-патча, показывая старый и новый варианты.»
5.3 Пример: XSS-уязвимость исправлена до тестов
Сценарий: Нужно вывести на страницу комментарии пользователей, при этом обезопасить ввод от XSS.
Этап Chain-of-Thought:
«Опиши, какие шаги нужны, чтобы обезопасить HTML-вывод комментариев пользователей.»
Ответ:
Выбор whitelist-библиотеки для экранирования.
Создание функции sanitize().
Интеграция в шаблонизатор.
Обёртка вызова перед рендером.
Генерация кода:
«Сгенерируй на Node.js модуль sanitize.js с использованием библиотеки DOMPurify.»
const createDOMPurify = require('dompurify'); const { JSDOM } = require('jsdom'); const window = (new JSDOM('')).window; const DOMPurify = createDOMPurify(window); function sanitize(input) { return DOMPurify.sanitize(input, { ALLOWED_TAGS: ['b','i','em','strong','a'], ALLOWED_ATTR: ['href'] }); } module.exports = { sanitize };
Self-review запроса:
«Проведи self-review этого модуля, найди потенциальные уязвимости и предложи правки в патч-формате.»
Модель генерирует патч:
–– sanitize.js +++ sanitize.js @@ -1,3 +1,5 @@ -const createDOMPurify = require('dompurify'); +const createDOMPurify = require('dompurify'); +// Добавляем проверку типа входных данных +if (typeof input !== 'string') throw new TypeError('Expected input to be a string'); const { JSDOM } = require('jsdom');
Интеграция в тесты:
«Напиши unit-тест для sanitize() на Jest, проверяющий экранирование ')).not.toContain('

