Единица 2 / 12

Скрипты и автозаполнение

Прибыль:

  • Возможность сопоставить режим чата с правильным типом задачи со встроенным завершением.
  • Способность писать мощные производственные подсказки, включающие контракты ввода/вывода, крайние случаи и ограничения стиля.
  • Возможность проверки сгенерированного кода и любых новых предложенных зависимостей перед слиянием.

Первой точкой контакта разработчика с ИИ часто является автозаполнение — функция, которая предлагает следующую строку при вводе — или фраза «введите эту функцию» в окне чата. Они оба используют один и тот же движок, но требуют разных дисциплин. В этом модуле мы преобразуем генерацию кода из случайного «записывания» в инженерный этап, результаты которого предсказуемы и проверяемы.

Цель состоит в том, чтобы превратить ИИ из инструмента, ускоряющего работу вашей печатной машины, в ученика, работающего в рамках установленных вами ограничений. Хорошо управляемый ученик экономит время; Неуправляемый ученик создаст беспорядок, который вам придется убирать позже.

Два режима использования: встроенное завершение и чат.

Встроенное завершение вступает в силу при вводе текста в редакторе; Вы вводите сигнатуру функции или строку комментария, и она предлагает все остальное. Он хорош по скорости, но имеет узкий контекст: он видит только код в непосредственной области. Вот почему лучше всего работает, когда вы четко напишите свое намерение в комментарии. Например, //проверить адрес электронной почты пользователя, выдать ValidationError, если неверный комментарий, значительно улучшает предложенное ниже предложение.

Режим чата предназначен для более крупных и структурированных задач: «Добавить нумерацию страниц в этот класс», «Извлечь интерфейс этого сервиса». Здесь у вас есть возможность указать роль, контекст и формат. Общее правило таково: завершение для небольших и текущих задач, разговор для задач, требующих обдумывания и структурирования.

Совет: не принимайте слепо предложение о завершении с помощью клавиши «Tab». Прочтите предложенную строку на секунду; Отсюда чаще всего утекает неверное имя переменной или перевернутое условие.

Шаги по воплощению намерения в код

  1. Дайте определение контракту. Каковы входные и выходные данные функции и поведение при ошибках? Например, «Получить электронную почту, нормализовать, если она действительна, выдать ошибку, если она недействительна».
  2. Укажите ограничения. Не используете внешнюю зависимость? Конкретное руководство по стилю? Есть ли предел производительности?
  3. Приведите пример. Пара ввода-вывода («ali@x.com → действительный, ali@ → ошибка») перемещает понимание намерения модели от прогнозирования к точности.
  4. Просите небольшие кусочки. Одна функция, одна ответственность. Затем переходите к следующему.
  5. Прочтите и запустите сгенерированный код. Компиляция + быстрая проверка вручную — самый дешевый этап проверки.

Три мини-кейса

Случай 1. Производство на основе комментариев повышает точность. Разработчик сначала запросил функцию анализа даты с пустым телом и получил правильный результат за 3 раунда. Во второй попытке, когда я определил функцию с комментарием в 4 строки (принимаемые форматы, правило часового пояса, условие ошибки) и запросил ее, пришел код, который работал в первом раунде. Та же модель, в тот же день; разница заключалась лишь в ясности намерений.

Случай 2. Отсутствие указания версии обходится дорого. Одна команда боролась с устаревшим API на основе обратного вызова, заменяющим fs.promises в коде, созданном для Node.js. Когда в приглашение была добавлена ​​строка «Использовать Node 20, ESM, async/await», производство последовало за проектом с первого раза; Среднее значение 12 минут, затраченных на коррекцию, было сброшено.

Случай 3. Реальный выигрыш в шаблонном коде. Микросервису потребовалось 6 новых DTO (объект передачи данных — простой класс данных, переносящий данные между уровнями) и правила их проверки. То, что раньше составляло примерно 90 минут ручной работы, было сокращено до 35 минут при создании и проверке ИИ; Поскольку повторяемость кода высока, а закономерность ясна, ИИ здесь работал в своей наиболее эффективной области.

Четыре копируемых шаблона

Генерация функций на основе контракта:

Роль: вы прилежный разработчик {{language}}. Функциональный контракт: — Имя: {{name}} — Ввод: {{типы и их значения}} — Вывод: {{тип и значение}} — Статус ошибки: {{что выбрасывается/возвращается, когда}} Ограничения: {{ нет внешних зависимостей/стиля/производительности}} Примеры:   {{input_1}} -> {{output_1}} – {{entry_2}} -> {{error_2}}Сначала дайте подпись + краткий план, затем код. Написание тестов, просто функция.

Чтобы соответствовать существующему стилю (адаптироваться к базе кода):

