3,583 papers
arXiv:2610.32129 71 23 окт. 2026 г. FREE

Shorter Is Not Cheaper: сжатый формат ответа не делает генерацию дешевле, быстрее и надёжнее

КЛЮЧЕВАЯ СУТЬ
Ответ стал на 25–48% короче, а время и стоимость почти не изменились. Надёжность тоже не выросла. Метод проверки позволяет за 10–20 задач понять, окупится ли ваш компактный формат вывода (JSON-«рецепт» вместо готового кода), прежде чем строить на нём продукт. Фишка: мерить нужно всё, что модель сгенерировала, а не длину ответа. У моделей с рассуждением часть работы скрыта в токенах рассуждений, и за них вы платите так же, как за видимый текст. На непривычном формате Claude думает заметно дольше, и выигрыш в длине съедается.
Адаптировать под запрос
⚡

TL;DR

Исследование проверяет простую идею: если просить модель отвечать не готовым кодом (HTML/JavaScript), а коротким декларативным описанием (JSON-«рецептом», который проигрывает готовая программа), то выйдет дешевле, быстрее и надёжнее. Ответ действительно получается на 25–48% короче. Но время и стоимость почти не падают. Надёжность тоже не растёт: свободный код чаще работает с первого раза.

Причина в том, что у моделей с рассуждением (reasoning-моделей) ответ — только видимая часть работы. Перед ним модель «думает» отдельным потоком токенов, и за него вы тоже платите временем и деньгами. Когда формат непривычный, Claude начинает думать заметно дольше. На задачах со спецификацией доля генераций с рассуждением у больших моделей выросла примерно с 15–20% до 85–88%. Открытая Qwen3-14B думала долго в обоих форматах, поэтому короткий ответ почти ничего не сэкономил на фоне длинного рассуждения. Ещё хуже с надёжностью: формат, который модель выучила только из пары примеров в промпте, у малой модели давал валидный результат лишь в трети случаев. Свободный HTML/JS у неё давал рабочий результат в 62% случаев против 17% у спецификации.

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

📌

Схема: как проверить формат вывода перед внедрением

ШАГ 1: Одно и то же задание в двух форматах (свободный код / ваш компактный формат)
       → одинаковый бриф, правила, по 2 рабочих примера в каждом формате
ШАГ 2: Требуем от обоих форматов один «контракт» — выдать состояние в одном виде
       → одни и те же проверки работают для обоих
ШАГ 3: Прогоняем каждую задачу несколько раз (в исследовании — по 3)
       → один запрос = одна генерация + одна попытка исправления по тексту ошибок
ШАГ 4: Сравниваем не длину ответа, а всё:
       → токены ответа, токены рассуждений, время, % валидных, % верных по смыслу

Шаги 1–2 — это промпты. Шаги 3–4 вручную делает любой человек из команды на 10–20 задачах.

🚀

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

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

Промпт (вариант «свободный HTML/JS»):

Ты делаешь интерактивное объяснение для клиента Сбера: как работает
аннуитетный платёж по ипотеке.

ЗАДАЧА
Напиши один самодостаточный HTML-файл (без сети), который анимирует
первые 24 месяца платежей и показывает, как в платеже меняется доля
процентов и доля основного долга.

ПАРАМЕТРЫ, КОТОРЫЕ МЕНЯЕТ ПОЛЬЗОВАТЕЛЬ
- sum: сумма кредита, от 1 000 000 до 20 000 000 ₽, по умолчанию 6 000 000, шаг 100 000
- rate: ставка, % годовых, от 5 до 25, по умолчанию 18, шаг 0,5
- term: срок, лет, от 1 до 30, по умолчанию 20, шаг 1

СОСТОЯНИЕ, КОТОРОЕ ОБЯЗАНО ПОКАЗЫВАТЬСЯ
- month — номер месяца (с 1)
- payment — аннуитетный платёж, ₽
- interest — часть платежа на проценты, ₽
- principal — часть платежа на основной долг, ₽
- balance — остаток долга после платежа, ₽

ПРАВИЛА
- Формула аннуитета стандартная; проценты считаются на остаток долга на начало месяца.
- Каждое состояние (каждый месяц) видно на экране не меньше 0,3 секунды.
- Рисунок и числа берутся из одних и тех же переменных.

