3,583 papers
arXiv:2510.09211 74 10 окт. 2025 г. FREE

DICE: два промпта вместо одного для точного структурированного вывода

КЛЮЧЕВАЯ СУТЬ
Чем больше модель, тем хуже она следует формату. 72B модель решает задачу правильно в 67% случаев, но упаковывает в нужный формат только в 5%. Прикол: модель концентрируется на решении сложной математики, а требования к структуре (XML-теги, JSON-скобки) уходят на второй план. Одна пропущенная скобка — весь ответ непарсится, хотя решение верное. DICE разделяет задачу на два этапа: сначала LLM думает естественным языком без ограничений формата, затем малая модель анализирует рассуждение и переформатирует в нужную структуру. Частота ошибочных исправлений — меньше 2%.
Адаптировать под запрос

TL;DR

DICE — метод, который разделяет задачу на два этапа: сначала LLM думает естественным языком без ограничений формата, затем малая модель (SLM) анализирует и переформатирует ответ в нужную структуру. Исследователи обучают SLM через двухэтапный процесс: сначала supervised fine-tuning (SFT) учит базовому формату и паттерну "проанализируй-потом-ответь", затем GRPO (Group Relative Policy Optimization) фокусирует внимание на точности формата и финального ответа.

Главная находка: большие модели (32B+) хуже следуют инструкциям по формату чем средние (3B-7B), хотя их рассуждения точнее. Парадокс: чем крупнее модель, тем больше она концентрируется на решении задачи и игнорирует требования к формату ответа. Например, на MATH датасете 72B модель выдаёт format accuracy всего 4.8%, а content accuracy — 67.4%. Проблема в том, что модель "думает" о сложной математике, а структурные требования (XML-теги, JSON-скобки) уходят на второй план. Одна пропущенная скобка — и весь ответ непарсится, хотя решение правильное.

Суть метода: два запроса вместо одного. Первый запрос к LLM — без требований к формату, чистое рассуждение. Второй запрос к обученной SLM — проанализировать это рассуждение и упаковать в нужную структуру (XML, JSON, YAML). Обученная SLM делает это с очень низкой частотой ошибочных исправлений (<2%) — она понимает когда нужно сохранить ответ LLM как есть, а когда его скорректировать.


🔬

Схема метода

Обучение SLM (делается один раз разработчиками, не пользователем):

ШАГ 1: SFT (2 эпохи)
├─ Датасет: естественный вывод LLM + rationale SLM + структурированный ответ
└─ Результат: SLM учится формату и паттерну analyze-then-answer

ШАГ 2: GRPO (1 эпоха) 
├─ Reward только за корректность формата и финального ответа
└─ Результат: SLM фокусируется на главном, игнорируя детали рассуждений

Применение (inference):

ЗАПРОС 1 → LLM: Реши задачу естественным языком → yo (natural language)
ЗАПРОС 2 → SLM: Проанализируй yo и упакуй в [формат] → структурированный ответ

🧠

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

Слабость LLM: большие модели обучены на разнообразных задачах и при сложном вопросе приоритизируют рассуждения над форматом. Для них 72B параметров "думают" о математике, а требование добавить <FinalAnswer> теги — периферийная деталь. Результат: идеальное решение в неправильной упаковке.

Сильная сторона LLM: генерация смысла, а не синтаксиса. Если убрать форматные ограничения из промпта, LLM выдаёт корректное рассуждение в 67-96% случаев (в зависимости от задачи). Проблема только в упаковке.

Сильная сторона SLM: маленькие модели (0.5B-3B) обучаются узкой задаче — рефакторингу текста в структуру. Они не отвлекаются на "думание" о решении, их работа — парсинг готового текста. Через обучение с паттерном "сначала проанализируй (rationale), потом упакуй (format)" SLM понимает когда трогать контент (если ответ неверный), а когда только переформатировать (если верный).

Как метод соединяет это: DICE позволяет каждой модели делать свою работу. LLM рассуждает свободно → SLM структурирует аккуратно. Mis-correction rate <2% достигается потому что SLM видит весь контекст рассуждения LLM и может оценить его корректность перед упаковкой.

Рычаги управления (если бы вы адаптировали принцип для чата):

  • Явность анализа: чем детальнее вы просите "проанализируй что здесь сказано", тем меньше случайных изменений
  • Порядок действий: "сначала анализ, потом формат" vs "сразу формат" — разница в качестве
  • Два промпта vs один: увеличивает токены, но резко снижает ошибки формата

🚀

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

⚠️ Метод DICE требует обучения SLM — это для разработчиков систем, не для пользователей чатов. НО принцип "два промпта вместо одного" применим вручную.