Ниже приведен пример функции из нашего проекта; Узнайте здесь об именовании, обработке ошибок и стиле комментирования. Напишите функцию для {{new_task}} в ТОМ ЖЕ стиле. Пример: {{current_code}}

От скелета до начинки (заглушка → реализация):

Заполните скелет функции ниже в соответствии с TODO в комментариях. ИЗМЕНИТЕ подпись и тип возвращаемого значения. Не создавайте вспомогательную функцию, которой не существует; при необходимости сообщите мне: «нужен этот помощник». {{скелет_код}}

Альтернативное сравнение приложений:

Приведите две различные реализации для {{task}}: (а) приоритет читаемости, (б) приоритет производительности. Под каждым напишите по 1 предложению «когда предпочтительнее».

Слабая подсказка / Сильная подсказка

Слабое: «Напишите мне функцию проверки электронной почты».
Strong: «TypeScript 5, только стандартная библиотека. Напишите isValidEmail(input: string): логическое значение. Обрежьте пробелы, сделайте его нечувствительным к регистру, a@b.co допустимо, a@, @b.co, пустая строка недействительна. Если вы собираетесь использовать регулярное выражение, не будьте слишком сложными; добавьте 2 строки комментариев».

Мощная версия; Возвращает язык, версию, подпись, крайние случаи и ограничение стиля. Таким образом, сгенерированный код работает и вписывается в ваш проект.

Подход

Когда использовать

Внимание

Встроенное завершение

Маленькие вставки в потоке

Не принимайте предложение, не прочитав его.

Контрактное производство в чате

Новая функция/класс

Приведите пример и крайний случай

Производство по образцу стиля

Добавление к существующему коду

Выберите текущий пример кода

скелетная начинка

Подпись исправлена, тело пустое

Изменение подписи

Дублирование кода и ловушка зависимостей

ИИ часто рекомендует новую библиотеку, чтобы облегчить ему работу. Иногда это верно, иногда это добавляет ненужную зависимость к вашему проекту или предлагает несуществующий пакет (галлюцинация). Правило: вы подтверждаете каждую новую зависимость. Не добавляйте его в проект, не проверив, что пакет действительно существует, поддерживается и имеет соответствующую лицензию. В большинстве случаев помощник, уже присутствующий в проекте, лучше, чем новый пакет.

Внимание: просмотрите строки импорта, предложенные AI. Несуществующее имя пакета (которое также может напоминать поддельные пакеты, называемые «опечатками») нарушает компиляцию и представляет угрозу безопасности.

Распространенные ошибки

  • Наличие подписи, определяемой моделью. Если вы не зафиксируете типы ввода/вывода, для каждого производства будет использоваться другая сигнатура, и интеграция станет затруднительной.
  • Не говоря уже о крайних случаях. Пустой ввод, ноль, отрицательное число, очень большое значение — если вы не укажете их, модель записывает «счастливый путь», пропуская ребра.
  • Объединение предложения без его тестирования. Код, который кажется работающим, не означает, что он работает.
  • Принятие ненужной зависимости. Добавление целой библиотеки для однострочника создает технический долг.
  • Несоответствие стиля. Отличия в именовании и обработке ошибок от остальной части проекта делают базу кода неоднородной.

В заключение

Генерация кода является мощным инструментом, когда вы преобразуете намерение в четкий контракт. Используйте встроенное завершение для небольших, текущих задач, а также для задач, которые устанавливают структуру в разговоре. Вы указываете типы ввода/вывода, крайние случаи, версию и стиль; Приведите пример модели; проверять каждую новую зависимость; и бегите и читайте каждую созданную часть. ИИ лучше всего окупается в шаблонном, повторяющемся коде — запускайте его прямо здесь, в установленных вами пределах.

Задача приложения

Выберите из вашего проекта небольшую функцию, которую вам нужно написать. Сначала распечатайте его для ИИ с помощью шаблона «генерации функций на основе контракта», указав типы ввода/вывода, два крайних случая и ограничение стиля. Скомпилируйте сгенерированный код и попробуйте его с двумя разными входными данными. Затем снова задайте ту же функцию, на этот раз «напишите мне это» без какого-либо контекста, и сравните два результата построчно: какие крайние случаи были пропущены, сколько исправлений потребовалось?

контрольный список

  • [ ] Я знаю, где использовать режим чата со встроенным завершением.
  • [ ] Я определяю контракт ввода/вывода и крайние случаи при генерации функций.
  • [ ] У меня вошло в привычку добавлять в подсказку информацию о языке и версии.
  • [ ] Я компилирую и тестирую каждую произведенную деталь перед ее сборкой.
  • [ ] Я подтверждаю каждую новую зависимость, которую предлагает ИИ, проверяя ее существование и необходимость.
  • [ ] Проверяю соответствие сгенерированного кода стилю проекта.