КОНТРАКТ (обязательно)
Страница должна выставлять объект window.__explain с полями:
duration, params (текущие значения), seek(t) — детерминированный переход
к моменту t, getState() — вернуть переменные состояния в текущий момент,
setParam(name, value).

ПРИМЕР 1: [вставь рабочий пример на другой задаче]
ПРИМЕР 2: [вставь второй рабочий пример]

Затем: возьмите те же 8–10 задач и тот же бриф, но с вашим коротким форматом. Пропустите оба варианта через одинаковую проверку и сравните не длину, а итоги.

Результат: Модель выдаст HTML-страницу со стандартной структурой, анимацией и ползунками. Через getState() вы сверите числа с расчётом в Excel без визуальной проверки на глаз. Дальше сравнение покажет, дают ли короткий формат и свободный код разное время ответа, число повторных попыток и долю верных расчётов. Исследование предупреждает: не рассчитывайте на выигрыш только потому, что ответ короче.

🧠

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

Слабость. Длина видимого ответа почти ничего не говорит о стоимости. У reasoning-моделей часть работы скрыта в «мыслях». Когда формат непривычный, модель тратит больше мыслей на то, чтобы не ошибиться в синтаксисе и в правилах. Выигрыш в ответе съедается рассуждением.

Сильная сторона. Модели отлично пишут HTML/JS, потому что в обучении видели его огромное количество. Им не нужно думать о формате, они сосредоточены на содержании. Поэтому свободный код с одной попыткой исправления почти всегда запускается, хотя он длиннее.

Как метод обходит слабость. Сравнение идёт по всей работе модели, а не по размеру ответа. Единый «контракт» состояния делает проверку одинаковой для обоих форматов и убирает субъективное «выглядит правильно».

Рычаги управления: - Число параметров и вариантов. Каждую задачу проверяют при 2–3 значениях параметров, и параметр, который объяснение игнорирует, сразу ломает проверку. Добавляйте значения, чтобы поймать «обманки». - Примеры в промпте. В исследовании по два рабочих примера в каждом формате. Дайте больше примеров на сложных схемах, чтобы снизить риск ошибок. - Попытки исправления. Одна попытка по тексту ошибок. Для вашего процесса можно ставить две-три, но считайте их в стоимость. - Контракт. Выбирайте поля, которые легко проверить вручную: итоговые числа, этапы, очередь.

📋

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

Это шаблон «свободный код + контракт состояния» из исследования, его HTML/JS-условие. Если захотите сравнить с компактным форматом, дайте во втором прогоне тот же бриф, но с описанием своего формата и примерами в нём.

Ты делаешь интерактивное объяснение: {тема}.

ЗАДАЧА
Напиши один самодостаточный HTML-файл (без доступа к сети), который
анимирует {что именно показать} и даёт пользователю элементы управления.

ПАРАМЕТРЫ, КОТОРЫЕ МЕНЯЕТ ПОЛЬЗОВАТЕЛЬ
{параметр_1}: от {мин} до {макс}, по умолчанию {знач}, шаг {шаг}
{параметр_2}: ...

СОСТОЯНИЕ, КОТОРОЕ ОБЯЗАНО ПОКАЗЫВАТЬСЯ
{переменная_1} — {смысл, единицы}
{переменная_2} — ...

ПРАВИЛА
- {правила и соглашения предметной области, например формулы, порядок шагов}
- Каждое отдельное состояние видно на экране не меньше {секунд} секунд.
- Рисунок и числа берутся из одних и тех же переменных.

КОНТРАКТ (обязательно)
Страница выставляет объект window.__explain:
- duration — общая длительность
- params — текущие значения параметров
- seek(t) — детерминированный переход к моменту t
- getState() — вернуть переменные состояния в текущий момент
- setParam(name, value) — изменить параметр

ПРИМЕР 1: {краткий рабочий пример на другой задаче}
ПРИМЕР 2: {второй рабочий пример}

Подставьте: - {тема} и {что показать} — суть объяснения. - параметры — только те, что реально должен менять пользователь. - переменные состояния — всё, что вы потом будете сверять с эталоном. - правила — спорные места предметной области, где возможны разные трактовки. - примеры — настоящие, рабочие и из другой темы, чтобы модель не копировала содержание.

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

Вот шаблон задания на интерактивное объяснение с контрактом состояния.
Адаптируй под мою задачу: [твоя тема и что нужно объяснить].
Задавай вопросы, чтобы заполнить поля.

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