Задача: Клиент просит аналитическую справку о рынке российских маркетплейсов (Ozon, Wildberries, Яндекс.Маркет) в строгом формате XML для автоматической обработки: блок анализа, блок выводов, рекомендация. Если дать всё в один промпт — модель отвлекается на структуру XML и упускает нюансы анализа. Если попросить сразу "напиши аналитику в XML" — получишь либо кривой XML, либо поверхностный анализ.

Промпт 1 (к основной модели):

Проанализируй текущую ситуацию на рынке российских маркетплейсов 
(Ozon, Wildberries, Яндекс.Маркет) за 2024-2025:

- Динамика GMV и количества продавцов
- Ключевые отличия в бизнес-моделях
- Тренды в поведении покупателей
- Риски и возможности для новых продавцов

Пиши естественным языком, без оглядки на формат — важна глубина анализа.

Промпт 2 (к той же или другой модели):

Вот аналитическая справка о маркетплейсах:

[вставить ответ из промпта 1]

Сейчас упакуй это в XML формат:

<Report>
 <Analysis>
 <MarketDynamics>{данные о динамике}
 <BusinessModels>{отличия бизнес-моделей}
 <BuyerTrends>{тренды покупателей}
 
 <Conclusion>{краткий вывод одним абзацем}
 <Recommendation>{одна конкретная рекомендация}


Проанализируй исходный текст. Если там есть важные детали, которые не вписываются 
в предложенную структуру — адаптируй структуру, добавив нужные теги. 
Главное: сохрани всю суть анализа, не теряй инсайты ради красивого XML.

Результат:

В промпте 1 модель выдаст глубокий анализ без стресса от форматирования — вы увидите живой текст с конкретными цифрами, примерами, нюансами. В промпте 2 модель (или та же модель во втором запросе) прочитает этот анализ, поймёт логику, и аккуратно упакует в XML без потери смысла. Если в анализе 5 ключевых тезисов, а в шаблоне только 3 тега — модель добавит недостающие. Если формулировка важна — сохранится. Вы получите и структурированный XML, и качественное содержание.


📋

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

⚠️ Это адаптация принципа DICE для ручного применения в чате. Оригинальный метод требует обучения SLM.

Промпт 1 — свободное рассуждение:

{задача}

Реши эту задачу естественным языком. Не думай о формате вывода — 
сосредоточься на точности рассуждений и полноте ответа.

Промпт 2 — анализ и форматирование:

Вот решение задачи:

{ответ из промпта 1}

Проанализируй это решение:
1. Правильный ли ход рассуждений?
2. Есть ли ошибки в логике или расчётах?
3. Полон ли ответ?

Теперь упакуй решение в формат {описание_формата}.

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

Что подставлять:

  • {задача} — ваша задача (математика, анализ, код, текст)
  • {ответ из промпта 1} — копируете output первого запроса
  • {описание_формата} — XML, JSON, YAML или свой формат с примером структуры

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

Вот подход "два промпта для точности". Адаптируй под мою задачу: [твоя задача]. 
Спроси что нужно для первого и второго промптов.

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

LLM спросит: (1) что за задача, (2) какой нужен формат итогового вывода, (3) есть ли специфические требования к рассуждениям. Зачем: чтобы первый промпт фокусировался только на решении, а второй — только на упаковке. Она возьмёт паттерн и сделает персональную версию под вашу задачу.


⚠️

Ограничения

⚠️ Оригинальный метод требует обучения модели: DICE — это про fine-tuning SLM через SFT и GRPO. Пользователь чата не может обучить модель. Описанный выше принцип "два промпта" — это адаптация идеи для ручного применения.

⚠️ Увеличенный расход токенов: два запроса вместо одного = примерно удвоенные токены (LLM генерирует полный ответ, затем вы его копируете во второй промпт). Для коротких задач перерасход невелик, для длинных — ощутимо.

⚠️ Не для простых задач: если вопрос элементарный ("столица России"), делать два промпта — overkill. Метод для задач где одновременно важны и рассуждения, и точность формата (аналитика, код, structured outputs для API).

⚠️ Качество зависит от модели: если LLM в первом промпте выдала чушь, второй промпт не спасёт. Принцип работает когда модель умеет решать задачу, но плохо форматирует. Если модель вообще не знает ответа — два промпта не помогут.


🔍

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

Исследователи взяли 5 датасетов рассуждений (GSM8K, MATH, CommonsenseQA, MedQA-zh, StrategyQA) и переформатировали их в XML: ответ должен содержать <StepByStepReasoning>, <FinalAnswer> и другие теги. Протестировали модели от 0.5B до 72B параметров (Qwen2.5 семейство) с 2-shot промптом, требующим XML вывод.

