Как просить ИИ писать понятнее
Качество AI-кода на 80% определяется промптом. Если результат запутанный — почти всегда виноват не ИИ, а формулировка. Хороший промпт ограничивает ИИ настолько, что он не успевает добавить лишнего.
1. Дай контекст
Кто будет читать этот код? «Junior уровень, без опыта в TypeScript» сразу убирает дженерики, advanced-типы и сложные паттерны. ИИ напишет проще.
2. Запрети лишнее
«Без классов, без try/catch, без внешних библиотек кроме X». Звучит грубо — работает идеально. ИИ стандартно тянет всё подряд; список запретов отрезает половину мусора.
3. Дай конкретику
Не «сделай форму», а «форма с полями email и password, валидация email регуляркой, на submit вызывает onSubmit(data)». Чем точнее ТЗ — тем меньше места для импровизации.
4. Попроси короткое
«Минимально работающее решение, не оптимизированное», «без комментариев», «строк не больше 30». ИИ привык быть многословным. Заставьте его ужаться.
// Пример хорошего промпта vs плохого.
//
// ПЛОХО: "сделай форму регистрации"
// ХОРОШО:
//
// "Напиши React-компонент <RegisterForm/> на TypeScript:
// - поля: email, пароль, имя
// - валидация: email регуляркой, пароль >= 8 символов
// - на submit вызывает onSubmit(data)
// - без классов, без try/catch, без либ кроме React
// - подписи на русском, кнопка 'Зарегистрироваться'"
//
// AI получит результат:
export function RegisterForm({ onSubmit }) {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [name, setName] = useState('');
const [errors, setErrors] = useState({});
function handleSubmit(e) {
e.preventDefault();
const errs = {};
if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) errs.email = 'Неверный email';
if (password.length < 8) errs.password = 'Минимум 8 символов';
if (Object.keys(errs).length) return setErrors(errs);
onSubmit({ email, password, name });
}
return (
<form onSubmit={handleSubmit}>
<input value={email} onChange={(e) => setEmail(e.target.value)} placeholder="Email" />
{errors.email && <span>{errors.email}</span>}
<input type="password" value={password} onChange={(e) => setPassword(e.target.value)} placeholder="Пароль" />
{errors.password && <span>{errors.password}</span>}
<input value={name} onChange={(e) => setName(e.target.value)} placeholder="Имя" />
<button type="submit">Зарегистрироваться</button>
</form>
);
}Результат хорошо составленного промпта: коротко, без лишнего.