LLM спросит про параметры, которые будет менять пользователь, переменные состояния и спорные правила предметной области. Это нужно, чтобы вы потом проверили результат по цифрам, а не «на глаз». Примеры она возьмёт из шаблона и перестроит под вашу тему.

⚠️

Ограничения

⚠️ Узкая область: тестировали только анимированные объяснения (физика, алгоритмы, сети, ML, вероятность) на 20 задачах. Для текстов, таблиц и обычных JSON-ответов результат может быть другим.

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

⚠️ Большая часть эффектов не достигла значимости: по времени генерации значимого ускорения нет ни у одной модели. Суммарный размер вывода достоверно упал только у самой большой модели Claude. У самой малой он вырос.

⚠️ Объяснение механизма — гипотеза: рост рассуждений у Claude на спецификациях описан как исследовательская (exploratory) находка. Предварительно заявленную проверку такого сдвига у Qwen не подтвердили.

⚠️ Правильность, а не польза: проверяли верность состояния и работоспособность, а не то, лучше ли человек поймёт объяснение. Авторы сами оговаривают, что польза анимации для обучения спорна.

⚠️ Часть цифр про Qwen — из аннотации: в обрезанном тексте подробные таблицы для Qwen не приведены.

🔍

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

Идея была в том, чтобы убрать все смешивающие факторы. Автор написал 20 заданий на интерактивные объяснения: падение снаряда, TCP-рукопожатие, градиентный спуск, задача Монти Холла и т. д. Каждое задание получило подробный бриф: параметры, нужные переменные, строгие правила, где возможны разные конвенции (например, схема разбиения в быстрой сортировке).

Все задания решались в двух форматах: свободный HTML/JS и ExplainSpec — изобретённый автором JSON-формат с таймлайном, которым управляет готовый рантайм. Промпты были почти одинаковой длины (около 12 тыс. символов) и содержали одинаковые правила и по два рабочих примера. Три модели Claude прогнали каждую задачу по 3 раза в обоих форматах: 360 запусков с одной попыткой исправления по тексту ошибок. Потом на Qwen3-14B с включённым и выключенным рассуждением добавили ещё 240 запусков.

Чтобы проверять одинаково, оба формата обязали выставить «контракт» со getState(). Проверки сравнивают состояния с эталоном независимо от скорости анимации. Их предварительно проверили на 40 эталонных реализациях и на 1 430 намеренно испорченных вариантах. Отсеялись 98,5% испорченных. Гипотезы и план анализа зафиксировали заранее хешами файлов, чтобы не подгонять выводы.

Результаты оказались неожиданными. Токены ответа упали на 25–40% (Claude) и на 25–48% (все четыре модели). Но у Claude вырос объём рассуждений. Например, у Opus рассуждения были лишь в 9 из 60 запусков HTML, а в формате спецификации — в 51 из 60. В итоге суммарный вывод достоверно уменьшился только у Opus (в 0,81 раза), у Sonnet остался прежним, у Haiku вырос. Время генерации ни у кого не уменьшилось значимо. После исправления доли верных результатов у спецификации тоже были ниже, чем у HTML. Для Qwen3-14B валидных спецификаций было 33%, а все семантические проверки проходили в 17% (у HTML/JS — 62%).

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

💡

Адаптации и экстраполяции

Это мои идеи по мотивам статьи, не часть оригинального метода.

🔧 Техника: добавить обязательный вывод состояния → дешёвая проверка без автотестов

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

В конце после кода выведи таблицу: для параметров {набор_1}, {набор_2}, {набор_3}
значения {переменные_состояния} на каждом шаге.

Вы сверяете таблицу с эталоном в Excel. Так проверка выполняется человеком из команды, как в исследовании, только без Playwright.

Экстраполяция: проверка «умного» формата в автоматизации. Если в вашей автоматизации (Make, n8n, Zapier) вы просите модель отвечать строго в JSON ради «экономии», прогоните 10–20 типовых запросов в двух вариантах:

Вариант А: ответь свободным текстом, затем отдельно выдели поля.
Вариант Б: ответь сразу в JSON по схеме {схема}.

Запишите для каждого: токены ответа, общее время, долю валидных ответов, долю верных по смыслу. Если Б не выигрывает по времени и верности, оставьте А. Прямого подтверждения этого для текстовых задач в статье нет — это идея для вашей проверки.

🔗

