3,583 papers
arXiv:2607.03158 77 3 июля 2026 г. FREE

Явные требования бьют красивую структуру: полнота описания важнее формата подачи задач LLM

КЛЮЧЕВАЯ СУТЬ
Парадокс: модель выдаёт разные результаты при одинаковых данных — и вы думаете, что дело в формате. Нет. Дело в дырах: не написали что делать с пустым полем, с ничьей по баллам, с нечитаемым входом — модель угадывает, и каждый раз по-другому. Метод явной спецификации позволяет получать стабильный, воспроизводимый результат на задачах с чёткими правилами — скоринг, классификация, структурированные решения. YAML и псевдокод работают не потому что модель их любит — они работают потому что заставляют тебя явно именовать каждый раздел. Написал граничные_случаи: — вынужден заполнить. Проза такого напоминания не даёт: легко уйти в середину и забыть про хвосты. Для сильных моделей (уровня GPT-4+) при полном описании формат вообще перестаёт влиять на результат.
Адаптировать под запрос

TL;DR

LLM выполняет задачу точнее не от того, как вы оформили запрос — таблицей, списком или прозой — а от того, насколько полно вы описали все правила, граничные случаи и исключения. Если вы явно прописали каждую деталь, для сильных моделей (уровня GPT-4+) формат подачи перестаёт иметь значение вообще.

Классическая ошибка: вы аккуратно расставили заголовки, сделали маркированный список — и думаете, что задача описана хорошо. Но модель спотыкается там, где вы не указали что делать в исключительных ситуациях — «а если два варианта одинаковые?», «а если входные данные пустые?», «а если условие не выполняется?». Это не просто про код — это про любую задачу, где нужен точный и воспроизводимый результат.

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


📌

Схема

Основное правило:
  Подробность > Формат (для сильных моделей)

Если информация неполная:
  YAML-подобный формат → лучшая точность
  LaTeX-псевдокод → тоже хорошо
  Простой текст → близко к структурированным
  Только сигнатура/заголовок → хуже всех

Что прописывать явно:
  → Граничные случаи (что если значение пустое?)
  → Правила разрешения конфликтов (что если два варианта равны?)
  → Числовые правила (округление, пороги, знаки)
  → Поведение при ошибках (что вернуть или выбросить?)

Всё в одном промпте.

🚀

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

Задача: Вы хотите, чтобы LLM по единым правилам оценивала резюме кандидатов на вакансию в вашей компании и выдавала решение — звать на интервью или нет. Нужно, чтобы разные промпты давали одинаковый результат, без случайных отклонений.

Промпт:

Ты — рекрутинговый ассистент. Оцени резюме кандидата по следующим правилам:

функция: оценка_кандидата
цель: vынести решение — «Приглашаем» или «Отказ»

входные данные:
  резюме: текст резюме кандидата
  вакансия: название должности и требования

обязательные критерии:
  - опыт: минимум 2 года в релевантной области
  - образование: высшее или незаконченное высшее
  - город: Москва или готовность к переезду

шаги оценки:
  1. Проверь каждый обязательный критерий
  2. Если хотя бы один обязательный критерий не выполнен — решение «Отказ»
  3. Если все обязательные критерии выполнены — посчитай дополнительные баллы:
     - Опыт от 5 лет: +2 балла
     - Знание английского B2+: +1 балл
     - Наличие кейсов или портфолио: +1 балл
  4. При равном счёте у нескольких кандидатов — приоритет тому, у кого больше лет опыта
  5. Если опыт тоже равен — приоритет кандидату с более поздней датой последнего места работы

поведение в граничных случаях:
  - Опыт не указан: считать как 0 лет
  - Город не указан: считать как «неизвестно», применить правило отказа
  - Резюме пустое или нечитаемое: вернуть «Невозможно оценить — нужно больше данных»

формат вывода:
  Решение: [Приглашаем / Отказ / Невозможно оценить]
  Баллы: [число]
  Причина: [1-2 предложения]

Вот резюме:
[ВСТАВЬТЕ РЕЗЮМЕ]

Результат: Модель выдаст структурированный вердикт по каждому кандидату в едином формате. Главное — она будет стабильно обрабатывать граничные случаи: отсутствующий город, пустое поле опыта, одинаковый счёт у двух кандидатов. Без явных правил для этих случаев модель каждый раз угадывала бы по-своему, и результаты расходились бы от запуска к запуску.


