
Инструменты генерации кода на базе ИИ сейчас способны быстро создавать рабочий Python-код и даже целые приложения. При этом часто возникают трудности с поддержкой такого кода: он работает «сейчас», но со временем становится сложно понять и изменить его.
Типичная ошибка — просить ИИ начать проект с чистого листа. ИИ лучше работает при наличии ограничений и эталонных примеров, поэтому стоит заранее настроить базовую структуру проекта, установить ключевые библиотеки и вручную реализовать несколько примеров.
Реализуйте одну полнофункциональную часть самостоятельно — например, один конечный API-эндпоинт с зависимостями, обработкой ошибок, доступом к базе данных и валидацией. Такая эталонная реализация становится ориентиром, по которому ИИ будет подстраиваться.
Аналогично задайте структуру каталогов, импорты и конфигурацию тестов. Архитектурные решения лучше принимать вручную, а не полагаться на генерацию ИИ, чтобы сохранить единообразие кода.
В динамично типизированном Python ясные аннотации типов становятся важным ограничением. Требуйте аннотации для всех функций и используйте строгую проверку типов, чтобы ИИ не допускал неоднозначных возвращаемых значений и параметров.
Контракты данных через модели (например, Pydantic) дают ИИ единую интерпретацию структуры входных и выходных данных вместо обобщённого dict. Это повышает точность генерируемого кода и упрощает его проверку.
Выбирайте библиотеки, которые поддерживают типизацию и явные контракты, и делайте прохождение статических проверок обязательным. Автоматический цикл исправлений при провале проверок даёт лучшее качество, чем одна попытка без контроля.
Подготовьте краткую, конкретную документацию для ИИ — один файл в корне проекта с правилами и особенностями. Описывайте именно то, что уникально для проекта: структура, предпочтительные библиотеки, шаблоны кода, запрещённые приёмы и требования к тестированию.
В документации укажите примеры файлов и паттернов, к которым ИИ должен приводить новые реализации, а не общие фразы «следуйте лучшим практикам». Конкретные ссылки на примеры в кодовой базе позволяют ИИ точнее воспроизводить нужные подходы.
Формулируйте промпты так, чтобы они ссылались на существующие файлы и примеры. Не просите «добавить аутентификацию» абстрактно — укажите, где в проекте есть похожий сервис, какие библиотеки используются и какие тесты нужно создать.
Перед генерацией кода запрашивайте у ИИ план реализации. План должен перечислять файлы, которые будут созданы или изменены, зависимости между компонентами, применяемые паттерны и список необходимых тестов.
Требуйте от ИИ написание тестов, покрывающих не только «счастливые» сценарии, но и валидацию, пограничные случаи и обработку ошибок внешних сервисов или сбоя базы данных. При наличии шаблонов тестов в проекте укажите ИИ, как их использовать.
Проверяйте результаты по контрольному списку: прохождение строгой проверки типов, соответствие существующим паттернам, длина функций, покрытие тестами краевых случаев, наличие аннотаций типов и корректное использование оговорённых библиотек. Автоматизируйте проверки в pre-commit хуках и не допускайте коммитов с провалившимися тестами или линтингом.
Практический рабочий процесс может выглядеть так: вы настраиваете структуру и эталоны, создаёте краткие руководства и модели данных, формируете детальные промпты и принимаете план. ИИ реализует код, вы запускаете проверки, проверяете соответствие паттернам и после успешной валидации коммитите изменения.
В итоге роль разработчика смещается от рутинного написания к проектированию систем, созданию эталонов и поддержанию качества. Ключевая компетенция — умение создавать такие ограничения и практики, чтобы ИИ генерировал код, который легко читать, тестировать и поддерживать.


Комментариев