3,583 papers
arXiv:2610.24928 83 18 окт. 2026 г. FREE

MEDAKA: пошаговое планирование с расчётом чисел по подцелям вместо угадывания

КЛЮЧЕВАЯ СУТЬ
Модель называет число наугад, а потом подгоняет под него логику. Поэтому планы со смесями, закупками и дозировками разваливаются на третьем шаге. Метод MEDAKA позволяет собрать пошаговый план, где каждое число выведено из уравнения, а не придумано. Фишка: действие нельзя записать, пока в нём есть неизвестное число. Неизвестное становится отдельной подцелью, и модель решает маленькую систему уравнений до того, как что-то пересыпать или купить. После каждого шага она выписывает состояние всех объектов целиком.
Адаптировать под запрос
⚡

TL;DR

MEDAKA — это структурированный промпт, в котором перед каждым действием модель делает три вещи. Сначала находит разрыв между текущим состоянием и целью. Затем предлагает действие с ещё неизвестным числом («пересыпать… сколько?»). И только потом вычисляет это число алгебраически как отдельную подцель, фиксирует действие и выписывает новое состояние всех объектов целиком. Метод взят из классики: Means-Ends Analysis («анализ средств и целей», Ньюэлл и Саймон, 1950-е).

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

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

🔬

Схема метода

ЦИКЛ (в одном промпте, пока не останется разрыва):
ШАГ 1: DIFF — что из целей ещё не выполнено → список разрывов
ШАГ 2: Выбрать оператор (действие) под один разрыв → действие с неизвестными числами
ШАГ 3: Проверка применимости: все ли условия и числа известны?
        НЕТ → создать подцель, вывести число уравнением, вернуться к ШАГУ 3
        (отложенные подцели — в стек подцелей)
ШАГ 4: Зафиксировать действие с конкретными числами
ШАГ 5: Выписать ПОЛНОЕ новое состояние (все объекты, не только изменённые)
ВЫХОД: разрывов не осталось → итоговый план
🚀

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

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

Промпт:


Ты планировщик производства. Ты не угадываешь числа: ты выводишь их из уравнений.



S1 (вместимость 50 кг): 10 кг, 60% Бразилия, 40% Колумбия
S2 (вместимость 50 кг): 10 кг, 100% Эфиопия
S3 (вместимость 50 кг): 10 кг, 50% Бразилия, 50% Эфиопия
S4 (вместимость 50 кг): 10 кг, 100% Колумбия
S5 (вместимость 50 кг): 10 кг, 100% Робуста
ORDER (вместимость 50 кг): пусто



ORDER: 6 кг, 40% Бразилия, 30% Эфиопия, 30% Колумбия
Допуск по каждому сорту и по общему объёму: ±0,05 кг.



Пересыпь X кг из A в B (0 < X ≤ текущий объём A).
Состав переносится пропорционально составу источника.
Новая концентрация в B = (объём_B · conc_B + X · conc_A) / (объём_B + X).



Повторяй, пока есть разрыв:
1. DIFF: выпиши, какие условия цели ещё не выполнены.
2. OPERATOR: предложи действие под один разрыв. Числа пока можно оставить неизвестными.
3. APPLICABLE?: проверь, что все условия выполнены и ВСЕ числа определены.
   Если нет — объяви каждое неизвестное число подцелью. Запиши уравнения,
   которые связывают его с текущим состоянием и целью, и реши их.
   Отложенные подцели складывай в стек подцелей.
4. COMMIT: только когда все числа выведены, зафиксируй действие.
5. STATE: выпиши новое состояние ВСЕХ сосудов (объём и состав каждого),
   в том числе тех, которых действие не касалось.
   Следующий DIFF считай только от этого записанного состояния.
Если новое состояние противоречит предыдущему, остановись и найди ошибку.



Покажи шаги по циклу. В конце дай итоговый список действий и финальное состояние ORDER.

Результат: Модель покажет по каждому шагу блоки DIFF → OPERATOR → подцели с уравнениями → COMMIT → полное STATE. Мешок S5 (Робуста) должен остаться нетронутым. В конце будет нумерованный список «пересыпь X кг из … в ORDER» и итоговый состав заказа. Числа можно проверить подстановкой вручную или на калькуляторе.

🧠

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

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

Сильная сторона LLM. Маленькую систему из двух-трёх уравнений модель решает хорошо, если её выделить в отдельную подзадачу. Ещё она хорошо ведёт структурированный протокол, если формат вывода жёстко задан.

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