🧠

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

LLM не хранит «намерение» — она генерирует следующий токен на основе того, что написано в промпте. Если правило не написано явно, модель заполняет пробел наиболее статистически вероятным ответом из своих обучающих данных. Иногда угадывает правильно, иногда нет — и это объясняет нестабильность результатов.

Когда вы явно прописываете граничные случаи, вы устраняете эту неопределённость. Модели уже не нужно «угадывать» — она следует прямой инструкции. Именно поэтому у сильных моделей при полном описании формат перестаёт влиять на результат: информационные пробелы закрыты, нечего угадывать.

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

Рычаги управления: - Добавить раздел граничные_случаи: → модель перестаёт угадывать при нестандартных входах - Добавить правила_разрешения_конфликтов: → убирает случайность при равных вариантах - Заменить прозу на YAML-структуру → когда не уверены что описали всё — структура подскажет пропущенные поля - Убрать явные правила → если нужно дать модели свободу интерпретации (креативные задачи)


📋

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

функция: {название_задачи}
цель: {что должна вернуть}

входные данные:
  {поле_1}: {описание и тип}
  {поле_2}: {описание и тип}

шаги выполнения:
  1. {первый шаг}
  2. {второй шаг}
  3. {третий шаг}

правила при конфликтах:
  - Если {ситуация_А}: {что делать}
  - Если {ситуация_Б}: {что делать}

граничные случаи:
  - {поле} не указано: {как обработать}
  - {поле} пустое: {как обработать}
  - {невозможная ситуация}: {что вернуть}

формат вывода:
  {поле_результата}: [{варианты}]
  {пояснение}: {описание}

Вот входные данные:
{ваши_данные}

Что подставлять: - {название_задачи} — глагол + объект: оценка_заявки, классификация_отзыва, генерация_ответа - {правила_при_конфликтах} — самое важное: что делать когда два варианта равны, или условие частично выполнено - {граничные_случаи} — что делать с пустыми, нечитаемыми, нестандартными входами - {формат_вывода} — чем строже формат, тем стабильнее результат


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

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

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

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


⚠️

Ограничения

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

⚠️ Не компенсирует неполноту знаний: Если вы сами не знаете что делать в граничном случае — YAML-структура это не скроет, а обнажит. Модель либо спросит, либо угадает. Это плюс (пробел будет замечен), но нужно быть готовым к ответу.

⚠️ Слабые модели продолжают реагировать на формат: Для небольших или устаревших моделей формат по-прежнему важен даже при полном описании. Для сильных (GPT-4 уровня) формат уходит на второй план, когда всё прописано.

⚠️ Code stub — ловушка самодовольства: Если вы даёте только сигнатуру или заголовок («напиши функцию X, которая делает Y»), это хуже, чем полное описание прозой. Пустой каркас без правил даёт ложное ощущение структуры — а контент не передаёт.


🔍

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

Команда из Mizuho-DL Financial Technology взяла пять задач на реализацию алгоритмов машинного обучения — сортировка по топ-к, K-means, механизм внимания и другие — и написала каждую задачу в семи разных форматах: простая проза, LaTeX-псевдокод, Markdown-секции, YAML-подобная структура, JSON-подобная структура, Python-заглушка и псевдокод из PDF. Каждую версию скормили трём моделям (GPT-5.4 mini, Gemma 3 4B, Llama 3.2 3B) в 10 повторах — итого 4 020 сгенерированных реализаций.

Хитрость в том, что оценивали не то, что модели показывали сами себе, а скрытые тесты — краевые случаи, о которых в задании явно не говорилось: что если два элемента равны по значению, что если входной массив пустой, что если пользователь передал отрицательный параметр. Это самые неудобные проверки — именно там ломаются реализации «по мотивам» описания, а не строгого следования правилам.

Самое интересное: когда исследователи добавили в промпт полное описание (все числовые правила, поведение при ошибках, тай-брейкинг) — GPT-5.4 mini перестала замечать разницу между форматами вообще, 50 из 50 сравнений дали одинаковый результат. Gemma 3 4B и Llama 3.2 3B продолжили реагировать на формат даже при полном описании. Это важный сигнал: для сильных моделей формат — не принципиален, если контент полный. Для слабых — структура всё ещё помогает.


📄

Оригинал из исследования

function: top_k_distribution
signature: "def top_k_distribution(logits, k, temperature=1.0):"
inputs:
  logits: nonempty one-dimensional NumPy array
  k: positive integer
  temperature: positive float
