3,583 papers
arXiv:2608.21074 74 21 авг. 2026 г. FREE

Форматирование кода в промпте: JSON и YAML ускоряют работу LLM, а «улучшение» промпта другой моделью — портит результат

КЛЮЧЕВАЯ СУТЬ
Парадокс: просишь нейросеть «сделать промпт лучше» — и код становится хуже, а не лучше. Метод простой переупаковки промпта в JSON или YAML позволяет получать более быстрый и стабильный код от LLM, не меняя смысл задачи. Разбей промпт на явные поля — описание, входные данные, примеры, ограничения — вместо потока смешанных требований в одном абзаце. Модель узнаёт такую структуру по паттернам из документации и API-спецификаций — генерация быстрее, а ответы между повторными запросами меньше «плывут».
Адаптировать под запрос

Исследователи взяли 164 задачи по программированию и переписали их в четыре разных формата: обычный текст, JSON, Markdown, YAML. Пятый вариант — промпты, которые «улучшила» другая нейросеть (Mistral). Каждый промпт прогнали через GPT-4o 10 раз, чтобы проверить, насколько стабильны ответы. Итог: структурированный формат (особенно JSON) ускоряет генерацию кода и делает ответы более похожими друг на друга, но почти не влияет на то, правильно ли код решает задачу.

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

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

🔬

Схема метода

ШАГ 1: Возьми задачу для кода как есть (сохрани смысл) → не меняй формулировки
ШАГ 2: Разбей на явные поля → «Описание», «Входные данные», «Примеры», «Ограничения»
ШАГ 3: Оформи как структурированный список или JSON-подобный блок → консистентный формат
ШАГ 4 (чего делать НЕ надо): Не проси другую модель «сделать промпт лучше» → риск потерять точные детали задачи

Все шаги — это редактирование одного промпта, без диалога и без агентов.


🚀

Пример применения

Задача: Вы просите Claude или ChatGPT написать скрипт для автоматизации — например, парсер, который вытаскивает цены товаров с Ozon и складывает в таблицу.

Промпт (плохой вариант, размытый текст):

Напиши скрипт на Python, который парсит цены товаров с сайта Ozon 
по ссылкам из списка, и цена должна быть с рублями, а ещё нужно 
чтобы он не падал если товар не найден, и сохранял в CSV файл, 
названия колонок сделай понятные.

Промпт (структурированный, по принципу из исследования):

Задача: написать скрипт на Python для парсинга цен товаров.

Описание: скрипт принимает список URL товаров Ozon и извлекает цену.

Входные данные: список URL (строки) в файле urls.txt.

Ожидаемый результат: 
- CSV-файл result.csv с колонками: url, название_товара, цена_руб
- Если товар не найден — строка с пометкой "не найдено", без падения скрипта

Ограничения:
- Цена — только число в рублях, без символов
- Использовать библиотеки requests и BeautifulSoup

Результат: Модель получает точное, однозначное техническое задание вместо потока смешанных требований. Ответ придёт быстрее и будет более предсказуемым, если вы зададите тот же вопрос повторно — код с меньшей вероятностью «поплывёт» по структуре между запросами.


🧠

Почему это работает

LLM генерирует код, опираясь на паттерны из обучающих данных — а огромная часть технической документации, API-спецификаций и багтрекеров написана в структурированном виде: списки полей, JSON, таблицы. Когда промпт выглядит так же — модели легче «узнать» задачу и меньше приходится угадывать, что относится к описанию, а что к примеру.

Слабость модели — она чувствительна к тому, как сформулирован запрос, даже если смысл не меняется. Особенно опасно для кода: там даже незначительная перефразировка примера или условия может привести к другому пониманию задачи. Текстовые задачи (вопрос-ответ) переносят перефразировку легче — код нет.

Рычаг управления: если хотите более стабильный результат при повторных запросах на кодовые задачи — не переписывайте промпт своими словами каждый раз, а держите один структурированный шаблон и просто меняйте в нём данные (как плейсхолдер).


📋

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

Задача: {краткое название задачи}

