Часть 5. Ограничения
Предыдущая часть
Мы так или иначе касались темы ограничений, но теперь дошли до полноценной части промпта с одноимённым названием. Собственно, ограничения нужны нам, чтобы задать модели какие-то технические или содержательные рамки.
Ограничить можно практически всё, что угодно. Например, мы можем выставить запрет на использование определённых технологий и библиотек или поставить ограничением необходимость обратной совместимости.
К ограничениям относятся и требования по безопасности. Например, даже люди, использующие агентов для разработки ежедневно, могут не разрешать агенту взаимодействовать с системой контроля версий.
В ограничения же можно задать и этап верификации написанного. Например, указать модели, как запустить SAST, линтер и другие инструменты. Что важно — такое ограничение не является заменой традиционной верификации кода. Но, если мы явно потребуем от модели успешного прохождения автоматических проверок, она будет исправлять своё решение для этого условия.
В ограничениях важно следить за тем, чтобы они не противоречили друг другу, а также сформулировать каждое ограничение нужно максимально конкретно, с возможностью проверить его выполнение. Если ограничений набрался список, нужно их приоритизировать, указав, какие обязательные, а какие желательные.
Для нашего примера мы могли бы задать такие ограничения:
Обязательно
• Никак не взаимодействуй с системой контроля версий.
• Все unit-тесты должны проходить.
• Не редактируй файлы тестов.
• Не добавляй никаких новых зависимостей в проект.
Желательно
• ESLint не должен выдавать ошибок (предупреждения допустимы, если не противоречат остальным пунктам).
В этом примере мы как определили для модели правила поведения, так и добавили дополнительные автоматические проверки, которые помогут модели понять, насколько её решение соответствует нашим критериям качества. Всё было разбито по приоритетам, а ESLint вынесен в желательные пункты, чтобы модель не циклилась на исправлении оформления кода в ущерб другим пунктам.
Отдельно обращу внимание, что формулировкой "все unit-тесты должны проходить" мы оставили агенту лазейку. Если бы не следующий пункт, он бы просто поменял файлы тестов под свой код и радостно бы сказал: "Я сделяль!"
🎤 feelin #ai