steps:
  - keep min(k, len(logits)) entries
  - break ties by smaller index
  - apply stable softmax to retained logits divided by temperature
output: probability vector with zero probability outside the retained entries
errors: raise ValueError for invalid logits, k, or temperature

Контекст: Исследователи так описали функцию распределения top-k для сравнения форматов. Та же задача писалась и прозой, и псевдокодом, и JSON-структурой. YAML-подобный формат показал второй результат после LaTeX-псевдокода при неполном описании — и исчезающую разницу при полном.


📌

Адаптации

📌

💡 Адаптация: Явная спецификация для нерегулярных задач

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

правила_приоритета:
  - Если два варианта равнозначны по критерию А: смотри критерий Б
  - Если и критерий Б равен: выбирай вариант с меньшим порядковым номером
  - Если правило определить невозможно: вернуть «требуется ручная проверка»

📌

🔧 Техника: Диагностика пробелов в описании

Напишите задачу в YAML-шаблоне и попросите LLM найти незаполненные поля:

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

[ваш YAML-промпт]

LLM превращается в вашего рецензента: она видит структуру и указывает на незаполненные разделы. После ответов — дополняете спецификацию и запускаете основную задачу.


🔗

Ресурсы

Название работы: Which Algorithm Specification Formats Help Language Models Implement Machine Learning Algorithms?

Авторы: Masahiro Kato (Data Analytics Department, Mizuho-DL Financial Technology; University of Tokyo), Taka Kato (NP-hard Inc.)

Связанные бенчмарки: PaperBench (Starace et al., 2025), ResearchCodeBench (Hua et al., 2025), SciReplicate-Bench (Xiang et al., 2025)

Дата: Июль 2026


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

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

Парадокс: модель выдаёт разные результаты при одинаковых данных — и вы думаете, что дело в формате. Нет. Дело в дырах: не написали что делать с пустым полем, с ничьей по баллам, с нечитаемым входом — модель угадывает, и каждый раз по-другому. Метод явной спецификации позволяет получать стабильный, воспроизводимый результат на задачах с чёткими правилами — скоринг, классификация, структурированные решения. YAML и псевдокод работают не потому что модель их любит — они работают потому что заставляют тебя явно именовать каждый раздел. Написал граничные_случаи: — вынужден заполнить. Проза такого напоминания не даёт: легко уйти в середину и забыть про хвосты. Для сильных моделей (уровня GPT-4+) при полном описании формат вообще перестаёт влиять на результат.

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

Не «оформляй красиво» — «описывай полностью». LLM не хранит твоё намерение. Она читает промпт и генерирует следующий токен. Нет правила — нет инструкции. Пустое место в спецификации — это не «модель сама догадается». Это «модель возьмёт самый частый ответ из своего обучения». Иногда совпадёт с тем что вы хотели. Чаще нет — и каждый запуск даст другой результат. Что прописывать явно: - Граничные случаи — что если поле пустое, данные нечитаемы, условие не выполнено - Правила разрешения конфликтов — что если два варианта набрали одинаковые баллы - Числовые правила — пороги, округление, знаки - Поведение при ошибках — что вернуть или что сообщить

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

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

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

Задачи с чёткими правилами — скоринг резюме, классификация обращений, генерация решений по алгоритму — особенно когда нужен воспроизводимый результат при одинаковых входных данных. Критично для конвейеров, где LLM работает без человека в цикле: там случайный угаданный ответ никто не поймает. Не подходит для субъективных и творческих задач: количество граничных случаев там бесконечно, а явная спецификация невозможна по природе. Попытка прописать всё — бесполезная трата времени.

Мини-рецепт

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

2. Заполни граничные случаи первыми: для каждого входного поля спроси себя «а что если пустое?», «нечитаемое?», «не указано?». Это самые частые дыры — именно здесь модель угадывает.

3. Добавь правила конфликтов: что делать если два варианта набрали одинаковые баллы? Условие выполнено частично? Без этого раздела модель плывёт именно в таких ситуациях.

4. Пропиши числа явно: «опыт от 5 лет: +2 балла» — а не «большой опыт учитывается». Модель не знает что для вас «большой».

5. Зафиксируй формат вывода: Решение: [Приглашаем / Отказ / Невозможно оценить] — чем строже формат, тем стабильнее результат.

