Разработка на основе спецификаций — это не опция, а необходимость, поскольку мы переходим от разработки «крутого приложения» к реализации реальных перспективных проектов, пишет на портале The New Stack Анкит Джейн, соучредитель и генеральный директор портала для разработчиков Aviator.
«Человек, который лучше всех умеет общаться, станет самым ценным программистом в будущем. Новый редкий навык — это написание спецификаций, которые полностью отражают ваши намерения и ценности», — сказал недавно Шон Гроув из OpenAI. По его словам, спецификации, а не подсказки или код, становятся фундаментальным аспектом программирования, и написание спецификаций — это новая сверхспособность.
Поскольку ИИ делает создание кода проще, чем когда-либо, стали очевидны две вещи. Во-первых, создание большего количества кода с помощью ИИ не устраняет сложность разработки ПО; оно просто позволяет абстрагироваться от нее в процессе отладки, тестирования и развертывания. И собственно написание кода никогда не было узким местом.
Почему не написание кода является узким местом
Узким местом является знание того, что нужно создать, сбор требований, понимание того, зачем его нужно создать, и, в конечном счете, понимание того, правильно ли он создан и соответствует ли намерениям. Гроув отмечает, что инженерные организации будут больше ощущать это давление по мере того, как модели ИИ будут становиться более совершенными.
Согласование дизайна в разных командах, устранение противоречивых требований, устранение технического долга, обеспечение строгости при проверке кода и сохранение институциональных знаний после ухода старших инженеров — вот основные проблемы, затрудняющие создание ПО, которые были сформулированы в анонсе Amazon своей IDE для ИИ и концепции разработки на основе спецификаций.
Главное, что определяет, добьется ли агент успеха или потерпит неудачу, — это качество предоставленного ему контекста. И если мы хотим, чтобы агенты преуспевали не только в разработке крутых приложений с нуля, но и в разработке сложных корпоративных кодовых баз, то для достижения этой цели необходимо предоставить агентам правильный контекст, или внедрить контекстную инженерию.
Но определить контекст сложно. Несмотря на то, что контекстные окна для больших языковых моделей (LLM) увеличиваются, мы уже знаем, что предоставление LLM более широкого контекста на самом деле снижает качество. Секрет успеха заключается в качестве предоставляемого контекста.
Спецификации — это «уточненный контекст», который предоставляет LLM ровно столько информации, сколько нужно для эффективной работы без перегрузки.
Что такое разработка на основе спецификаций?
Разработка на основе спецификаций — это практика написания спецификаций перед написанием кода или обращением к инструменту ИИ с просьбой написать код. Вместо того чтобы просто испытывать судьбу с подсказками, независимо от того, насколько тщательно они составлены, а затем запрашивать исправления, разработка на основе спецификаций начинается с четких и структурированных документов, в которых отражены требования, намерения и ограничения.
В эпоху ИИ-кодирования спецификация выступает в качестве руководства для ИИ-агентов, на которое они могут ссылаться, сверять с ним свою работу и использовать его, чтобы оставаться в курсе событий. Это ориентир, своего рода Полярная звезда, которая позволяет агентам выполнять более масштабные и сложные задачи, не упуская при этом из виду цель.
Разработка на основе спецификаций заменяет хаос разрозненного, ориентированного на оперативность вайб-кодинга структурированным, надежным способом выражения программистами своих целей. Это позволяет разработчикам быть более конкретными в отношении конкретных деталей, а агенту — заблаговременно сообщать о своем плане.
Спецификация становится своего рода понятной пользователю супер-подсказкой с контролем версий.
Как работает разработка на основе спецификаций?
Если вы просто предложите ИИ «реализовать разрешения для пользователей», это может создать стандартную систему управления доступом на основе ролей (RBAC) с ролями администратора и пользователя. На первый взгляд, код может выглядеть отточенным и готовым к работе. Но это не избавит вас от вопросов о том, нужны ли вам подробные разрешения, окна временного доступа или подключения к существующему сервису идентификации. Сгенерированный код может выглядеть профессионально и полно, но скрывать тот факт, что он решает неправильную проблему.
Разработка на основе спецификаций требует от инженеров неспешного, четкого осмысления того, что они разрабатывают, и четкой и структурированной коммуникации по этому поводу:
- конкретные форматы и типы данных ввода-вывода;
- явные бизнес-правила и крайние случаи;
- ограничения интеграции и существующие системные зависимости;
- требования к производительности и ожидаемый масштаб;
- правила обработки ошибок и проверки достоверности;
- требования к безопасности и соответствию нормативным требованиям.
После этого агенты составляют список задач, которые необходимо выполнить для создания кода в соответствии со спецификациями. Инженеры по-прежнему могут взаимодействовать с агентами с помощью подсказок и направлять их.
От коллаборации разработчика и агента до многопользовательского программирования
Создание ПО с помощью агентов ИИ — это не одиночный вид спорта, особенно в крупных инженерных организациях. Современные проекты часто включают в себя несколько репозиториев, микросервисов, подсказок и спецификаций. Представьте, что вы добавили кнопку «Поделиться» к своим спецификациям, чтобы делиться опытом со всей командой и делегировать выполнение.
Вот тут-то и пригодятся ранбуки (runbooks). Они предоставляют командам общее пространство для совместной работы над подсказками, согласования рабочих процессов выполнения и ведения четкого контрольного журнала решений.
Ранбуки — это недостающее звено между спецификациями продукта и кодом. Это не просто документация, это живая база знаний, которую другие пользователи могут использовать, расширять и адаптировать. Вы можете создавать что-то поверх чужого ранбука, переносить контекст из одного репозитория или пути кода в другие, разрабатывать свои собственные спецификации и получать отзывы или объединять заинтересованные стороны и кодирующих агентов в рамках единой структурированной сессии.
Применение ранбуков позволит превратить программирование с помощью ИИ из индивидуальных экспериментов в командные инженерные проекты.