Сюда же добавляем проверки, линтеры, статические анализаторы и тесты. Тесты в том числе на архитектуру: да, мы тестируем даже структуру приложения.
Благодаря всему этому нормальный код получается генерировать даже на слабых моделях. Я пробовал Qwen 2.5 на 7B, куда уж скромнее, причём не агентом, а просто в чате, и с некоторыми элементами она вполне справилась.
Куски, которые приходится дорабатывать руками, всё равно остаются, и техдолг тоже копится. Мы его отсматриваем, аккуратно фиксируем и выделяем отдельные итерации, чтобы он не разрастался. Магии тут нет: основное качество даёт не волшебная модель, а то, как организована работа с ней. По сути, чем сильнее мы ограничиваем пространство решений, тем лучше работает ИИ. Есть шаблоны, библиотеки, правила и тесты, и она неплохо штампует код. Если нужно самой принимать решения, и начинается лотерея. Тесты тут, кстати, служат не только проверкой готового кода, но и частью спецификации: мы заранее описываем, что считать правильным, а модель пытается в эти рамки попасть.
Но не везде всё гладко.
С моделированием у нас не очень получилось. ИИ не знает вашу предметную область, она сидит в головах экспертов. Рассказать LLM может только про очень распространённое, например про двойную бухгалтерскую запись, которую она видела миллион раз. В терминах Domain-Driven Design такой домен называется универсальным. А с основным приходится ходить вручную и клеить стикеры. Можно поспрашивать модель про термины, пусть расскажет хотя бы то, что знает, но выхлоп меньше, чем хотелось бы.
Второй случай: границы систем. Допустим, есть класс на 50 полей, и заполнить их надо из десяти источников. Начинаешь ходить в эти сервисы и выясняется, что документация неактуальна, результат работы совсем не тот, что ожидался, и вообще валятся какие-то ошибки. Тут ИИ тоже буксует, приходится сидеть и разбирать всё руками. Хотя польза от неё в таких историях всё-таки есть, но об этом чуть позже.
Зато есть неплохой бонус. Когда всё стандартизировано и правила понятны, ИИ хорошо находит нарушения инвариантов. Недавно я писал про это в своём
Telegram-канале.
Натравливаешь её и просишь: проверь, где у нас нарушены инварианты и правила безопасности. Например, можно прилепить комментарий к посту, к которому у пользователя нет доступа, а мы про эту проверку забыли. В стандартизированном коде такое ловится сильно проще.
Так что завод у нас в каком-то смысле есть, просто не тот, который обычно представляют. У нас есть отдел проектирования, где люди по старинке стоят у кульманов с линейками и что-то чертят. А на конвейер уже приходят понятные чертежи: ясно, как делать детали, и в конце концов всё превращается в готовое изделие. Уберите людей с проектирования, и лента будет штамповать код, не понимая, что вообще происходит.
Пару лет назад у нас выходил ролик про перспективы IT-рынка. Я там говорил, что уже наметилось разделение на кодеров, которые не хотят читать требования, а хотят просто программировать, и инженеров, которым нужно разобраться в процессе целиком. И что со временем кодеры станут не нужны, причём даже без всякого ИИ. Мне писали, что я неправ. Но прогресс сделал это чуть быстрее, чем я ожидал.