Примеры

[ПЛОХО] : Оцени резюме кандидата и скажи, стоит ли звать на интервью
[ХОРОШО] : функция: оценка_кандидата цель: вернуть «Приглашаем» или «Отказ» входные данные: резюме: текст вакансия: должность и требования обязательные критерии: - опыт: минимум 2 года в релевантной области - образование: высшее или незаконченное высшее правила при конфликтах: - при равных баллах: приоритет тому, у кого больше лет опыта - опыт тоже равен: приоритет с более поздней датой последнего места работы граничные случаи: - опыт не указан: считать 0 лет - город не указан: считать «неизвестно», применить правило отказа - резюме пустое или нечитаемое: «Невозможно оценить — нужно больше данных» формат вывода: Решение: [Приглашаем / Отказ / Невозможно оценить] Причина: 1-2 предложения Вот резюме: [резюме] Результат: модель стабильно обрабатывает одинаковые входные данные одинаково — потому что нет ни одного незакрытого вопроса, на который нужно угадывать.
Источник: Which Algorithm Specification Formats Help Language Models Implement Machine Learning Algorithms?
ArXiv ID: 2607.03158 | Сгенерировано: 2026-07-07 04:23

Проблемы LLM

ПроблемаСутьКак обойти
Пропущенный граничный случай случайный ответПишешь задачу, описываешь основной путь. Но не пишешь что делать с пустым полем, равными вариантами, нечитаемым входом. Модель не останавливается и не спрашивает. Она заполняет пробел "наиболее вероятным" ответом из обучающих данных. Иногда угадывает верно, иногда нет. Результат меняется от запуска к запуску. Проблема для любой задачи где нужен воспроизводимый результатПиши явные правила для каждого исключения. - Поле пустое: считать как 0. - Два варианта равны: выбрать тот у которого выше X. Когда правило написано — модель следует ему, а не угадывает

Методы

МетодСуть
YAML-структура как чеклист полнотыОформи запрос в виде явных полей: граничные_случаи:, правила_при_конфликтах:, поведение_при_ошибках:. Когда видишь незаполненный раздел — понимаешь что правило не прописано. Почему работает: Проза не напоминает про исключения. Можно описать основной путь и уйти довольным. Явные поля создают зрительный пробел — трудно не заметить пустой раздел. Когда применять: задачи с чёткими правилами, нужен стабильный результат. Не работает: субъективные задачи, творческие задачи — там исключений бесконечно
📖 Простыми словами

Which Algorithm Specification Formats HelpLanguageModelsImplement Machine Learning Algorithms?

arXiv: 2607.03158

Нейросети плевать на то, как ты расставил запятые или упаковал текст в красивую таблицу. Главный инсайт исследования в том, что полнота спецификации бьет любые танцы с бубном вокруг формата. Модель лажает не потому, что ты не использовал списки, а потому, что ты оставил «дырки» в логике. Если в инструкции есть слепые зоны, LLM не переспросит, а просто начнет галлюцинировать на основе статистики, заполняя пустоту случайным мусором из своей базы знаний.

Это как давать рецепт человеку, который никогда не видел плиту. Если ты скажешь «посоли по вкусу», он может высыпать пачку соли или не положить ни грамма. Чтобы результат был съедобным, тебе нужно прописать всё: от граммов до температуры в градусах. Формально ты дал рецепт, но без жестких рамок это лотерея. В программировании и машинном обучении этот принцип возведен в абсолют: недосказанность — это баг, который модель исправит на свое усмотрение.

Исследователи гоняли разные форматы — от сухого кода до вольной прозы — и выяснили, что для GPT-4+ обертка вообще не важна. Главное, чтобы были прописаны граничные случаи и исключения. Если ты просишь оценить резюме, не надейся на «здравый смысл» модели. Тебе нужно четко вбить в промпт: что делать, если у кандидата нет опыта, но есть крутые пет-проекты, или как реагировать на перерыв в стаже. Явные правила убивают рандом, превращая нейронку из гадалки в надежный инструмент.

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

Короче: хватит тратить время на подбор идеальных шрифтов или «правильных» заголовков в запросе. Вместо этого сядь и выпиши все если — то, которые могут возникнуть в процессе. 100% точность достижима только тогда, когда у модели нет пространства для маневра. Либо ты диктуешь правила игры до последней точки, либо смиряешься с тем, что результат будет как повезет.

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

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

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