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
