EvolCode
треки/Вайбкодинг с пониманием·08 / 10
6 мин чтения

Как просить ИИ писать понятнее

Качество AI-кода на 80% определяется промптом. Если результат запутанный — почти всегда виноват не ИИ, а формулировка. Хороший промпт ограничивает ИИ настолько, что он не успевает добавить лишнего.

1. Дай контекст

Кто будет читать этот код? «Junior уровень, без опыта в TypeScript» сразу убирает дженерики, advanced-типы и сложные паттерны. ИИ напишет проще.

2. Запрети лишнее

«Без классов, без try/catch, без внешних библиотек кроме X». Звучит грубо — работает идеально. ИИ стандартно тянет всё подряд; список запретов отрезает половину мусора.

3. Дай конкретику

Не «сделай форму», а «форма с полями email и password, валидация email регуляркой, на submit вызывает onSubmit(data)». Чем точнее ТЗ — тем меньше места для импровизации.

4. Попроси короткое

«Минимально работающее решение, не оптимизированное», «без комментариев», «строк не больше 30». ИИ привык быть многословным. Заставьте его ужаться.

примерjsx
// Пример хорошего промпта 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>
  );
}

Результат хорошо составленного промпта: коротко, без лишнего.

главное
  • 01Качество кода = качество промпта
  • 02Список запретов работает лучше, чем список пожеланий
  • 03Конкретика убивает импровизацию ИИ — и это хорошо
проверь себя
01Что эффективнее — список «хочу» или список «не хочу»?
02Какой промпт даст более понятный код?
03Зачем указывать уровень читателя в промпте?
следующий урок: Когда переписать самому