Vibe-кодинг: как писать код через GPT и LLM
Vibe-кодинг: как писать код через GPT и LLM

Полная версия

Vibe-кодинг: как писать код через GPT и LLM

Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
2 из 3

Парадокс. Кажется, что два шага тратят больше времени, чем один. На практике же код получается более цельным и тестируемым, а ручные правки после первого слива в 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('