Доброго времени суток, «Хабр»!

За свою долгую (нет) карьеру писателя статей я уделил внимание достаточно важной теме, причем рассмотрел ее сразу в двух аспектах: написание промтов для текстовых и графических нейронных сетей. В какой-то момент появилась мысль углубиться в одну из этих тем.

Сегодня мы подробнее остановимся именно на текстовых моделях, точнее перейдем в сферу программирования и составим инструкцию по созданию промта, который обеспечит более качественный результат на выходе.

Примите стратегически удобное положение, а я приступаю к рассказу.


Небольшое дополнение

Перед переходом упомяну некоторые детали. Начну с того, что для генерации будет использоваться GPT-5, показавшая довольно неплохие результаты в области программирования. Кстати, доступ к модели удалось получить через агрегатор нейросетей BotHub, где представлено большое количество различных моделей - от текстовых до способных генерировать видео и звук. Зарегистрировавшись по специальной ссылке, вы получите 100 000 капсов для личных экспериментов.

Далее, пожалуй, стоит уточнить конечную цель статьи. Помимо простого объяснения структуры промта, считаю полезным привести наглядный пример. Пусть это будет знакомая многим компьютерная игра «Арканоид», которую ранее я уже реализовывал на языке Си в качестве курсовой работы университета.


Промт 

Промт - ключ к пониманию нейросетью поставленной перед ней задачи. Чем детальнее и четче сформулирован наш запрос, тем точнее и эффективнее окажется итоговый результат. Кодовые промты создаются специально для написания программного кода на языках типа Python, Java, C++ и др., тогда как прямые запросы сосредоточены непосредственно на результате.

Как писать промт для генерации кода?

Построение эффективного запроса в некотором роде является искусством, однако достичь чего-то идеального очень непросто.

При написании промта важно учитывать: конкретность, контекст, четкость формулировок, ограничения.

  • Конкретность предполагает четко сформулированную задачу.

  • Контекст дает важные детали, например версию языка программирования или операционную систему.

  • Четкость формулировки требует простых и понятных выражений, чтобы структура промта оставалась ясной.

  • Ограничения помогают задать направление генерации, указывая библиотеку или технологию, которая должна присутствовать в итоговом коде.

Разумеется, эти советы полезны не только для составления промтов, но и ТЗ. Теперь перейдем непосредственно к созданию самого шаблона промта.

Назначение роли

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

Тебе нужно принять роль [язык программирования] программиста. Твоя главная цель - написать оптимальный и надежный код, по моему ТЗ, и объяснить логику его работы.

Возможности и ОС

Для выполнения поставленной задачи ты можешь: уточнять детали, предлагать несколько вариантов решения, составлять оптимально рабочий код на [название языка программирования] (указать версию).

Нельзя сказать, что этот пункт критически важен, однако он помогает уточнить требования относительно версии языка, на которой должна быть выполнена программа.

Далее следует указать целевую операционную систему проекта. По сути, тоже необязательный элемент запроса, но обеспечивающий дополнительную детализацию.

Целевая ОС: Linux/Windows

Требования

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

Требования: пиши по частям, в первой части изложи краткий план и технологии, обоснуй свой выбор.

ТЗ

Техническое задание - основная составляющая промта, в которой мы описываем все требования к результату: что должно быть в программе, как она должна работать.

Техническое задание: [ТЗ]

К составлению задания нужно подходить серьезно. Просто представьте, что у вас есть сотрудник, от которого вы хотите получить ожидаемый результат. Как этого добиться? Подробно расписать все, что должно быть в конечном продукте.

Шаблон промта

Тебе нужно принять роль [язык программирования] программиста. Твоя главная цель - написать оптимальный и надежный код, по моему ТЗ, и объяснить логику его работы.

Для выполнения поставленного задания ты можешь: задавать уточняющие вопросы, предлагать разные варианты решения; создавать оптимальный код на [язык программирования] (версия).

Требования: пиши по частям, в первой части изложи краткий план и технологии, обоснуй свой выбор.

Техническое задание: [ТЗ]

Простой шаблон, покрывающий большинство задач программирования для нейросетей. Да, он ориентирован скорее на решение задачи, демонстрацию и описание происходящего в программе - подходит тем, кто стремится понять суть процесса, а не использовать готовое решение методом простого копирования.

При выполнении простых задач и операций сам промт можно значительно сократить.

Тебе нужно принять роль [язык программирования] программиста. Твоя главная цель - написать оптимальный и надежный код, по моему ТЗ. Техническое задание: [ТЗ]

Буквально просто задал запрос - получил ответ без каких-либо углубленных данных. Здесь вы не указываете версию, не выставляете требований и так далее, оставляя все вопросы самой нейросети и ее выбору.

Тесты промта

Да, я не забыл, что в названии и в дополнении упоминалось про примеры на конкретных языках: Python, JavaScript, SQL.

Начнем с Python, задача которого повторить компьютерную игру «Арканоид». Промт:

Тебе нужно принять роль Python программиста. Твоя главная цель - написать оптимальный и надежный код, по моему ТЗ, и объяснить логику его работы.

Для выполнения поставленного задания ты можешь: задавать уточняющие вопросы, предлагать разные варианты решения; создавать оптимальный код на Python (3.11).

Требования: пиши по частям, в первой части изложи краткий план и технологии, обоснуй свой выбор.

Техническое задание: Разработать компьютерную игру «Арканоид» с графическим пользовательским интерфейсом (GUI), содержащую стартовое меню с возможностью начала игры и выхода, а также три различных уровня, отличающихся геометрией расположения блоков и их цветовой схемой; игровой процесс должен предоставлять игроку три жизни, при потере которых игра автоматически перезапускается, возвращая пользователя в стартовое меню.

Можно заметить, что ChatGPT воспринял инструкции сразу целиком. Он предложил свою версию реализации с базовым набором требований, отметив необходимость уточнения некоторых моментов, а после написания самого кода указал несколько возможных улучшений игры. Промт сработал вполне эффективно.

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

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

Рассмотрим аналогичную задачу на JavaScript:

В этом случае ответ соответствует поставленным условиям. Сначала модель выдала первую часть с уточняющими вопросами, после полноценный код, который даже не поместился здесь полностью... Зато присутствует инструкция, как собрать все файлы воедино.

Что касается самого геймплея, много сказать не смогу, все же в своей основе это дубликат полученного решения на Python. Хотя мяч снова отказывается лететь адекватно, здесь он отскакивает исключительно вправо... Похоже, добиться корректной физики движения мяча из моделей мне пока не удается. Заметил, что все файлы разложены в нужные папки, да и сама структура проекта указана для полноценного понимания.

С SQL, конечно, ситуация любопытна. Моя первоначальная идея дала сбой. Все-таки SQL - это язык работы с базами данных, поэтому создать подобную игру средствами SQL выглядит задачей из ряда вон выходящей. Но довольно скоро возникла мысль запросить базу данных для компании, якобы выпускающей эту игру.

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


Итог

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

Спасибо за внимание!

Комментарии (0)