Рычаги управления: - Полное состояние всех объектов → оставь, это главная защита. Если убрать и писать только изменённое, потеряешь контроль, зато сэкономишь токены. - Стек подцелей → для простых задач можно убрать. Для задач со связанными параметрами оставь. - Фраза «числа можно оставить неизвестными» → без неё модель вернётся к привычке называть число сразу. - Допуск и формат действия → меняй под свою предметную область (кг, рубли, штуки, проценты). - Условие остановки при противоречии → добавь явное «если баланс не сходится, вернись и найди ошибку».

📋

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


Ты планировщик в области {область}. Ты не угадываешь числа: ты выводишь их из уравнений.



{объекты и их текущие параметры: объём, состав, остатки, лимиты}



{целевое состояние объектов}
Допуск: {допуск}.



{список допустимых действий и правила, как они меняют состояние}
{формула пересчёта состояния после действия}



Повторяй, пока есть разрыв:
1. DIFF: выпиши, какие условия цели ещё не выполнены.
2. OPERATOR: предложи действие под один разрыв. Числа пока можно оставить неизвестными.
3. APPLICABLE?: проверь, что все условия выполнены и ВСЕ числа определены.
   Если нет — объяви каждое неизвестное подцелью. Запиши уравнения,
   связывающие его с текущим состоянием и целью, и реши их.
   Отложенные подцели складывай в стек подцелей.
4. COMMIT: только когда все числа выведены, зафиксируй действие.
5. STATE: выпиши новое состояние ВСЕХ объектов (не только изменённых).
   Следующий DIFF считай только от этого записанного состояния.
Если новое состояние противоречит предыдущему, остановись и найди ошибку.



{формат ответа: шаги по циклу, итоговый список действий, финальное состояние}

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

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

Вот шаблон MEDAKA (планирование с расчётом чисел по подцелям). Адаптируй под мою задачу: [твоя задача]. 
Задавай вопросы, чтобы заполнить поля.

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

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

⚠️

Ограничения

⚠️ Слабые модели: на нелинейных задачах (когда результат зависит от промежуточных «общих» ёмкостей) метод почти не помогает маленьким и открытым моделям. Им не хватает собственных способностей к выводу уравнений. Структура не заменяет мощность модели.

⚠️ Цена: ответ длиннее в 2–4 раза. Это больше токенов, дольше ожидание и выше счёт в API.

⚠️ Нет прироста у части сильных моделей: на простых «линейных» задачах топовые модели уже решают почти всё, MEDAKA там мало что добавляет. На GPT-5.4 общий результат вышел на уровне конкурирующего метода, без явного преимущества.

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

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

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

🔍

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

Авторы сделали тестовый набор LiquidWorld: 189 задач на смешивание жидкостей. Каждую пометили тегами сложности: «нелинейная» (через промежуточные ёмкости), «связанная» (одни и те же компоненты в разных источниках), «много целей» и «лишние сосуды». Ответ проверял программный валидатор, без LLM-судьи: он пошагово применял формулы переливания и сверял результат с целью с точностью 1–5%. Сравнивали MEDAKA с обычным Chain-of-Thought и с AoT+ (метод с перебором и периодическим сохранением состояния). Тестировали 7 моделей от маленьких Gemma до Claude Sonnet 4.6 и GPT-5.4. Каждую задачу гоняли по три раза, режим рассуждений отключили.

Результаты: у Claude общий результат вырос примерно с 78% до 94%. На нелинейных задачах он поднялся с 33% до 87%, на задачах «много целей» с 50% до 89%. У GPT-4o с лишними сосудами результат вырос почти вчетверо. Даже с учётом расхода токенов MEDAKA с одной попытки обошёл CoT с лучшей из трёх попыток на 4 моделях из 7.

Что удивило: AoT+, метод с перебором, на слабых моделях иногда ухудшал результат по сравнению с обычным CoT. Это подтверждает гипотезу авторов. Когда нужно вычислять параметры, перебор вариантов не только бесполезен, но и вреден. Практический инсайт: если в задаче надо вывести число, а не выбрать вариант, структурируй промпт вокруг подцелей и учёта состояния, а не вокруг перебора.

💡

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

🔧 Техника: упростить вывод состояния → экономия токенов, но слабее защита

В процедуре замени шаг 5 на:

5. STATE: выпиши новое состояние только изменённых объектов; остальные помечай «без изменений».

Для задач с 3–4 объектами это разумно. В статье требовали выписывать все сосуды, и это важная часть метода. Для длинных задач с десятками объектов лучше оставить полный вывод.

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


Бюджет: 1 200 000 ₽. Остатки на складе: {...}. Цены поставщиков: {...}


