Давайте контекст прежде задачи
AI не видит ваш проект так, как видите вы. Он не знает версию вашего фреймворка, структуру файлов или соглашения, которые вы уже установили. Когда вы это пропускаете, он гадает — и гадает плохо. Хуже того, гадает уверенно, поэтому вывод выглядит правдоподобно ровно до того момента, как столкнётся с вашей реальной кодовой базой.
Сравните эти два промпта для одного и того же запроса.
Add a function to validate emails.
This is a TypeScript backend using Express and Zod for validation.
We already validate inputs with Zod schemas in src/schemas/.
Add an email validation schema in that style. Emails must be
lowercase, max 254 chars, and reject disposable domains from
the existing BLOCKED_DOMAINS list in src/config.ts.
Первый промпт порождает обобщённый код, который может использовать нежелательный для вас regex, в стиле, не совпадающем с вашей кодовой базой. Второй порождает код, который можно вставить как есть. Правило: указывайте стек, соглашения и существующие части, которые AI должен переиспользовать.
Полезный мысленный чек-лист перед тем, как нажать enter: язык и фреймворк (с версией, если она важна), относящиеся к делу файлы или модули, паттерны, уже принятые в проекте, и библиотеки, которые AI стоит предпочесть или избегать. Не нужны все четыре каждый раз — но если ответ изменился бы в зависимости от одного из них, назовите его. Если сомневаетесь, вставьте реальную сигнатуру, тип или конфиг, под который новый код должен подойти. Несколько строк существующего кода научат AI вашим соглашениям лучше, чем целый абзац описания.