Ресурсы

  • Работа: Shorter Is Not Cheaper: A Controlled Comparison of Declarative Animation Specifications and Free-Form Code for LLM-Generated Explanations — Jiantang Huang, Northeastern University (preprint).
  • Упомянутые в статье форматы и системы: A2UI, json-render, OpenUI, ChatGPT Intelligent UI, ALGOGEN, Keyframer, DataMagic, InteractScience.
  • Формат ExplainSpec и «контракт наблюдения» window.__explain описаны в разделе 3 статьи.

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

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

Ответ стал на 25–48% короче, а время и стоимость почти не изменились. Надёжность тоже не выросла. Метод проверки позволяет за 10–20 задач понять, окупится ли ваш компактный формат вывода (JSON-«рецепт» вместо готового кода), прежде чем строить на нём продукт. Фишка: мерить нужно всё, что модель сгенерировала, а не длину ответа. У моделей с рассуждением часть работы скрыта в токенах рассуждений, и за них вы платите так же, как за видимый текст. На непривычном формате Claude думает заметно дольше, и выигрыш в длине съедается.

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

Это не приём для промпта, а протокол честного сравнения. Работает как A→B→C. Берёте одно задание и даёте его в двух форматах: свободный код и ваш компактный формат. Требуете от обоих один контракт состояния: страница выдаёт текущие числа в одном и том же виде. Прогоняете каждую задачу несколько раз и считаете всё: токены ответа, токены рассуждений, время, долю рабочих и долю верных результатов. Одинаковый контракт и одинаковые проверки убирают «выглядит правильно» и оставляют только цифры. Это как сравнивать две машины не по объёму бака, а по расходу на 100 км в одном и том же маршруте.

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

Длина ответа показывает верхушку айсберга. Остальное модель думает отдельным потоком токенов, и это тоже время и деньги. Когда формат незнаком, модель перестраховывается. Она проверяет синтаксис и правила, и рассуждений становится больше. Жесть: у больших моделей доля генераций с рассуждением на спецификациях выросла с 15–20% до 85–88%. А HTML/JS модели видели в обучении в огромных количествах, поэтому пишут его почти без раздумий. Открытая Qwen3-14B думала долго в обоих форматах, и короткий ответ на этом фоне ничего не сэкономил. С надёжностью хуже: формат из двух примеров в промпте дал у малой модели 17% валидных результатов. Свободный HTML/JS дал 62%. Честно: большая часть эффектов не достигла значимости, а объяснение про рассуждения авторы называют гипотезой.

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

Разработка продуктов на LLM → когда вы придумали свой короткий формат вывода (JSON-схему, DSL, «рецепт» для рантайма) и хотите сэкономить токены. Особенно важно, если модель знает формат только из примеров в промпте и вы не дообучали её. Подходит и для выбора между «модель пишет код» и «модель заполняет схему» в виджетах, схемах, интерактивных объяснениях. НЕ подходит как доказательство для текстов, таблиц и обычных JSON-ответов: исследование проверяло только анимированные объяснения на 20 задачах.

Мини-рецепт

1. Возьми 10–20 реальных задач: те, которые вы действительно будете генерировать, а не игрушечные.
2. Напиши один бриф: тема, параметры, правила предметной области. Дай его обоим форматам без изменений.
3. Дай по 2 рабочих примера в каждом формате: и из другой темы, чтобы модель не копировала содержание.
4. Введи контракт: оба формата обязаны отдавать состояние (месяц, платёж, остаток) в одном виде. Тогда одна проверка подходит обоим.
5. Прогони каждую задачу 3 раза: одна генерация плюс одна попытка исправления по тексту ошибки.
6. Проверяй параметры: меняй 2–3 значения. Если параметр объяснение игнорирует, проверка сразу сломается.
7. Считай всё: токены ответа, токены рассуждений, время, долю рабочих, долю верных по смыслу. Решай по сумме, а не по длине.

Примеры