Описание: {что должен делать код, без деталей реализации}

Входные данные: {что подаётся на вход — формат, тип}

Ожидаемый результат: {что должно получиться на выходе — формат, тип}

Примеры:
- Вход: {пример входа} → Выход: {пример выхода}

Ограничения: {что нельзя делать, какие библиотеки использовать/не использовать, обработка ошибок}

Подставьте свою задачу в каждое поле. Главное — не просите другую модель «улучшить» этот промпт, если задача техническая и точная. Формулируйте сами или адаптируйте вручную.

🚀 Быстрый старт — вставь в чат:

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

[вставить шаблон выше]

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


⚠️

Ограничения

⚠️ Эффект на качество решения минимальный: форматирование ускоряет генерацию и делает ответы более похожими друг на друга, но почти не увеличивает долю правильных решений. Не ждите, что просто переформатировав промпт, вы получите принципиально лучший код.

⚠️ Проверено только на коротких задачах и одной модели: исследование тестировало GPT-4o на компактных функциях Python (задачи типа HumanEval). Для больших проектов или других моделей эффект может отличаться.

⚠️ «Улучшение» промпта чужой моделью — риск, не гарантия: если вы просите нейросеть переформулировать точное техническое задание, есть шанс, что она незаметно исказит детали — итоговый код может работать хуже, даже если промпт выглядит «более грамотно».


🔍

Как исследовали

Команда взяла классический датасет HumanEval — 164 задачи на Python — и сделала из него пять версий: обычный текст, JSON, Markdown, YAML и версию, переписанную моделью Mistral. Каждую из 164 задач в каждом формате прогнали через GPT-4o 10 раз подряд в «чистом» чате без истории — всего 8200 запросов. Замеряли: сколько ответов проходят тесты (правильность), сколько времени уходит на генерацию и проверку кода, и насколько похожи друг на друга 10 ответов на один и тот же промпт (метрика ROUGE-L — совпадение по подстрокам текста).

Результат удивил в двух местах. Во-первых, JSON оказался самым «удобным» форматом для модели — быстрее и стабильнее, хотя интуитивно кажется, что человекочитаемый Markdown должен быть лучше. Во-вторых, версия промптов, «улучшенная» другой LLM, оказалась худшей по качеству решений — при том что цель тюнинга была прямо противоположной. Вывод исследователей: автоматическое переформулирование промпта нейросетью — не безопасная операция для точных задач, оно может незаметно потерять критичные детали.


📋 Дайджест исследования

Ключевая суть

Парадокс: просишь нейросеть «сделать промпт лучше» — и код становится хуже, а не лучше. Метод простой переупаковки промпта в JSON или YAML позволяет получать более быстрый и стабильный код от LLM, не меняя смысл задачи. Разбей промпт на явные поля — описание, входные данные, примеры, ограничения — вместо потока смешанных требований в одном абзаце. Модель узнаёт такую структуру по паттернам из документации и API-спецификаций — генерация быстрее, а ответы между повторными запросами меньше «плывут».

Принцип работы

Правило простое: один структурированный шаблон — много задач. Меняешь только плейсхолдеры с данными, саму форму не трогаешь никогда. Хочешь чтобы другая модель «причесала» технический промпт перед отправкой? Не надо. Она перепишет мелкие детали — пример, формат вывода, ограничение — и код сломается там, где текстовый вопрос-ответ пережил бы это спокойно.

Почему работает

Техническая документация, API-спецификации и баг-трекеры почти всегда написаны в структурированном виде: списки полей, JSON, таблицы. Исследователи прогнали GPT-4o через 164 задачи по 10 раз каждую — структурированный формат, особенно JSON, давал более похожие друг на друга ответы между запусками. Модель не угадывает что относится к описанию, а что к примеру — она узнаёт готовый паттерн. Для обычных вопросов перефразировка не страшна, а для кода даже одно переставленное слово в примере меняет понимание задачи целиком.

Когда применять

Генерация кода → парсеры, скрипты, функции с точными требованиями к формату и ограничениям, особенно когда нужно повторяемость между запросами к одной и той же задаче. НЕ подходит как способ поднять долю правильно решённых задач — эффект только на скорость и стабильность, не на точность решения.

