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 считай только от этого записанного состояния.
Если новое состояние противоречит предыдущему, остановись и найди ошибку.
Результат: Модель покажет по каждому шагу блоки 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) — в оригинальной статье.
