Я постоянно сталкиваюсь со скепсисом относительно самой возможности создания качественного программного продукта при помощи LLM, а когда говорю, что я создаю приложения даже не глядя в код, мне просто не верят. Действительно, при помощи вайб-кодинга в его классическом понимании ничего дельного пока что не построить, но есть несколько основных техник которые я использую, чтобы добиваться качественного результата.
Т.к. я использую Claude Code на подписке MAX, я буду объяснять на его примере. Я запускаю его с флагом --dangerously-skip-permissions. Во-первых, файл claude.md должен постоянно меняться и подстраиваться под проект и ваш стиль управления. Как только вы встречаете нежелательное поведение агента, например, он прописал в код константу, которая должна быть в конфиге, пишете ему: "все константы хранятся в конфиге, запиши это себе в claude.md". Если что-то забыл, то же самое: "запиши себе в claude.md, что после завершения задания ты обязательно запускаешь тесты".
Второе: есть вещи строго связанные с claude и claude code - ключевые слова. Любой мой запрос начинается с "Ultrathink, вспомни CLAUDE.md. " Эта фраза автоматом печатается когда я нажимаю CTRL-ALT-X - так часто это используется. Первое слово, Ultrathink, значит, что модель должна выделить себе максимальный буфер (32К) под размышления. "вспомни CLAUDE.md" - действительно заставляет модель "вспоминать" принципы написанные в этом документе и резко снижает частоту их нарушения.
Третье: стандартный флоу фичи.
"Ultrathink, вспомни CLAUDE.md. Пусть теперь приложение работает из контейнера вместо ручного запуска на сервере. Сделай скрипт деплоя на vps, предусмотри blue-green, и откат одной кнопкой или если не сработали пост-деплойные тесты. Создай тикет в docs/tasks с полным описанием плана работ"
Изучить план работ, поправить его вручную или через промпты.
"Ultrathink, вспомни CLAUDE.md. Выполни docs/tasks/deploy.md"
Смотрим что агент делает. Если видим что-то не то, пишем поправляющий промпт. Обычно модель делает всё правильно, но не до конца, но при этом заявляет, что всё готово, супер-пупер, что делать дальше, хозяин?
"Ultrathink, вспомни CLAUDE.md. Критически оцени, всё ли ты сделал и правильно ли?" - это самый важный промпт в разработке. Он заставляет агента взглянуть на созданный им код не с позиции создателя, а с позиции ревьювера. Естественно, он сразу находит, что сделано только 15-20% от задачи.
"Ultrathink, вспомни CLAUDE.md. Делай всё качественно и до конца" - он снова что-то сделает, и снова не всё, поэтому переходим на п.5. Но если и после п.5. он ответит, что всё сделано идеально, то:
"Ultrathink, вспомни CLAUDE.md. Критически оцени выполнение docs/tasks/deploy.md" - и тут внезапно окажется, что агент позабыл само задание, сделал не то и не так. Не страшно, переходим на п.6.
Рано или поздно, модель заявит, что в результате критической оценки, она выяснила, что задание выполнено на 100% - только тогда вы идёте проверять что там на самом деле работает.
Вот так, фича за фичей, тест за тестом, вы можете создавать приложения малой и средней сложности. Существует множество хитростей, подводных камней, техник и подходов. Я перепробовал многое, но описанный выше флоу остаётся для меня самым простым и эффективным. И нет, этот подход не позволит не-специалисту создавать программные продукты. Решения агента необходимо постоянно проверять, его самого нужно направлять в правильную сторону. А для этого нужно самому иметь серьёзный опыт создания софта. Без этого опыта вы не поймёте когда нейронка начинает переусложнять решение или попросту обманывать вас говоря что "всё готово и работает", когда это на самом деле не так. Но в руках грамотного инженера, агентные LLM - это мощнейший инструмент позволяющий разгрузить голову от рутины и создавать полноценные продукты намного быстрее, чем вручную.
Если интересно посмотреть на пример кода созданный по данной методике, его можно найти тут: https://github.com/aiseeq/savanna - я надеюсь, что найду время продолжить серию статей об этой разработке.