Закупить к пятнице набор позиций {...}, уложившись в бюджет и сохранив запас {N} дней.


[та же структура DIFF → OPERATOR → APPLICABLE? → COMMIT → STATE,
где STATE = остаток бюджета и остатки по каждой позиции после каждой закупки]

После ответа сверь итоговые суммы вручную: метод не заменяет проверку.

🔗

Ресурсы

  • Статья: Means-Ends Analysis Helps LLMs Plan in Continuous-State Domains — Jiayi Li, Carl Kingsford, Carnegie Mellon University (Ray and Stephanie Lane Computational Biology Department, School of Computer Science).
  • Код: https://anonymous.4open.science/r/medaka_code-FFD0
  • Теоретическая основа: Newell & Simon, General Problem Solver / Means-Ends Analysis.
  • Сравнивали с: Chain-of-Thought (Wei et al., 2022), AoT+ (Sel et al., 2025).
  • Приложения с полным алгоритмом (Algorithm 1, Appendix B.1) — в оригинальной статье.

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

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

Модель называет число наугад, а потом подгоняет под него логику. Поэтому планы со смесями, закупками и дозировками разваливаются на третьем шаге. Метод MEDAKA позволяет собрать пошаговый план, где каждое число выведено из уравнения, а не придумано. Фишка: действие нельзя записать, пока в нём есть неизвестное число. Неизвестное становится отдельной подцелью, и модель решает маленькую систему уравнений до того, как что-то пересыпать или купить. После каждого шага она выписывает состояние всех объектов целиком.

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

Метод взят из классики: Means-Ends Analysis (анализ средств и целей), Ньюэлл и Саймон, 1950-е. Модель крутит цикл, пока есть разрыв с целью. 1. Разрыв: что из цели ещё не выполнено. 2. Действие: предложи шаг, число можно оставить неизвестным («пересыпать... сколько?»). 3. Подцель: выведи число из уравнений. 4. Фиксация: запиши действие уже с конкретным числом. 5. Состояние: выпиши все объекты, не только изменённые. Сначала считай число, потом записывай действие. Это как кассир, который в конце смены сводит всю кассу, а не только последний чек. Не сошлось — ищи ошибку сразу.

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

Обычное «думай по шагам» идёт потоком. Модель сначала называет число, потом его оправдывает. Остатки в соседних ёмкостях она забывает. Одна кривая цифра портит все следующие шаги. Перебор вариантов («попробуй три действия, выбери лучшее») тут не спасает. Чисел бесконечно много, их нельзя перебрать, их надо вывести. На слабых моделях перебор иногда даже вредит. Зато систему из двух-трёх уравнений модель решает нормально, если выделить её в отдельную задачу. Следующий шаг считается только от записанных цифр, поэтому выдуманное число вылезает как противоречие, а не тихо тянется по цепочке. Цена честная: ответ длиннее в 2-4 раза. Это больше токенов и дороже в API.

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

Планирование с подбором чисел → смеси, закупки, дозировки, раскладка бюджета по статьям, особенно когда параметры связаны друг с другом и на складе лежат лишние варианты-ловушки. НЕ подходит для простых задач, где числа не связаны: сильные модели решают их и так. Слабые и маленькие модели на сложных задачах почти не выигрывают, структура не заменяет мозги. Проверяли только на смешивании жидкостей, перенос на сметы и бюджеты логичен, но не доказан. Встроенные рассуждения модели в тестах были выключены. Шаблон собран по описанию метода, не по оригинальному тексту из статьи. Итоговые цифры всё равно сверяй калькулятором.

Мини-рецепт

1. Дай роль-счетовода: <роль>планировщик, который не угадывает числа, а выводит их из уравнений
2. Опиши склад: все объекты с числами (объём, состав, остатки, лимиты), в блоке .
3. Назови цель и допуск: что должно получиться и с какой погрешностью, например ±0,05 кг.
4. Выпиши правила действий: что можно делать и по какой формуле меняется состояние. Без формулы пересчёта метод не заработает.
5. Вставь цикл: разрыв, действие, подцель с уравнениями, фиксация, полное состояние.
6. Разреши неизвестные: фраза «числа пока можно оставить неизвестными» важна. Без неё модель снова начнёт называть цифру сразу.
7. Поставь предохранитель: «если новое состояние противоречит предыдущему, остановись и найди ошибку».
8. Проверь итог руками: подставь числа в финальное состояние.

Примеры