Что обнаружили парадокс: format accuracy падает с ростом размера модели. Модели 1.5B-3B выдают 60-80% format accuracy, а 32B-72B — всего 0-10% на сложных задачах вроде MATH. При этом content accuracy (если смотреть только на финальный ответ, игнорируя формат) у больших моделей выше. Вывод: большие модели умеют решать, но игнорируют инструкции по формату.

Дальше построили систему DICE: обучили SLM (0.5B-3B) корректировать выводы 72B модели. Сравнили с baseline: (1) LLM с ICL, (2) reflection (LLM сам себя корректирует), (3) SFT напрямую, (4) другие методы коллаборации (Aligner, BBox-Adapter, CoBB). DICE обогнал всех: format accuracy почти 100%, content accuracy в среднем +29.4% vs базового LLM с ICL, и +18.4% vs лучшего baseline (Aligner).

Почему такие результаты: DICE обучает SLM анализировать вывод LLM перед корректировкой (analyze-then-answer паттерн). Другие методы правят "вслепую" → высокая mis-correction rate (портят правильные ответы). У DICE mis-correction rate <2% — он понимает когда вывод LLM верный и не трогает контент, только форматирует.

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


🔗

Ресурсы

DICE: Structured Reasoning in LLMs through SLM-Guided Chain-of-Thought Correction

Yiqi Li, Yusheng Liao, Zhe Chen, Yanfeng Wang, Yu Wang

Shanghai Jiao Tong University, Shanghai Artificial Intelligence Laboratory

https://github.com/1717Li/DICE


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

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

Чем больше модель, тем хуже она следует формату. 72B модель решает задачу правильно в 67% случаев, но упаковывает в нужный формат только в 5%. Прикол: модель концентрируется на решении сложной математики, а требования к структуре (XML-теги, JSON-скобки) уходят на второй план. Одна пропущенная скобка — весь ответ непарсится, хотя решение верное. DICE разделяет задачу на два этапа: сначала LLM думает естественным языком без ограничений формата, затем малая модель анализирует рассуждение и переформатирует в нужную структуру. Частота ошибочных исправлений — меньше 2%.

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

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

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

Большие модели обучены на разнообразных задачах. При сложном вопросе 72 миллиарда параметров «думают» о математике, а требование добавить теги — периферийная деталь. Если убрать форматные ограничения из промпта, LLM выдаёт корректное рассуждение в 67-96% случаев — проблема только в упаковке. Малые модели (0.5B-3B) обучаются узкой задаче — рефакторингу текста в структуру. Они не отвлекаются на «думание» о решении, их работа — парсинг готового текста. Через обучение с паттерном «сначала проанализируй (rationale), потом упакуй (format)» малая модель видит весь контекст рассуждения и может оценить его корректность перед упаковкой. Отсюда меньше 2% ошибочных правок.

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

Задачи где одновременно важны рассуждения и точность формата → аналитика для автоматической обработки (JSON/XML отчёты), генерация кода с обязательной структурой (функции с документацией), математические решения для парсеров. Особенно когда модель решает правильно, но упаковывает криво. НЕ подходит для простых вопросов («столица России») — два промпта будут overkill.

Мини-рецепт

⚠️ Оригинальный DICE требует обучения малой модели — это для разработчиков систем. Но принцип «два промпта» применим вручную:

1. Первый промпт — свободное рассуждение: Реши [задачу] естественным языком. Не думай о формате вывода — сосредоточься на точности рассуждений и полноте ответа

2. Скопируй ответ полностью — он станет входом для второго промпта

3. Второй промпт — анализ и упаковка: Вот решение: [вставить ответ]. Проанализируй: (1) правильный ли ход рассуждений? (2) есть ли ошибки? Теперь упакуй в формат [XML/JSON/YAML с примером структуры]. Если рассуждение верное — сохрани как есть, только переформатируй. Если ошибка — исправь

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

Примеры

[ПЛОХО] : Напиши аналитическую справку о российских маркетплейсах (Ozon, Wildberries, Яндекс.Маркет) в XML формате с блоками Analysis, Conclusion, Recommendation (Модель будет разрываться между глубиной анализа и соблюдением XML-структуры — получишь либо кривой XML, либо поверхностный анализ)
[ХОРОШО] : Промпт 1: Проанализируй рынок российских маркетплейсов за 2024-2025: динамика GMV, отличия бизнес-моделей, тренды покупателей, риски для новых продавцов. Пиши естественным языком — важна глубина, не формат Промпт 2: Вот аналитическая справка: [вставить ответ]. Проанализируй: сохранены ли ключевые инсайты? Теперь упакуй в XML: . Если важные детали не вписываются — добавь нужные теги. Главное: не потеряй суть анализа ради структуры (В первом промпте модель выдаст живой текст с конкретикой без стресса от форматирования. Во втором — прочитает, поймёт логику, аккуратно упакует без потери смысла)
Источник: DICE: Structured Reasoning in LLMs through SLM-Guided Chain-of-Thought Correction
ArXiv ID: 2510.09211 | Сгенерировано: 2026-01-12 00:18