[ПЛОХО] : Придумай короткий JSON-формат для ипотечного виджета. Он короче HTML, значит дешевле и быстрее.
[ХОРОШО] : Ты делаешь интерактивное объяснение: аннуитетный платёж по ипотеке. Напиши один самодостаточный HTML-файл без сети. Параметры: sum от 1 000 000 до 20 000 000, rate от 5 до 25, term от 1 до 30. Обязательное состояние: month, payment, interest, principal, balance. Проценты считай на остаток долга на начало месяца. Страница выставляет window.__explain с полями duration, params, seek(t), getState(), setParam(name, value). Пример 1: [рабочий пример на другой задаче]. Пример 2: [второй пример]. Затем дай тот же бриф с вашим коротким форматом и сверь getState() с расчётом в Excel. Сравни не длину, а время, число повторных попыток и долю верных расчётов.
Источник: Shorter Is Not Cheaper: A Controlled Comparison of Declarative Animation Specifications and Free-Form Code for LLM-Generated Explanations
ArXiv ID: 2610.32129 | Сгенерировано: 2026-10-26 15:10

Проблемы LLM

ПроблемаСутьКак обойти
Короткий формат ответа не делает работу дешевле и быстрееПросишь модель с рассуждениями отвечать сжатым форматом вместо привычного кода или текста. Видимый ответ короче на четверть или половину. Но время и цена почти те же. Перед ответом модель думает отдельным потоком токенов, и за него тоже платишь. С непривычным форматом она думает дольше: боится ошибиться в синтаксисе и правилах. Экономия в ответе съедается рассуждениями. Гипотеза проверена на одном типе задач и подтвердилась не у всех моделейНе считай экономию по длине ответа. Считай всё вместе: токены ответа, токены рассуждений, время. Сравни два формата на 10–20 одинаковых задачах до внедрения. Если выигрыша нет, оставь привычный формат
Формат, который модель видела только в паре примеров, даёт много бракаПридумал свой короткий формат (свой JSON, своё описание). Показал модели два примера и описание. Малая модель выдаёт валидный результат примерно в трети случаев. Привычный код с той же задачей работает в разы чаще. Модель знает привычные форматы из обучения и не тратит на них внимание. Свой формат приходится «угадывать» на летуДля малых моделей бери формат, который они знают: HTML/JS, обычный JSON по схеме, Markdown. Если нужен свой формат, дай больше примеров на сложных случаях. Добавь одну попытку исправления по тексту ошибок и считай её в стоимость. Меряй долю валидных ответов, а не длину

Методы

МетодСуть
Честное сравнение форматов — решение по данным, а не по ощущениюДай одну и ту же задачу в двух форматах. Одинаковые правила, по два рабочих примера в каждом формате. Каждую задачу прогони несколько раз (например, три). После каждой генерации дай одну попытку исправления по тексту ошибки. Сравнивай: токены ответа, токены рассуждений, время, долю валидных, долю верных по смыслу. Почему работает: длина ответа скрывает работу модели, а полный учёт её показывает. Когда применять: выбираешь формат вывода, который будет работать массово. Когда не нужно: разовая задача, где цена не важна
Контракт состояния — проверка по числам, а не на глазПотребуй от модели выставить ключевые переменные в одном и том же виде. Например, функция getState() возвращает номер шага, сумму, остаток. Для любого формата работает один и тот же автоматический тест. Сверяй числа с эталоном (Excel, свой расчёт). Почему работает: «выглядит правильно» обманывает, числа не обманывают. Одинаковый контракт делает сравнение форматов справедливым. Совет: проверяй при 2–3 значениях параметров. Тогда параметр, который результат игнорирует, сразу виден. Когда применять: модель генерирует код, виджеты, симуляции, расчёты. Когда не работает: результат нельзя свести к проверяемым переменным (стиль, тон текста)
📖 Простыми словами

Shorter Is Not Cheaper: A Controlled Comparison of Declarative Animation Specifications and Free-Form Code forLLM-Generated Explanations

arXiv: 2610.32129

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

Это как заставить прораба писать смету не словами, а азбукой Морзе, чтобы сэкономить бумагу на стройке. Бумагу ты спасёшь, но прораб просидит над ней три часа, сломает мозг и всё равно напутает в точках и тире. Нейросеть обучена на миллиардах строк обычного JavaScript, а твой «экономный» JSON-рецепт для неё — дикий птичий язык, требующий тройных усилий.

Эксперимент на анимациях разложил всё по фактам. Да, декларативные спецификации сокращают видимый объём на 25–48%. Но скорость и финальная цена практически не падают. Хуже того: обычный свободный HTML и JavaScript работает с первого раза гораздо надёжнее, пока модель в попытках уложиться в жесткий искусственный шаблон выдаёт нерабочий мусор.

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

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

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

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

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