[ПЛОХО] : Собери 6 кг бленда: 40% Бразилия, 30% Эфиопия, 30% Колумбия, из мешков на складе. Думай по шагам.
[ХОРОШО] : Ты планировщик производства. Ты не угадываешь числа, ты выводишь их из уравнений. Состояние: S1 10 кг (60% Бразилия, 40% Колумбия), S2 10 кг (100% Эфиопия), S3 10 кг (50% Бразилия, 50% Эфиопия), S4 10 кг (100% Колумбия), S5 10 кг (100% Робуста), ORDER пусто. Цель: ORDER 6 кг, 40% Бразилия, 30% Эфиопия, 30% Колумбия, допуск ±0,05 кг. Действие: пересыпь X кг из A в B, состав переносится пропорционально. Повторяй: 1) выпиши разрывы с целью; 2) предложи действие, число X можно оставить неизвестным; 3) объяви X подцелью, запиши уравнения и реши их; 4) только потом зафиксируй действие; 5) выпиши новое состояние ВСЕХ мешков, в том числе нетронутых. Если состояние противоречит предыдущему, остановись и найди ошибку. В конце дай список действий и итоговый состав ORDER. В плохом варианте модель назовёт «возьми 2 кг из S1» и дальше будет подгонять. В хорошем каждое «сколько кг» выводится уравнением, а мешок с робустой должен остаться нетронутым.
Источник: Means-Ends Analysis Helps LLMs Plan in Continuous-State Domains
ArXiv ID: 2610.24928 | Сгенерировано: 2026-10-20 16:50

Проблемы LLM

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

Методы

МетодСуть
Подцели для неизвестных чисел и полная запись состояния — точный план с расчётамиЧто делать. Опиши в запросе: начальное состояние, цель с допуском, разрешённые действия и формулу пересчёта после действия. Потребуй цикл из пяти пунктов. 1) РАЗРЫВ: что из цели ещё не выполнено. 2) ДЕЙСТВИЕ: предложи шаг под один разрыв. Числа пока можно оставить неизвестными. 3) ПРОВЕРКА: все ли числа известны? Если нет, каждое неизвестное становится подцелью. Запиши уравнения и реши их. Отложенные подцели складывай в список. 4) ФИКСАЦИЯ: только теперь зафиксируй действие с конкретными числами. 5) СОСТОЯНИЕ: выпиши новое состояние ВСЕХ объектов, даже нетронутых. Следующий разрыв считай только от записанного состояния. Добавь: «Если новое состояние противоречит прежнему, остановись и найди ошибку». Почему работает. Модель хорошо решает маленькую систему из 2–3 уравнений, если выделить её в отдельную задачу. Число считается до действия, а не подгоняется после. Полная запись состояния работает как сверка в бухгалтерии. Выдуманная цифра не сходится с предыдущей и проявляется как противоречие. Фраза «числа пока можно оставить неизвестными» важна. Без неё модель вернётся к привычке называть число сразу. Когда применять: связанные параметры, много шагов, лишние объекты-отвлекатели. Примеры: смешивание, дозировки, закупки, распределение бюджета. Когда не работает: простые линейные задачи (там сильные модели и так справляются). Слабые и маленькие модели на нелинейных задачах (им не хватает способности выводить уравнения). Цена: ответ длиннее в 2–4 раза. Для простых задач можно убрать список подцелей. Полную запись состояния убирать не стоит: это главная защита. Итоговые числа всё равно проверяй подстановкой или на калькуляторе

Тезисы

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

Means-Ends Analysis HelpsLLMsPlan in Continuous-State Domains

arXiv: 2610.24928

Нейросети феноменально тупят, когда надо что-то смешать, перелить или рассчитать в непрерывных величинах. Обычная LLM генерирует текст линейно: она сначала ляпает цифру от балды, а потом на ходу пытается подогнать её под физику задачи. В итоге остатки в соседних ёмкостях мгновенно плывут, а весь план летит в трубу. Метод MEDAKA вытаскивает наружу классический Means-Ends Analysis: он запрещает модели гадать и заставляет сначала зафиксировать разрыв между фактом и целью, а уже потом изолированно считать математику.

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

Чтобы убрать эту лажу, MEDAKA загоняет модель в строгий трехшаговый алгоритм. Сначала нейросеть формулирует действие абстрактно: «пересыпать сорт А в объеме X», даже не пытаясь угадать икс. На следующем шаге этот X рассчитывается через отдельную алгебраическую подцель по формуле, а не интуитивно. Финал шага — жесткая инвентаризация всего склада, где модель обязана переписать остатки каждого объекта. За счет этого одна кривая цифра не ломает план, ведь система постоянно сверяет карту с реальностью.

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

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

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

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

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