Проблемы LLM

ПроблемаСутьКак обойти
Модель игнорирует требования к формату когда задача сложнаяПросишь решить задачу И упаковать в XML/JSON. Модель выдаёт правильное решение. Но формат кривой: пропущена скобка, забыт тег, нарушена структура. Парсер не может обработать. Парадокс: чем сложнее задача — тем хуже формат. Модель тратит "внимание" на решение. Структурные требования уходят на второй план. Особенно заметно у больших моделей (32B+): они думают о содержании и игнорируют синтаксисРаздели на два запроса. Запрос 1: реши задачу естественным языком, без требований к формату. Запрос 2: возьми это решение и упакуй в нужную структуру. Во втором запросе модель не думает о решении — только о форматировании. Не делит внимание

Методы

МетодСуть
Два запроса: сначала думай, потом упаковывайШаг 1: Попроси модель решить задачу естественным языком. Без ограничений формата. "Реши задачу. Не думай о структуре вывода — сосредоточься на точности". Шаг 2: Скопируй ответ во второй запрос. "Вот решение: [текст]. Проанализируй: правильное ли рассуждение? Есть ли ошибки? Теперь упакуй в формат [XML/JSON/другое]. Если ошибка — исправь. Если верно — просто переформатируй". Почему работает: В первом запросе модель не тратит ресурсы на синтаксис. Во втором — не думает о решении, только парсит готовый текст. Минусы: два запроса = больше токенов (~вдвое), не подходит для простых задач. Применяй когда: нужны одновременно качественное рассуждение И строгий формат (structured outputs для API, отчёты, код с документацией)

Тезисы

ТезисКомментарий
Большие модели хуже следуют формату при сложных задачахКонтринтуитивный эффект: модели 32B+ параметров игнорируют форматные инструкции чаще чем модели 3B-7B. Механика: У большой модели больше "вычислительной мощности". Когда задача сложная (математика, анализ), эта мощность идёт на решение. Требования к структуре (теги, скобки) — периферийная деталь. Результат: правильное решение в непарсимом формате. Маленькие модели проще — у них меньше возможностей "думать глубоко", поэтому они лучше держат баланс между содержанием и формой. Применяй: Для задач со строгим форматом используй средние модели (7B-13B) или двухэтапный подход (большая модель думает средняя форматирует)
📖 Простыми словами

DICE: два промпта вместо одного для точного структурированного вывода

arXiv: 2510.09211

Суть метода DICE в том, что заставлять одну нейронку одновременно и глубоко думать, и соблюдать строгий формат — это гиблое дело. Большие модели вроде Llama-70B или GPT-4 заточены под решение сложных задач, и когда ты просишь их выдать ответ строго в JSON или специфических тегах, их «мозги» разрываются между логикой и оформлением. В итоге модель либо выдает верное решение, но ломает структуру, либо идеально соблюдает формат, но лажает в самой сути. DICE решает это разделением труда: большая модель просто думает в свободном стиле, а маленькая «прилипала» (SLM) следит за порядком.

Это как если бы ты заставил гениального, но рассеянного профессора заполнять налоговую декларацию. Он испишет поля гениальными формулами, но всё перепутает и выйдет за границы клеток. Чтобы это работало, к нему нужно приставить педантичного ассистента, который возьмет черновик профессора и аккуратно перенесет главные мысли в нужные графы. Профессор (LLM) отвечает за содержательное рассуждение, а ассистент (SLM) — за структурную коррекцию. Формально всё на месте, и при этом никто не сошел с ума.

Технически это реализовано через хитрую дрессировку маленькой модели. Сначала её учат базе через SFT (просто показывают примеры «было — стало»), а потом натравливают алгоритм GRPO. Это такая форма обучения с подкреплением, где модель бьют по рукам, если она ошибается в формате или искажает смысл ответа большой модели. В итоге SLM превращается в идеального корректора, который не просто копирует текст, а понимает паттерн «проанализируй и упакуй». 10 из 10 по точности формата достигаются именно за счет того, что у маленькой модели одна-единственная цель в жизни.

Хотя авторы тестировали это на математических задачах и коде, принцип универсален. Это лекарство от главной боли разработчиков — когда AI-агент ломает парсер, потому что решил добавить «отсебятины» в ответ. Метод доказывает, что связка из «умного гиганта» и «дисциплинированного карлика» работает стабильнее, чем попытки впихнуть невпихуемое в одну модель. SEO умирает, GEO рождается, а в мире разработки софта на LLM эра «одного промпта на всё» сменяется конвейерной обработкой.

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

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

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

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