Мини-рецепт

1. Возьми задачу как есть: не переписывай формулировку своими словами, сохрани исходный смысл.
2. Разбей на явные поля: Описание, Входные данные, Ожидаемый результат, Примеры, Ограничения — каждое отдельно.
3. Оформи как список или JSON-блок: один и тот же шаблон для всех похожих задач, меняются только данные внутри.
4. Не проси другую модель «причесать» промпт: риск потерять точные детали — примеры и ограничения — слишком высок для кода.

Примеры

[ПЛОХО] : Напиши скрипт на Python, который парсит цены товаров с сайта Ozon по ссылкам из списка, и цена должна быть с рублями, а ещё нужно чтобы он не падал если товар не найден, и сохранял в CSV файл, названия колонок сделай понятные.
[ХОРОШО] : Задача: написать скрипт на Python для парсинга цен товаров. Описание: скрипт принимает список URL товаров Ozon и извлекает цену. Входные данные: список URL (строки) в файле urls.txt. Ожидаемый результат: - CSV-файл result.csv с колонками: url, название_товара, цена_руб - Если товар не найден — строка с пометкой "не найдено", без падения скрипта Ограничения: - Цена — только число в рублях, без символов - Использовать библиотеки requests и BeautifulSoup
Источник: PromptResponse: Optimizing Prompts for LLM Coding Tasks
ArXiv ID: 2608.21074 | Сгенерировано: 2026-08-24 05:21

Проблемы LLM

ПроблемаСутьКак обойти
Просьба «улучшить» технический промпт портит кодПросишь одну модель переформулировать точный промпт для решения кодовой задачи. Модель незаметно меняет детали: примеры, ограничения, формат вывода. Для кода эти детали критичны — итоговое решение получается заметно хужеНе отдавай готовый технический промпт другой модели на «улучшение». Формулируй сам или редактируй вручную. Если нужна структура — разбей на поля сам, без посредника-нейросети

Методы

МетодСуть
Разбивка промпта на явные поля (задача, входные данные, ограничения)Раздели запрос на именованные блоки: описание, входные данные, ожидаемый результат, примеры, ограничения. Оформи как список или JSON-подобную структуру, смысл не меняя. Работает потому что техническая документация и API-спецификации в обучающих данных написаны так же структурированно — модель быстрее «узнаёт» задачу и меньше путает описание с примером. Ускоряет генерацию и делает повторные ответы более похожими друг на друга. Когда да: кодовые и технические задачи, нужна стабильность при повторных запросах. Когда нет: не ждите роста правильности решения — формат почти не влияет на точность
📖 Простыми словами

PromptResponse: OptimizingPromptsforLLMCoding Tasks

arXiv: 2608.21074

Нейросети пишут кривой код не потому, что они тупые, а потому что ты кормишь их кашей из слов. LLM обучались на структурированной документации, спецификациях API и багтрекерах, а не на художественных сочинениях. Когда ты кидаешь сплошной текст, модель тратит ресурсы на угадывание задачи, тогда как структурированный вход сразу активирует правильные паттерны.

Это как завалиться к сеньор-разработчику и вместо нормального ТЗ набросать хотелки пальцем на салфетке. Формально суть ясна, но на выходе ты гарантированно получишь кривой костыль — кодеру нужен четкий контракт данных, а не абстрактные рассуждения о том, как всё должно летать.

Что реально работает: метод PromptResponse и перевод задачи в формат спецификаций вроде JSON или таблиц. Ты жестко прописываешь три блока: входные параметры, ограничения логики и шаблон результата. Модель моментально узнает технический контекст и выдает рабочий скрипт с первой попытки, а не галлюцинации.

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

Короче: хватит общаться с нейросетью 'по душам', когда тебе нужен рабочий инструмент. Оформляй промпт как техническую доку с четкими полями и типами данных. Либо ты тратишь тридцать секунд на структуру, либо потом два часа дебажишь неработающий мусор.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с